|
|
求大神给下面的程序做注解,请稍详细些,谢谢。, w& E4 {, p \
#include <linux/init.h>3 f3 P: d" S$ Z' L7 _! @8 a
#include <linux/module.h>
2 B' W& Q x `+ B2 }( m#include <linux/kernel.h>. _! \9 u ^; @, Y) u. `0 q
#include <linux/types.h>
: p$ h$ C8 z U& U#include <linux/gpio.h>; @" z5 K; b0 C" I2 ?2 h% g
#include <linux/leds.h>
' z3 Y3 g6 J/ t- h: ^, I#include <linux/platform_device.h>( f3 R: C% ?( c; s
: m" q0 y1 ]: `3 D3 C+ T' _: N9 f5 k
#include <asm/mach-types.h>
4 l2 P6 f' R7 K; E* K& w+ Z#include <asm/mach/arch.h>) z9 D O0 o! h; Y* V
#include <mach/da8xx.h>
# E' t( Q# p/ b1 m* f# t- B5 R#include <mach/mux.h>
) w' T0 _- @6 g& G* E( h- F) \0 P; t4 |' P6 X4 N# F
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 I0 P4 |% m7 S' i. ]
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 ?, p# C; [# Q$ @. ^#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)7 M: }3 y g3 q/ A2 p8 Y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 P& `3 t, W. O' M* x" x
- ^5 ?# u* }9 K' t. k
/* assign the tl som board LED-GPIOs*/* ^& X3 H# b2 P# c" D E7 y0 t- J
static const short da850_evm_tl_user_led_pins[] = {
4 T, A6 t% @, i9 T- ]# F" r. L/ p' U /* These pins are definition at <mach/mux.h> file */
M: h/ Y( r6 N5 C. j3 ` DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
$ K/ n2 C5 r; j/ s$ Z1 x -1/ _# c" V6 w- q+ t8 I- R% X) k
};
0 B) R7 ?% i$ d2 \3 O+ E s+ w; ~4 m* i8 D& F$ k
static struct gpio_led da850_evm_tl_leds[] = {" n- |; W6 i0 B ` A
{
5 \& G& _) z: l7 C* H .active_low = 0," v9 k4 X5 R- \2 a1 i, r
.gpio = DA850_USER_LED0,# K; z! [$ C' F3 r
.name = "user_led0",% h7 I) B: k# L' h
.default_trigger = "default-on",+ l% I: g; l) C" I7 C( s$ W
},
: w {& m" W+ D- \ {) m5 j7 h5 O1 {$ r
.active_low = 0,4 S( {: Y2 r4 X( V/ V/ t7 @) I
.gpio = DA850_USER_LED1,
6 `$ _* T" M) V k .name = "user_led1",) G' v( r' H! ^9 u1 n
.default_trigger = "default-on",6 H3 R5 V4 k W" k+ P6 M
},
. ]) @* g# m* Y0 ]' l {
# u8 R# d/ h/ K/ `! q .active_low = 0,
3 P5 ~- q. v8 a: j! b' n# P .gpio = DA850_USER_LED2,
/ ?7 l% ~* ^" [2 b! g2 B .name = "user_led2",' @7 Z6 _( W1 M% w0 F1 @
.default_trigger = "default-on",* m5 a; j0 i/ c- q5 B3 j
},
1 C8 ]% W( U1 t: h7 e$ U8 c {, J; p# F1 I6 c, t
.active_low = 0,# h8 E( c! g ^0 ~' p
.gpio = DA850_USER_LED3,% Q; k7 C& @1 m4 A d
.name = "user_led3",
8 y, ?+ w0 t2 r$ k S0 b6 W .default_trigger = "default-on",
" H1 Y& e8 T7 T },
4 s- M" y' m4 {- K};
/ @- [( e" N7 S7 r# C2 z6 W& f w4 V5 c7 W
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 r2 Z+ q4 X; W8 p .leds = da850_evm_tl_leds,
9 D) ?6 e: B2 m" X! { s6 _ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
+ n( ^3 Q" A: @ ~};; K3 T( V6 I, Q
0 [: Y, W' \; T3 ~- X! x
static void led_dev_release(struct device *dev)
6 W9 W5 M5 H5 b7 u2 F0 O{: s6 r, t! I O* r4 R" y' c; P' z
};
0 x0 n5 u. {+ c5 }2 b$ M- L2 c6 {! M" B
static struct platform_device da850_evm_tl_leds_device = {/ u/ V9 |" I) _; u) a* N
.name = "leds-gpio",
5 z6 N. V4 T8 h4 ]3 F1 u* L6 [6 U .id = 1,
( f0 Y/ ?( ~( c% P .dev = {& `# h2 L3 E2 P& ]* B
.platform_data = &da850_evm_tl_leds_pdata,
+ K& O8 q7 E C6 _! e2 p5 _( j# P .release = led_dev_release,
6 b/ f) X, I5 S5 N; Q% O+ j1 ?+ n: Q }
* O1 b( N- O' U2 i8 G* C$ M};5 F+ j; B0 r$ h! C1 o/ |' |( q2 q: P
5 K3 {7 K) H, u% W7 p) Lstatic int __init led_platform_init(void)/ M) _& z3 f' H! G5 G
{1 ]/ ?# {+ g% x6 m5 t8 D
int ret;
" J- ~0 {: I! @# d2 B3 X#if 0, B/ F6 [+ m' S3 K$ P6 w; u \% m
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 |- C/ P6 _7 L3 t# T5 c8 g
if (ret)9 g! ?& @0 q: d4 |- ?* ^
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* h" g. W% Z" R; u( ?2 R "%d\n", ret);
& f) r- _' ?1 I% d! l#endif
& V: Y( p0 @* e, K& I1 n* X ret = platform_device_register(&da850_evm_tl_leds_device);6 C. t, f, h5 X: Z1 |+ f F% `' C% |
if (ret)
. z4 f( L T0 \+ J7 a. T7 a pr_warning("Could not register som GPIO expander LEDS");! L0 N3 s. V1 C
else
! {: R) N$ e; D l8 q printk(KERN_INFO "LED register sucessful!\n");7 X3 \: H, q" e' p
) s6 y0 V* D4 } return ret;" {* j3 v3 z3 I/ V6 ^: E+ B
}& \, [. X+ q, T, _& j
0 T6 ~5 U0 e3 r. F4 {static void __exit led_platform_exit(void). ~( m0 `) t1 w
{% C3 A! J: R3 ], [0 _/ K3 u0 G, R; ~
platform_device_unregister(&da850_evm_tl_leds_device);; O6 y' r9 c5 z5 V" _0 U" ]
. M( J. i( O. d9 A% D) | printk(KERN_INFO "LED unregister!\n");% B" I! O+ X6 ~& z, X! }
}: q9 j4 X; B9 @9 G+ v U
4 G' Q. H; d @, Jmodule_init(led_platform_init);6 h( f; S; m3 R* L4 Q1 i, \
module_exit(led_platform_exit);; B, u; x5 J% k1 p6 Z3 c
( b2 `$ Y4 ~9 Q d- l, R6 P
MODULE_DESCRIPTION("Led platform driver");0 ^$ M5 ]3 w( L \
MODULE_AUTHOR("Tronlong");
2 e( {' x" T5 q) z/ w& A9 MMODULE_LICENSE("GPL");
3 x/ A; Z! B6 d9 \- o* e7 S+ P4 V2 M6 j0 I
|
|