|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 t/ c5 A( z5 x
#include <linux/init.h>
% C! B3 ?" ]& L* {#include <linux/module.h>
`0 N: i, [4 M3 r1 B#include <linux/kernel.h>, @& x5 K% k s. t4 u" P, k+ y
#include <linux/types.h>, n: j5 q6 F6 ~1 Q' L
#include <linux/gpio.h>
3 e/ p7 A7 a) f) \' d6 U$ C#include <linux/leds.h> `+ \% K5 s( b. {5 m: F0 ], d! b
#include <linux/platform_device.h>6 ?9 S, a4 E( v$ B9 u2 G* |
- g- I7 B: o: X/ I#include <asm/mach-types.h>' w$ G& d3 X5 B, I% {
#include <asm/mach/arch.h>/ C2 F- g2 t. F& @( l+ A6 P
#include <mach/da8xx.h>" f1 y4 J" B5 B! U& a! | }
#include <mach/mux.h>
$ D+ \( l, {2 c& N" q% |! c; n6 j) P. ]) s0 J( b& @
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
# F: _% Q, B% E5 q! t! ]#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 {6 S* W6 ?1 i' H#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) k; c# h* @0 k" q: ?#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). c! g" r) U- s M4 C2 I, @
# F8 z9 ^3 M& t$ ]+ ~
/* assign the tl som board LED-GPIOs*/: P; J( n a2 E5 b: s# o) N
static const short da850_evm_tl_user_led_pins[] = {
. ?% X$ u% x$ m" ?! i8 W0 c /* These pins are definition at <mach/mux.h> file */
# H$ [5 ^' O- P. k% B/ _, X DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
6 z; f: K/ g& p; }( _2 T5 x6 i" g -1+ P/ H1 n- p2 t2 ]+ I/ Q2 Q
};4 h; z1 a# k. u
1 `$ y, O {$ J& ^. K2 f
static struct gpio_led da850_evm_tl_leds[] = {& K& t/ Z8 S1 ^( H* Z
{
% }! B$ d: b, k. E; B .active_low = 0,( ]/ Q$ ^- }- U. u$ p; w3 G
.gpio = DA850_USER_LED0,: [+ j' P( K, q8 [8 {* {
.name = "user_led0",
+ Z" y7 P" ?" }3 y( ?7 u" x .default_trigger = "default-on",
' R% c% h' p% }9 S },, m6 l0 u$ a* v8 P( F- U" u( C
{
1 t. G* V) P' f$ P .active_low = 0,
; ]6 I- h& q( v4 A0 w, F; o .gpio = DA850_USER_LED1,
7 m* _: \ c$ ? .name = "user_led1",8 n6 A, @8 @" L+ B0 j% y7 g
.default_trigger = "default-on",1 O. ^+ l, Q3 Y$ D2 ]& I. d0 k2 I
},3 k' H" ^6 n4 Y) w* Q
{
. v8 Z; O% h9 o .active_low = 0,
' w1 p8 v) v# q .gpio = DA850_USER_LED2,
% |" Q- i% a4 Q .name = "user_led2",
% k4 J* h3 H+ L .default_trigger = "default-on",; m; v. f8 B0 @" {% L) `# |
},
3 c, T, p% U& s7 f5 L% { {" b- P3 x) N5 n/ u6 u8 ]
.active_low = 0,
5 v, Y' g1 y0 P+ ]4 X .gpio = DA850_USER_LED3,
8 n* x# o0 `' z& t# o .name = "user_led3",. x) X; k9 X- t, U" `7 B
.default_trigger = "default-on",
: n8 @0 g" B$ I0 c6 j* U5 Z) ~* ~0 Z5 Q },
1 d2 t2 a$ s8 x( i. j. R};, }$ ?* C. i* g4 }: _3 M# p8 g
9 Z2 v- G' y8 kstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" E- P/ ^* z; t7 i1 i' n: S: c .leds = da850_evm_tl_leds,
* D8 }- i8 B6 D3 j* c" ^ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# D: e. m/ v, y, r4 d# i3 d+ L};
1 g x% T8 i; R0 Q; L5 N A7 O* c) R9 A' G ]2 P5 m- e
static void led_dev_release(struct device *dev)
# ~9 \; m$ f% x4 i; p& `{4 s% L' a# j1 T4 {
};( \# t9 }( ^; i4 k
9 W# ?+ z' s3 ^: @$ h- Kstatic struct platform_device da850_evm_tl_leds_device = {
B7 t6 Z( v; D6 N" d; w .name = "leds-gpio",* Y! Z& I& J8 d5 ^# h% h
.id = 1,7 i8 P: r% Q; j& k
.dev = {
: E% v) H# T1 t2 |) h3 B .platform_data = &da850_evm_tl_leds_pdata, `+ l3 V# R) A q: ?+ b# [; N* I
.release = led_dev_release,# n6 T9 Z1 J# g; Z
}- t* k+ `) \+ J1 U1 }
};& k/ K* y n# C6 I) A3 z. W
V3 x% e l3 @9 g/ |" F5 x6 Ystatic int __init led_platform_init(void)& }2 Y- Z: q& Y. @# T" B
{: z7 V/ Q' V& K
int ret;
8 R# m( @" ]5 a. I3 V#if 0. A+ W9 G8 l, g, r
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
h! H; u; q- L9 R% ?# O. M/ | if (ret)- P3 G$ |% u r1 ~$ O
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' p8 M% E$ m; G. A. ^- s0 n } "%d\n", ret);: i/ ?3 J! D0 R& ~3 _
#endif
3 O/ ?) ?& ~) P% g9 u ret = platform_device_register(&da850_evm_tl_leds_device);
6 P: l. C& g. |& n8 u if (ret)( ^( C n' r9 ~8 s( J: D7 A
pr_warning("Could not register som GPIO expander LEDS");) M! v- I9 D, \
else) g3 r- @- G3 k3 o* I
printk(KERN_INFO "LED register sucessful!\n"); U8 o0 z* R$ D; a/ N' E( r
8 s* H( ^* ]8 C/ Z: C
return ret;
3 I4 ]* N0 E4 Q4 {' ]5 f}
! g8 x% X1 }' g0 g1 x" u* F8 ~" I
static void __exit led_platform_exit(void)( U5 `2 O+ ]3 W4 v4 }
{
E* D7 ^" w4 [ G& [. d platform_device_unregister(&da850_evm_tl_leds_device);
; V( |" D# ~. q; U8 }: Q; k R! G+ }& I7 Z( d* o; L' m
printk(KERN_INFO "LED unregister!\n");
. y% T7 H9 Q0 D& Z}
! p# g. Y# h# c# B# j: M& I# k6 h* a3 R- l, {2 d1 I" Z9 V
module_init(led_platform_init);
2 X8 P4 O7 B( i4 y% ^0 a4 ^module_exit(led_platform_exit);5 r8 B" G# F% s/ \, x9 @$ \
0 P' A2 H. I+ XMODULE_DESCRIPTION("Led platform driver");* c# N2 L. _% F) K
MODULE_AUTHOR("Tronlong");' H" T q4 T- _: M6 M9 C. l
MODULE_LICENSE("GPL");
2 j' z* z7 A3 \: |) [% y- `
# T" W- [+ o4 M |
|