|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 T4 I9 W; Z9 Z; \) W; l* ?#include <linux/init.h>
3 [) V- P$ d, F# T#include <linux/module.h>4 j) F& V1 _) e$ q& @
#include <linux/kernel.h>
. B0 _* z- }9 d9 R }6 w#include <linux/types.h>, m: [ h' ? j' t6 \& F/ D% h
#include <linux/gpio.h>: {! _- `0 j# C& U% U$ {5 J
#include <linux/leds.h>0 t& z' d5 i5 P5 u& ?7 C2 a
#include <linux/platform_device.h>
' ^4 D, A& o/ V* K: t0 l1 w% H9 C1 c% S: \! q7 w) [8 k
#include <asm/mach-types.h>
& S- F% K% n/ J1 X0 T#include <asm/mach/arch.h>9 Q* |( K/ ?* _9 f1 j& a7 e
#include <mach/da8xx.h>
$ d( r/ I, p/ W1 e5 d8 H+ y! v#include <mach/mux.h>
. U# H5 u R) a. {4 v$ m( O+ `+ J0 X2 z2 L0 H0 r; N6 i
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 ^3 Y% n2 t! d#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, Q* D) z5 ~( d3 b" q, Z' m# j#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 i7 g" f6 x: _#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); |, }* u4 _- ]3 x
4 K4 f0 ?' b/ ~% s/* assign the tl som board LED-GPIOs*/
0 f! S- u5 V1 s/ B' _6 Cstatic const short da850_evm_tl_user_led_pins[] = {2 z3 W2 D. x4 |" Q1 m! j! D
/* These pins are definition at <mach/mux.h> file */! s( b) T! L) C3 o/ r
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- p, [: g. m6 V9 }+ {" H- }4 N -1
9 x7 j* G+ p- t( J s- g v- q. ?};
5 `5 a( a6 l8 `6 R) q6 i. _+ a7 ^: V% R" |! }( |1 ~
static struct gpio_led da850_evm_tl_leds[] = {
+ B& B c+ U1 N1 x {& c4 B! M3 g1 W: M- Y8 A
.active_low = 0,, I6 ?% ?" W }, o
.gpio = DA850_USER_LED0,0 _% \# F; T5 Z' i
.name = "user_led0",& Y8 n, Z1 C# M
.default_trigger = "default-on",; l) Y/ ^/ N: z1 ?
},$ F9 o s4 C+ F
{! \0 @: ]8 v) e" k
.active_low = 0,
7 }4 f$ M+ W; u2 O3 e) A# G .gpio = DA850_USER_LED1,
' C- T+ k5 L" B7 V .name = "user_led1"," G# Z, }& e/ U8 c8 R7 i
.default_trigger = "default-on",, z8 B' ~9 `/ b# d. `" u$ J
},
, S {3 t1 L7 \; ]- L9 }1 q {9 h4 V6 T( [/ D) T @6 \! u; c
.active_low = 0,
4 Z- ^* N4 E/ B' X2 I d" }" w# w .gpio = DA850_USER_LED2, j6 G4 f6 W, j0 ~) a' S, e7 I
.name = "user_led2",
! T3 s; P6 y1 L* l- p .default_trigger = "default-on",
' R6 T8 P/ H$ Z6 o! ] },# H9 ?* P6 W5 z0 H4 V
{5 v+ W3 @% M. |6 V: D
.active_low = 0,
7 i9 g4 V$ G7 z$ B0 L( V* ` .gpio = DA850_USER_LED3,0 V) L$ _, m1 h, k
.name = "user_led3",1 ]4 B: j. c) c7 H
.default_trigger = "default-on",/ B e% K3 Z+ |+ \; H; [
},. {5 A3 |: P, I* k0 c5 P0 k
};
+ V. C6 `$ W0 w6 d) j
3 [! A* w) J. y* m. T6 xstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {1 F$ ^, \1 c L0 W
.leds = da850_evm_tl_leds,
( W# C) [, r! U4 g* k7 q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 f# S" s( A/ C7 Z1 ^};( p) T8 ~0 y. o) E' B% C
. K6 M" Z4 u2 Bstatic void led_dev_release(struct device *dev)+ ~: D1 l/ Y V* j
{
0 b( N" w! e& A8 T5 S' q};4 a( R% K4 G3 M2 h {3 t" J
: L6 S8 X8 V0 u6 e% H! S Z
static struct platform_device da850_evm_tl_leds_device = {3 |$ X. I& d) v
.name = "leds-gpio",+ d3 P" |0 R8 P3 M
.id = 1,
% e) X$ z- ?% a .dev = {7 u- r) M; I% h9 @, s
.platform_data = &da850_evm_tl_leds_pdata, _8 L7 ^1 f# Z/ X" c( ^: p( g b9 ?
.release = led_dev_release,3 G" V: B$ S5 O: o7 H, D6 R
}+ z9 s& a0 @/ P7 W+ T( O9 t0 W
};
4 {# p9 c7 O' r
8 N* B: U$ U( ~$ q0 rstatic int __init led_platform_init(void)
/ E% R- s+ H. T{
* B1 t$ R: S" ]+ v; q% `' d int ret;
" J* c7 w4 Z& N3 h# H#if 0
# h5 _! y8 J" [, Y6 | ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 ]0 M1 K: w) B9 j$ s* J
if (ret)+ T( |) j* e# q* _. u0 B+ q
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
( E# p# j) g, P& b' r "%d\n", ret);& r5 z- j8 V2 e, J+ M: ^: I
#endif* M" w0 H$ w/ W& c
ret = platform_device_register(&da850_evm_tl_leds_device);
- {2 L, Q- X! I5 y1 X- o5 | if (ret)
2 h! s% @0 C( ]( m5 r9 Y pr_warning("Could not register som GPIO expander LEDS");
3 A5 P* Q" f& u: _3 a% i' ^9 Z else
0 Y+ m+ V3 o( D4 k& k: x) B printk(KERN_INFO "LED register sucessful!\n");, G- ^$ @( a6 B: n
% T& G7 M) K2 b L$ d" r/ z& y return ret;
2 t6 v1 A7 z1 }2 D# b6 y! m}5 x; S+ W7 s+ y# L, {
6 u( _4 J( i) o, Q
static void __exit led_platform_exit(void)3 r% P. I9 K* |* }) p% \8 I
{
- v9 o' M, {, H' H, O @/ ] platform_device_unregister(&da850_evm_tl_leds_device);/ }- f* m' H0 M N. h8 w' K+ @
/ Z) w' u0 L5 w! M1 _5 U" k k' P: k printk(KERN_INFO "LED unregister!\n");
" Z/ F. V$ N. R' R- W} s- D1 x; l; ~5 ^1 M
2 C! B" @! {" Y" C9 A& K- m
module_init(led_platform_init);
4 r, H a* d) u) xmodule_exit(led_platform_exit);8 a" s/ \" U7 ~2 S
' b5 \& W# y) C' G) }0 S, v* z
MODULE_DESCRIPTION("Led platform driver");
5 Q! r1 x2 Y( [/ gMODULE_AUTHOR("Tronlong");
" g. q6 h9 k5 m( {5 _MODULE_LICENSE("GPL");$ \; C$ u. t* [# `
7 y, {. l+ Q( P% I# E9 z: a |
|