|
|
求大神给下面的程序做注解,请稍详细些,谢谢。7 ]* ^8 P$ j4 n
#include <linux/init.h>4 O0 `$ R" p! I+ @" O
#include <linux/module.h>) a h' ~' W! g; C0 G/ n' r
#include <linux/kernel.h>$ B7 m H) M& \; g
#include <linux/types.h>
2 y9 T1 c+ D3 F, [- q0 [#include <linux/gpio.h>
( D4 T: R) p+ g1 Y#include <linux/leds.h>" X2 r+ T: P) l3 B5 L0 j
#include <linux/platform_device.h>% k2 U! l% U4 O2 c B2 j$ t& ]$ ~/ M
8 T6 H; d& Q8 W#include <asm/mach-types.h>$ n! U! K0 |7 \$ }6 q3 ~" y% E
#include <asm/mach/arch.h>
; X+ x: j6 |. g$ T1 g#include <mach/da8xx.h>+ x+ C6 L# W$ J/ d
#include <mach/mux.h>* G2 F b4 r1 E! F& }* ?
/ {/ {% k; F& {. \8 M#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 R2 n. z! V. ]) P#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! F& f2 i# J0 J#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 D# o8 N; s( G) _#define DA850_USER_LED3 GPIO_TO_PIN(0, 2), _0 }" r: x2 h x
% p+ n, ?, E( n0 s$ o
/* assign the tl som board LED-GPIOs*/9 L3 U& A j# x% s8 A
static const short da850_evm_tl_user_led_pins[] = {6 e! i0 P) R5 T# P2 N/ ~3 X6 {) O
/* These pins are definition at <mach/mux.h> file */
* h7 q" Q% L& j6 u DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% K6 R p% \; Q" @' p% K
-1, J$ B* ^2 k2 [( M S
};
9 R; ?4 B) a0 i" m, m
: g( z' P* Z! h: tstatic struct gpio_led da850_evm_tl_leds[] = {4 Q3 p' E" H' T& Q* F
{
0 D5 E1 f! O" \# J .active_low = 0,
/ {9 k: I) J; ^1 l3 V3 }3 g .gpio = DA850_USER_LED0,
3 a( N4 y- V, }7 a" b9 I .name = "user_led0",
) M& e5 E0 }3 t4 ?. f3 Z% w0 S .default_trigger = "default-on",
9 b& @7 W; ]( f' V/ M) _ },
0 e9 W0 R2 A6 u2 } {
- c; O, M: B/ ]1 T1 B% q0 d+ W) L .active_low = 0,- X l( c8 `* R% [% B$ ~
.gpio = DA850_USER_LED1,
5 U$ N! a C# j- m9 t2 f, d0 V4 l .name = "user_led1",: _. O" c7 J6 {2 d& j
.default_trigger = "default-on",
/ p$ X' c2 B! S },
" k7 J3 S X N4 J3 O( \& i {
( `, Q& Q9 Y! I% M, s, d .active_low = 0,4 b* r0 D" C0 J Z# [) H
.gpio = DA850_USER_LED2,4 k7 W0 o7 ~$ y2 s* _/ ?; t
.name = "user_led2",( B' g% i s& H
.default_trigger = "default-on",0 I* E& u. H$ R u8 F6 C
},
7 s4 @. j% f8 t# X' a8 f {. l' F5 C: B3 K/ f6 g( U V; {
.active_low = 0,
- l, Z& G3 c* L! x+ S .gpio = DA850_USER_LED3,
5 e! W r. B$ P% u/ N5 s .name = "user_led3",
, H9 t0 l9 @; K .default_trigger = "default-on",
7 [9 H' H$ ^2 I ?1 g7 i },
* z! B n$ O8 T}; i" j7 q8 S7 K9 c
6 q2 i# l! ^4 W2 ^' x% [% Fstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {1 o4 E0 d1 L" g
.leds = da850_evm_tl_leds,
/ i/ z( {0 c! w, w, ] .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& ], h; U, T8 ` C};( G7 F( }1 ?0 W8 v
& _9 @, [) M. q3 G. y4 m7 ystatic void led_dev_release(struct device *dev)# m1 w' M# e! P& l- T5 W1 Q: D
{1 f" a7 A2 J9 L8 I$ u4 a' z
}; @, e8 Z3 l' [7 H
' d7 g/ E/ [: \3 \" b% ?static struct platform_device da850_evm_tl_leds_device = {
) q) r' z& o% B( U- Y9 O0 q; ~ .name = "leds-gpio",1 s/ l6 P4 K/ O- N0 ?
.id = 1,
! U5 L2 P F) q5 W e* A+ j e .dev = {1 J7 S1 j# Z1 Q2 C4 v( ]6 Q
.platform_data = &da850_evm_tl_leds_pdata,* I4 s$ |1 O2 n, N
.release = led_dev_release,1 b9 ]! v+ t- I$ k0 \6 D- H
}# Q0 `# a# G% w! M$ `( R, Z
};
1 Y1 } @. @) ]) ] u: p7 I/ v, b7 m6 {6 _* z4 D
static int __init led_platform_init(void). i; d" o; n. a, A
{
( `) y1 T+ _3 \! \: e! {4 G: V+ v int ret;
* X1 c" ]3 L0 m& o1 m+ r& q#if 0& Q4 `2 U; h- t' F& m
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* i+ }! n' N7 W% a7 `3 \/ {
if (ret)
8 e, r: ?' z+ V a& y8 ~( l% ] pr_warning("da850_evm_tl_leds_init : User LED mux failed :". w! ~$ _# D2 `- D
"%d\n", ret);
' B/ g+ B% g( k; B#endif- G6 E' @* i' {' Z* r
ret = platform_device_register(&da850_evm_tl_leds_device);. i3 b5 h6 W2 B2 n1 H$ a
if (ret)
: k$ k7 a! R0 {+ t pr_warning("Could not register som GPIO expander LEDS");& q! L, i! n1 `, ?9 j( q
else+ v9 E; M2 H. H0 w1 S6 j. U
printk(KERN_INFO "LED register sucessful!\n");
6 @$ S; g$ p* G9 a) x6 j
- T) {7 X% j- k) w return ret;9 M1 H/ ? t3 L/ T# W' I" [
}
( w: n/ c7 ]; }( f; Y% f) X$ L4 ]/ N2 v' s, |- W6 G
static void __exit led_platform_exit(void)
5 d3 U8 c3 ~& [& Y1 U5 Y{. i7 |6 u3 N, k+ G
platform_device_unregister(&da850_evm_tl_leds_device);1 i% ?: w `0 s
* F2 `; r% o4 B6 ^ printk(KERN_INFO "LED unregister!\n");) K3 w" J( E' t: j5 ?$ _
}
- w2 m. o: b ]0 g G8 Z
. T& p- r7 `& ?* o3 Z& U1 l9 Z, P! zmodule_init(led_platform_init);
# ^$ y. c1 N L) f% Wmodule_exit(led_platform_exit);
: q' ? |! m8 [( R2 T; Z. Q2 p7 r0 G
+ K$ s3 A/ C A2 d) z4 M9 v" iMODULE_DESCRIPTION("Led platform driver");
: m; |7 W$ |5 l+ v# T$ Z5 rMODULE_AUTHOR("Tronlong");, n/ G4 e* y+ N3 d- U' y
MODULE_LICENSE("GPL");
, `8 b3 r& a- O! w
+ ^1 q+ v4 w# A! r |
|