|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 H$ E0 ^( V) \0 w8 U' r* D0 R( o
#include <linux/init.h> w( T/ x$ N$ F- w& F% ^( p, e# u
#include <linux/module.h> ^: M: B6 ^5 @7 v5 V
#include <linux/kernel.h>
% j2 c- i0 l7 O5 w4 J3 V#include <linux/types.h>1 i" a) \% A3 \1 k# t
#include <linux/gpio.h>' a. n$ K+ V6 o
#include <linux/leds.h>& N9 ], F/ v7 }. U- j. I
#include <linux/platform_device.h>8 k, X9 B! H5 Q: Q+ Q; o8 Q( k$ ]( Y
$ ?: k% Q8 I. p# g
#include <asm/mach-types.h>5 `) A6 r: a5 M$ v( k
#include <asm/mach/arch.h>
E% B6 T' n$ e) d' f& i. A' a#include <mach/da8xx.h>
, e& S7 N. U' d% ?2 ~2 o) W#include <mach/mux.h>
2 T: K o. l+ m/ m2 K! z) X- j$ O6 W) _5 e2 Y% r4 q( h8 `
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" w9 b, j# c, P6 q- W S" _
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 E& i. V8 M# z3 R#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
0 Q6 r# D( p9 O8 P# q2 V: Q' t#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" @6 W1 a$ U7 |' I M: ~
: b2 C9 {3 i) M! H; Z/ d) X/* assign the tl som board LED-GPIOs*/
9 C! c' f( @" Lstatic const short da850_evm_tl_user_led_pins[] = {
9 x$ Y4 T4 R# \) U2 w% n /* These pins are definition at <mach/mux.h> file */
! E7 |6 a7 Y2 n* U. `9 F! l9 }7 X DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 k+ J8 x# b# t5 b! [& t8 A0 @, j -1
% ^% _ T. o. o6 o};
. G3 s( x& ^ ~) `, N
' X6 x, ?* a0 estatic struct gpio_led da850_evm_tl_leds[] = {. A8 V" L" N" ?6 d+ m
{
- q1 B7 L2 I4 f9 b6 o .active_low = 0,5 g ]+ b# g+ v1 o/ K* @
.gpio = DA850_USER_LED0,1 l7 S% |% Y v- Y7 h
.name = "user_led0",
3 t: A7 c* _6 b( e8 q- G .default_trigger = "default-on",
! T0 d2 P; T& X. c },
& ?9 T$ W& p1 h5 k! I5 i2 e% T {3 a+ i9 V% b3 x5 Z& E
.active_low = 0,
$ m( N# a" C1 N! W+ @; ?, i' c% t .gpio = DA850_USER_LED1,% z% A$ J' D+ p3 s9 Z7 Q
.name = "user_led1",
7 @' N5 _/ C/ u O) M2 h .default_trigger = "default-on",
. ~/ O- a+ |% Z# u; P },! F4 u n9 L* S
{. O- [7 T9 H5 |- c" O
.active_low = 0,# M/ ~/ N! r2 }1 m* V
.gpio = DA850_USER_LED2,& ~. S% y7 e$ L w+ z
.name = "user_led2",3 h' W% R3 H) {0 M5 _
.default_trigger = "default-on",
3 _. Y* K, ?* _ },. @$ l5 F% T- C, F" ^7 g/ ?
{. h% A: a7 p4 F3 G. y
.active_low = 0,% Q9 |( ?( a+ j- A
.gpio = DA850_USER_LED3,8 E# V& D( i6 ]0 M" j4 R( w/ A/ i+ B
.name = "user_led3",
' x$ A6 g" r4 ~ .default_trigger = "default-on"," S: Y: ^1 D# G
},
6 }; _7 U3 m6 |* D};3 H0 e1 ?/ ~: S" c h) T" h
+ j. |% e; @6 u, i) F
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
# `# X: H f* R2 r2 ^, Q .leds = da850_evm_tl_leds,$ S9 B' v( _5 ]
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 o2 f" x7 d/ w5 L: S: W: \0 L4 b' o
};" q* A/ c" p$ b9 I5 I, |
1 Y3 I# B3 m* e6 G: A, \+ W
static void led_dev_release(struct device *dev)" J, G* l5 m( N" @
{
/ Q1 N; s! `, L' y};
( H0 t) @+ b/ N( _+ R, g
/ ]( M0 A$ \5 r5 L; |' Y3 ] y) astatic struct platform_device da850_evm_tl_leds_device = {
3 ?0 \! Z2 f C V+ y .name = "leds-gpio",
7 x" S6 \1 T" D/ J$ r! ^ .id = 1, U$ x2 w- V2 ^5 D
.dev = {
' D- d! |% W- b' R6 ]+ `' M .platform_data = &da850_evm_tl_leds_pdata,
: H5 Q- y$ ~2 p .release = led_dev_release,% y( i% B$ v/ |" `8 B
}
3 \/ z: T/ r: w( S& {4 @( d, z" v};" V! r0 s) ^! r: E; S; m- t8 F
; \; H* a. @( _2 \0 ^static int __init led_platform_init(void)7 C! R+ I8 h2 ~( w
{/ U. O0 B$ b' O8 E7 u! ?+ P. _
int ret;
/ M, B6 Q$ ?! I$ }: U6 [ J#if 0% `/ k7 @- j V' p; }
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
' o" N" p# `/ {% U5 q+ L2 `: @ if (ret)
2 D: p0 n7 j" b. h9 k pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 [! d) P$ d' q( J6 m, b' _! L5 n "%d\n", ret);; w8 q( G7 N: G$ N) l. `! T* D# A! Y+ z5 y
#endif
+ g k3 a9 }% [. } ret = platform_device_register(&da850_evm_tl_leds_device);, A0 C4 s8 `+ r7 x* K
if (ret)3 E/ F1 g0 Z. x1 d( z7 r
pr_warning("Could not register som GPIO expander LEDS");
2 I. e* M" V6 _1 _. ~ else
. b0 y2 Q: U' ~ g Z printk(KERN_INFO "LED register sucessful!\n");
7 a* G+ ^) K' I1 w
' W% p' ~' K; D( J* c return ret;* |0 o& i9 }3 }' ^4 L
}1 v5 i! E6 |8 D- f
2 c: B' a$ L( @$ gstatic void __exit led_platform_exit(void)6 N m; j6 V- o8 t; @
{& m- T# j. W5 c* ~! {* w: x5 @* o
platform_device_unregister(&da850_evm_tl_leds_device);) |- Y. j% c5 E g5 X. \3 ^
) ]7 [2 |8 X$ I) t9 p
printk(KERN_INFO "LED unregister!\n");7 J' B8 ^9 u- S- o4 E
}# j7 t }/ a9 \) l" z7 c
: u: r3 U# _* A# M Y
module_init(led_platform_init);
% ?8 ?# V% j" G& {2 amodule_exit(led_platform_exit);
7 u/ w8 D! @% m( p5 H& t# _+ J$ t0 P. o% j% o1 P1 w
MODULE_DESCRIPTION("Led platform driver");
) N3 F1 L* z3 u( X- IMODULE_AUTHOR("Tronlong");# m9 n& X3 A E) A5 z& @+ ^
MODULE_LICENSE("GPL");
5 T0 J; c& ~$ X# j
, Q. m9 I6 n; R3 |. k |
|