|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. i. a8 U: n5 \0 E$ P' @% ^: o
#include <linux/init.h>
^7 y% f5 p# y3 N# y#include <linux/module.h>
# [- v* C: _ o$ ]. }1 e8 {#include <linux/kernel.h>5 q U6 v! S4 W' v
#include <linux/types.h>& T7 U2 c% Q- u7 F' X1 A2 y
#include <linux/gpio.h>3 }8 I8 i: h* H! ?( h
#include <linux/leds.h>
& }$ F9 p+ ~. P. E5 R3 d$ z w#include <linux/platform_device.h>, p( e3 P* W0 J5 G# J
, @0 |6 L& Q- P) m' ^3 Y# T#include <asm/mach-types.h>' i$ Q- v2 q( K1 _3 H( _6 O% R1 N
#include <asm/mach/arch.h>
" b, @ G7 F& w) o#include <mach/da8xx.h>
; p, B6 w9 x" r. x#include <mach/mux.h>
F9 i! G2 X3 v% Z$ E, V+ T2 E9 W; [* P- x+ V- ]; z5 k
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: J% X7 ]" ?+ F) C5 v#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
G6 P" R0 I3 R4 w# P7 T5 C% i#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* c0 L7 x( M6 v3 A
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 J% o, A5 s2 B4 r: }0 X! Z- C- X) d% b& O
/* assign the tl som board LED-GPIOs*/& ^$ A" ^% h* c
static const short da850_evm_tl_user_led_pins[] = {
9 b* B9 H; v) k! G /* These pins are definition at <mach/mux.h> file */3 e: S" c- a9 X7 f* d% A$ v3 s6 c
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) O3 h/ ]* N0 Y e! N
-15 Z8 o% a& z3 r* g! P
};
* P6 p! c- V* h6 k
- m) W: ], H5 l' E2 j* J6 s+ Bstatic struct gpio_led da850_evm_tl_leds[] = {* y8 ]8 U7 f$ G
{% G5 |7 [3 S" K7 p: E/ A
.active_low = 0,9 r8 X8 O, `, ?. M) X4 X0 n% g; O
.gpio = DA850_USER_LED0,
7 i4 X( s% |$ ^& p, G .name = "user_led0",
/ Z$ P# a! W; ~5 U! [" [ .default_trigger = "default-on",5 L8 Q! c' \9 Q5 w$ \' }# h7 j
},
H7 }7 E# }& s4 r. \: ?2 d {" Z! p, v1 P4 m7 @2 J
.active_low = 0,5 A# m7 u; }5 |- l
.gpio = DA850_USER_LED1,( v6 I4 f2 [4 x/ T, c1 W' U
.name = "user_led1",' k- f0 N4 [- m& f6 u) d1 ~' H) `
.default_trigger = "default-on",0 v/ q5 ~) y6 K& T! x' C! ~
},' h% r" P' w( Z1 B( i- k
{
$ z0 i+ D' {9 ?1 G* J .active_low = 0,
& k k- |8 Y5 H* C1 t .gpio = DA850_USER_LED2,# B7 ]" ?5 R8 h9 s9 f8 I* v
.name = "user_led2",
8 D( j& V( V Z- m4 q9 H! { .default_trigger = "default-on",1 r6 Z* N( [6 h) k, n; r9 @: h
},
, Y2 x! C- [2 l( O3 f) n/ S) v {
) _4 q- k5 x, J .active_low = 0,3 u2 r( x/ J, E8 G3 W, l) p3 U
.gpio = DA850_USER_LED3,7 }0 o( A7 ~' G& Q
.name = "user_led3",
* q) Y# y$ F' S- D- {0 c( ~ .default_trigger = "default-on",& R. k% R3 ^; y( ]
},4 M& c; i' n* r
}; Y& C, u" K- k* v4 Q# p
& _" J/ Y/ ]0 Istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% O9 b# W3 q7 }# I ~5 I0 @: W
.leds = da850_evm_tl_leds,
$ f3 Z, F2 D+ G .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& l( M/ y+ _# L& }) a3 r: c: G$ x};- F- y3 r, v" `) T
4 k* A% C; a9 V, s# x* Ustatic void led_dev_release(struct device *dev)9 o6 C g. T3 O3 u$ k: e4 A1 e5 B1 t
{6 f. ~5 d4 r2 ]
};
6 q5 ?6 n( x) i" _- _
9 O" z+ R' Q: v& lstatic struct platform_device da850_evm_tl_leds_device = {
* N3 W' I6 g" i1 N. G8 h, o .name = "leds-gpio",# p1 ` y( ^7 ^/ F9 `- J& z4 D* s
.id = 1,
/ z2 v3 o8 I' X. I1 A5 {+ B9 A+ H f .dev = {- C. e w/ M( T
.platform_data = &da850_evm_tl_leds_pdata,+ D U& N1 J8 _0 }( |
.release = led_dev_release,
* {1 s; L1 n7 h a. d: E7 D }1 ~& T' D1 ~" N7 k7 b
};$ H0 x; E9 h/ p/ u% r: q- `/ {3 ~
- i, h0 {' C& V. N/ X% F
static int __init led_platform_init(void)
v& s9 W6 H. m' V, t$ v{& l( v! t+ @6 T" X
int ret;
$ k' t J/ L( s3 Z#if 03 [' j8 v1 T5 u# t% Z# F0 K) @
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 \+ U! O% r, w, a" X
if (ret)/ z: O' K' I/ z" k' u8 ^
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 f) U6 G- ?3 a8 C1 J; Y
"%d\n", ret);, v5 A2 _- N; a: g% v
#endif
0 y, f9 a/ Q' z( J$ W" {$ D6 I5 K ret = platform_device_register(&da850_evm_tl_leds_device);
4 q& j# M8 `+ j/ ~* P5 Z; s if (ret)" y/ M* a7 h( h9 H: _
pr_warning("Could not register som GPIO expander LEDS");6 P5 A& q) H& E/ P" n' B# e( D) Q6 ^! R
else8 D9 K- [% T3 ?
printk(KERN_INFO "LED register sucessful!\n");2 V. P* `2 H; {4 v% x' U# G
6 M& [9 A% g& S9 a4 d
return ret;! ` l$ H# [. g3 }& G
}# k* k- F4 a' m: d
* W+ v/ x" k/ |3 e6 c2 t8 R1 wstatic void __exit led_platform_exit(void)# @; h" k( H' }6 _2 C
{% [$ n# r y( o1 D; O
platform_device_unregister(&da850_evm_tl_leds_device);! j L) V' h {# ?3 P, L
& V# B- {7 k" s6 X. a
printk(KERN_INFO "LED unregister!\n");+ D! d& v1 f1 i6 W5 u% ]& G
}; @5 M/ z2 s* o* u% ~% V4 b
; l3 R) u! r) _* i% B
module_init(led_platform_init);3 b% ]" v- ]3 e5 _' V; \) ?+ c& t
module_exit(led_platform_exit);. L) D v5 L7 D9 t+ e3 Q
& \' I: | |& O4 r6 K; QMODULE_DESCRIPTION("Led platform driver");$ t/ T3 k: i' Z9 Y/ @7 n1 n
MODULE_AUTHOR("Tronlong");$ w, ~* D: K$ p0 R% S
MODULE_LICENSE("GPL");, g0 x* A+ [# ]9 N" |5 h8 J; G- I
% |* Q' C8 Y: t7 \) U; r6 C' {& O
|
|