|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* j- j; V0 r3 ?3 m: B#include <linux/init.h>3 v7 `# x6 j* l/ ~* o0 ]" `
#include <linux/module.h>; \, p W, E% ?5 Y3 W! G6 ~' ?0 \3 S+ S
#include <linux/kernel.h>8 D. J( @2 [7 l) a/ r
#include <linux/types.h>: }" ~) W& f2 R8 w4 \" [8 u" B
#include <linux/gpio.h>
% v2 x. E3 h6 D5 [1 C4 z#include <linux/leds.h>
7 Q! K# e$ h; m; V#include <linux/platform_device.h>2 Q+ G: s' J1 Z8 t. i- b/ i
) H& u1 n6 \6 @/ z J& k. ?- w#include <asm/mach-types.h>
' n7 c* z/ a8 R# }) z: v3 \#include <asm/mach/arch.h>+ t9 n" E) V( h$ A6 X) k
#include <mach/da8xx.h>3 B! g5 d) t7 o2 I; P' U' n( P2 ]
#include <mach/mux.h>' r& l2 F% Z0 L; c7 U% w
6 R8 J2 ?$ t' o2 b3 L' `
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; Q: j' a; @$ ]#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% |* r- ?2 ?3 t4 i
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 B% D/ k) i: Q; |- h# R4 o
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ j# G* h: s! j, N4 S# P3 Z9 ~/ _- s" \' u5 D
/* assign the tl som board LED-GPIOs*/( \8 P& F1 w* Y; P2 c
static const short da850_evm_tl_user_led_pins[] = {
5 f+ J e! y3 i' R: | /* These pins are definition at <mach/mux.h> file */
, O: k: \7 f& [: [ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 ?; K- h# P- @% ~- }' c8 W2 l( ] -1 a1 a# l/ V& }2 c
};
* p4 k: Y3 d9 F. R# R8 ^% K) U+ j' ~9 S( \7 h
static struct gpio_led da850_evm_tl_leds[] = {
) T: g% U& y m+ Z {
7 L% }* q( l$ _( J" g& B .active_low = 0,2 i' X8 J2 H4 f( u
.gpio = DA850_USER_LED0,
( I3 E/ j' L: I& P/ A$ | .name = "user_led0",4 B% h+ Q4 e# N5 s
.default_trigger = "default-on",
7 _8 g/ [4 S1 L) v },
4 A8 ?& }: n8 |* P# Q" S& y; Q {+ H. L6 H. Q2 J( k8 w
.active_low = 0,; x/ ~% K }4 _( q# l K7 d
.gpio = DA850_USER_LED1,
- K% ~4 U1 E8 w .name = "user_led1",/ @; m. O& d1 R
.default_trigger = "default-on",2 L8 s1 v; W/ k. B
},
7 p g* R0 w7 ?: @ K {+ V& Y5 ~8 |5 u9 }4 J6 a
.active_low = 0,
$ x/ h3 }) W2 Z .gpio = DA850_USER_LED2,3 ~- u8 i9 }# d! Q2 p- u
.name = "user_led2",
6 U2 y+ z- d6 N7 L .default_trigger = "default-on",
1 V4 O E$ B( b. }# r- [" C" L },$ J6 D* t$ O. u; _! E
{! c1 n2 H. j1 ^2 f( n3 A8 M
.active_low = 0,( L3 O, c" E6 w' {# \& o" X
.gpio = DA850_USER_LED3,6 K) J3 y3 F% d/ w' T+ e
.name = "user_led3",
* Q# \! O C' X* l9 | .default_trigger = "default-on",
9 C% K, `0 ?" H' y1 _& T# { },
3 o- R' q8 J% t& i( [) v};
; I/ ^6 ?" Y7 C& m& ^
1 o) O% o8 c: estatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 `& N. r1 Z. V3 s. y9 P# ?
.leds = da850_evm_tl_leds," Y) i. ` y; G% ?" N
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 R+ x' |- j+ }8 T3 R" P: g& }7 u! r
};
5 b4 Q+ y' J) t7 {0 f8 `, Q1 d
& h* P4 L4 l0 m! Tstatic void led_dev_release(struct device *dev)+ A, q5 ~0 l- J' W W+ I
{
0 ?0 G. l* d* U* v' u};
. l* U9 V+ H- A# ^0 }. a8 t$ \1 \, M0 o" W2 h5 Y8 n5 |% Z c
static struct platform_device da850_evm_tl_leds_device = {
* d2 E2 H4 c7 ^( ?4 ~# h3 h .name = "leds-gpio",8 M) G7 J( g0 q+ Q3 P' H
.id = 1,3 p2 ^: Y5 R5 Y+ D9 O
.dev = {
; {0 K( k; y; _6 J7 [5 F .platform_data = &da850_evm_tl_leds_pdata,0 ~6 X" p, B) S6 N; m% H4 S# t
.release = led_dev_release,5 q- F. }$ e5 O* b" a1 {
}# V/ O x- z6 \9 q& R
};" ]7 S* o# Q/ K" }4 ^/ N7 t4 Y
$ N: R0 N: b( H: [1 cstatic int __init led_platform_init(void). [' t5 b4 N0 S
{4 M* O9 {. w* N9 B% L9 l! X
int ret;
1 Z; z' A2 |7 `" a#if 0
1 Z, Y m3 A! [! a6 S ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) t2 _2 F; q* j( ?. n4 ~1 x0 L, G if (ret)5 e; N1 {/ x7 G4 y1 H+ e, y+ J
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 _' h$ ^) H* A
"%d\n", ret);! J7 y; S/ r3 c4 h; a
#endif5 |( `3 |; X) t1 B1 r& |9 b* _
ret = platform_device_register(&da850_evm_tl_leds_device);
7 x* y; h9 k. x% B if (ret)
* d: h$ K! ^" P* ^2 } pr_warning("Could not register som GPIO expander LEDS");
4 B5 K: Y; ^' Y h3 ]$ A else0 V6 n* O8 ^5 \2 @( Y( q2 l
printk(KERN_INFO "LED register sucessful!\n");
0 X' m8 C* R5 |# S7 N+ }7 L1 k- C, {8 H" b+ D r+ r
return ret;( r5 H f O7 g8 R2 E* ?/ S
}
$ u: w8 V. b- _. \( B
8 |7 D6 G7 I i4 j8 }static void __exit led_platform_exit(void)
+ u$ p- z+ i: C8 f+ ?% _5 X% g2 d. s{. S& `4 u4 f5 s# W
platform_device_unregister(&da850_evm_tl_leds_device);4 S. {0 m' L9 p( x* w
& T ^. Y4 } _/ R- d+ s- H, E
printk(KERN_INFO "LED unregister!\n");$ f2 h' }5 B0 G) P
}1 |" k, G4 i6 N1 `3 `
" q4 g9 q8 x8 T7 f' Dmodule_init(led_platform_init);
! D; ?3 A+ z+ s6 [% umodule_exit(led_platform_exit);9 \) R, w2 C2 O, t5 R
" J3 Y( u' B, [& JMODULE_DESCRIPTION("Led platform driver");
! }8 A8 d) J# l! d3 \, j5 n0 ?% MMODULE_AUTHOR("Tronlong");, W$ M2 r) Y6 `3 A6 h
MODULE_LICENSE("GPL");
) j7 O+ S6 }" a% D& V" D; U* g5 H* y
|
|