|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ n3 K) D7 \& ]# L1 u) K#include <linux/init.h>" w# k# ~$ l5 a! B& Q' D1 ~" n& A
#include <linux/module.h>/ O' R( ]% {5 F
#include <linux/kernel.h>
, M: K0 S1 F0 O" Y#include <linux/types.h>
6 O3 [& o# S) P7 M6 {0 Q0 ~#include <linux/gpio.h>+ Q9 m4 x; h! ?) I
#include <linux/leds.h>
3 V, b) _3 J: U) _: I' j#include <linux/platform_device.h>
; V" i$ e2 S" k1 s6 L: M4 u. B: J G% k
#include <asm/mach-types.h>- z0 G" _* M6 k: X" F3 _
#include <asm/mach/arch.h>
/ P5 v* A6 i0 L7 a9 Y#include <mach/da8xx.h>/ G( \. r. `0 w- d/ t6 ^( Y
#include <mach/mux.h>( w, h* g0 J/ t7 v+ q
7 E9 i) J4 |! s$ ]9 S#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)# l7 m8 N$ V/ p4 U3 r4 ?
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 x9 L. p) n8 }4 W d, i& C# h$ c
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" _, D7 K2 d* I7 @
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 t" p9 B7 V2 c& M7 Y; r
Y7 E$ x2 Y' U# X' ~% T: O! \
/* assign the tl som board LED-GPIOs*/2 Y2 s0 Y# {4 |, Z& Z
static const short da850_evm_tl_user_led_pins[] = {' _: `8 `5 l1 x# E& f4 J$ Z
/* These pins are definition at <mach/mux.h> file */4 v" D% v' C1 j u9 {& X6 ^: K4 }
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# \% [$ Q) K- i( U- c, q6 N2 Y+ R -1
4 k* K6 V' _6 u8 H" b g# z9 @};
0 G: C& g; L3 r; b Z8 Q2 F) ^2 F
+ \1 h; C3 T r* m b% Fstatic struct gpio_led da850_evm_tl_leds[] = {( E, r2 P& b$ P- h6 Z8 x5 n/ V
{
5 D6 [% }0 Q; x& V .active_low = 0,
, A8 v0 X8 ]/ w( b .gpio = DA850_USER_LED0,
4 t5 V) n3 E: K1 U .name = "user_led0",5 x" T" a; C2 E4 v$ B6 t: O5 p
.default_trigger = "default-on",
( r7 A4 u9 s1 j" s" i5 s; l }," c8 f0 F$ R+ G# c
{" l% P# q! n6 b; [* p6 D
.active_low = 0,
9 Y! o& y) @5 u: z; q H .gpio = DA850_USER_LED1,, w. S9 u; N& `' H6 F$ Y% q
.name = "user_led1",
, K, o) T; Y8 u/ } .default_trigger = "default-on",
' z- e0 s2 m& V z4 B, U% _3 n },) F2 V9 r: p; R2 r
{: ^; A ~$ s" ?8 Z' c2 M4 Z0 ^
.active_low = 0,
0 e* f( d8 H$ @( L/ ]+ Y* N .gpio = DA850_USER_LED2,
) _$ V" w6 A/ T .name = "user_led2",
4 I/ d9 G0 Z& r5 s& r .default_trigger = "default-on",3 l5 y6 U3 z. f$ s M8 ?
},
o: i8 v5 y; i3 L- y# Z( c+ C {% A6 W- O2 c9 V9 H
.active_low = 0,; D* Q5 `3 t2 e
.gpio = DA850_USER_LED3,3 D" R9 Y G% \9 {2 L+ X
.name = "user_led3",
1 s* b# C X8 A" t! I9 z .default_trigger = "default-on",* k1 V# j" l- n- U4 [+ m
},
P: T" j3 |1 ?};
2 A. J9 g9 ^1 }% O& Q b
$ d" B3 r/ m9 L0 k6 c. _static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, q& w, f5 k* G1 b( T! r. ?2 n .leds = da850_evm_tl_leds,
6 r- e6 a0 A1 J1 _ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 Q( S. Z3 h+ y: j) H' a! r};
( W; g6 V$ U3 G( Z0 t
, d/ f3 ~$ s. |# v: V+ v1 [static void led_dev_release(struct device *dev)( ]1 `* p" W1 d) K+ C! Y) T5 @1 u
{
2 g' d# H% O6 }" K4 `; `# s) x$ ?2 V};) C3 K, D. g5 u0 K& G* c1 D; j
# W. L; M: e/ O M
static struct platform_device da850_evm_tl_leds_device = {
" ~: T5 `& f+ V+ ]6 L .name = "leds-gpio",) _* D8 l3 I* s/ V
.id = 1,
1 O2 s2 i+ g) `# I1 p .dev = {
, o5 H3 N& J) S! d' G5 t/ a .platform_data = &da850_evm_tl_leds_pdata,# J. x! m4 p9 u$ w5 t+ L0 a# M
.release = led_dev_release,9 J8 o# X& j1 p7 A9 n/ ?# u
}& j7 J h- @! ]3 x1 ?5 x# H% t
};/ ]. y! N8 c$ ^
7 `% J6 m9 [: @static int __init led_platform_init(void)
; G, S; r3 m, ]9 c! y{
i& M% R% w5 [4 M# I int ret;
$ N; S8 \/ d4 L- c3 H#if 0
, p& @/ \2 {6 X9 O) M7 m ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* ~8 z1 `% F* g5 o# {* ^
if (ret)( ?' P) A# H, o* Q9 C
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 H. G( q: Z+ {/ X+ E6 ?
"%d\n", ret);
7 ~7 p( d H! q, |) C7 k. G$ m#endif
5 D6 b; n. m0 T ret = platform_device_register(&da850_evm_tl_leds_device);
3 M8 z6 u% ]/ h7 N& z- l4 W if (ret)2 K) P% }4 d1 K5 R% z5 W) D
pr_warning("Could not register som GPIO expander LEDS");5 q* f# J4 C! o1 o. \' D! I
else" E1 m9 C$ M7 i T* ^6 G
printk(KERN_INFO "LED register sucessful!\n");
4 R' J, J/ o1 ?+ y9 L
( Y2 |2 s) V' q2 C, X return ret;$ j5 g- H. v9 u8 C* m3 _- ~; I
}
% }5 ^! H) [' j3 i0 F4 j+ x' b$ z6 w2 t+ `7 P) A, I( t
static void __exit led_platform_exit(void)
+ ?5 a" B/ C& t Q/ @{
& f5 ]' q% h( u' i8 h6 h" `' N platform_device_unregister(&da850_evm_tl_leds_device);
% y( j3 k0 `/ [: u7 E$ W$ f* e. m
printk(KERN_INFO "LED unregister!\n");
# o# A t% e0 n+ O& q}. r$ ~* ^. h2 |# v, N* n* S- F
1 C! {2 c9 @; V3 R4 {$ Z+ ?module_init(led_platform_init);
/ n, D; g7 I$ r! V6 S7 lmodule_exit(led_platform_exit);, Z0 O* W- A8 p2 B5 [4 @
1 C ]$ Q, c: D1 g
MODULE_DESCRIPTION("Led platform driver");* K# j4 N9 f& g6 E& D! M3 ^$ c
MODULE_AUTHOR("Tronlong");
( ^' L3 G. m: E/ h' f9 H9 B2 _MODULE_LICENSE("GPL");
* C! t" H2 E, F2 {; b5 ]8 U# H" w7 t
|
|