|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( g: \ {" z4 ^# U# u: f+ a#include <linux/init.h>6 a6 x9 `7 d0 B
#include <linux/module.h>
) R' \( q* _$ x7 b! j4 @) s; U% @#include <linux/kernel.h>4 W8 N4 C: @0 B9 B( I" Q
#include <linux/types.h>! l& h, v) i9 B& W5 e
#include <linux/gpio.h>; S$ F7 }3 a% W1 [$ V& O, K \
#include <linux/leds.h>
. H* p! M, o0 }7 x7 _8 ?#include <linux/platform_device.h>% Q+ l' M1 p" W
9 w6 ]5 r/ K8 ]7 v4 ~5 X6 `#include <asm/mach-types.h> ?/ s% l& n/ I' _
#include <asm/mach/arch.h>
; `. M) _% B) R# i' s#include <mach/da8xx.h>
, i: K$ s1 L# o' q#include <mach/mux.h>
. a. D3 g; S2 _" R' i6 }/ E3 t' u- c5 ^+ \
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
. S0 h2 H8 V1 j6 h#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) k8 `3 f+ [7 E#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
0 }% p/ A$ s/ E' \#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ M) R+ u* Q% e% @3 W/ P X V6 t- E
/* assign the tl som board LED-GPIOs*/
% y6 W( |! J6 @1 J* dstatic const short da850_evm_tl_user_led_pins[] = {
9 i( u+ y9 S' A K /* These pins are definition at <mach/mux.h> file */' M8 Z& w$ q5 c- n
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- ^" ^- }! {$ V9 B
-19 k) Q2 e1 Q- x' H
};
$ r3 C( {2 c; z. m* `% A: a
- _' P( u! F8 j0 H- \# P* nstatic struct gpio_led da850_evm_tl_leds[] = {5 W* ]4 C; {9 S
{8 k% F% K- R/ x5 I1 h* q( Q, I
.active_low = 0,( A8 ^0 V9 a4 R( b8 J# C% u
.gpio = DA850_USER_LED0,
& l* U# g4 k% _$ q .name = "user_led0",
8 z! |1 e; [$ A6 V' f) | .default_trigger = "default-on",
0 P/ H7 M' `. K* X; b; A' F# ` },) N6 `" g* g5 Z3 P/ g. S
{
2 W( G; J/ x9 [* i# ] .active_low = 0,. f! s2 J2 F- ^9 A/ j% U$ g
.gpio = DA850_USER_LED1,
' ]- I% y4 q8 T5 f .name = "user_led1",
& z, w9 O0 s E' S7 E$ b .default_trigger = "default-on",3 o; j* f% y" Y, ?7 W7 K( l# E
},
5 h& @! A+ d$ u# q' S {
. g1 \( t- O9 \9 z7 r .active_low = 0,) g% i$ m6 L' C1 O/ F0 e. }4 E4 l* q( ^
.gpio = DA850_USER_LED2,; A% h% l5 @6 G' d ?8 [. \$ P
.name = "user_led2",- ^' Q9 g0 `2 I+ V6 A5 S8 h
.default_trigger = "default-on",; X0 E9 K; W& b% z; ~
},
2 N8 B6 E1 c" c) K1 I% H {
* p2 \/ ^. P: ^: l# K2 \+ R! d .active_low = 0,/ \2 X9 z' b: p* I9 r
.gpio = DA850_USER_LED3,! C5 z; y" a2 i4 P
.name = "user_led3",
& t: \5 y5 J, t5 I5 k .default_trigger = "default-on",( |9 z; y% H# d: R/ z% {/ t
},
i" N& x/ i8 v5 Z) m& K: u) q};; [+ Z% r/ h4 \& m& P9 G
- `, e$ G* G7 [1 S+ o$ bstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 o' d; ^6 u5 r) M6 Q, F
.leds = da850_evm_tl_leds,
3 E( ?( S, K" [6 o9 h .num_leds = ARRAY_SIZE(da850_evm_tl_leds),! p) |$ F6 C, z. m- d3 e- t
};
! i' l* ~: b/ O2 g. h
/ r9 W5 k5 z# m2 wstatic void led_dev_release(struct device *dev)# D, X" c1 E3 W& K ~+ }: [$ B
{, q( J1 @4 b7 ~" {% \$ A
};- ~; O" K# S6 ]0 O& @
9 ]) [% [0 z% P! E, G D
static struct platform_device da850_evm_tl_leds_device = {1 D" N5 K/ o% K) G# t
.name = "leds-gpio",
( \4 u" V" f5 } .id = 1,
* r, S& w% }, o5 W. B .dev = {' j, \$ X) _0 C+ v* n
.platform_data = &da850_evm_tl_leds_pdata,
l; a: z2 c2 \4 N5 W .release = led_dev_release,! f( f0 G9 B8 e6 O! B4 h
}
. P- n/ w& P# }- o& Z8 h};
2 `& V6 p" A8 K! f% _9 L
2 ]8 u E# t7 N, tstatic int __init led_platform_init(void)8 v, L4 j! k+ _
{: Q, E! Y" j& `5 H
int ret;
6 H2 D$ Q( S' {0 f8 F( d#if 0
9 _1 c, }9 z; I( n P. ]" q x( R ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 g8 D) X' |- }6 T9 M
if (ret)
* e& I b2 X+ X& Q5 ` pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: k& h4 ~; R' L, M& w- X' \1 j "%d\n", ret);
2 x: y" s* E* I+ `( n k% K#endif' t% G3 X& m) U5 C
ret = platform_device_register(&da850_evm_tl_leds_device);$ ^1 n4 g7 k- v: N$ a1 b- n
if (ret)
+ P V v& W% _ pr_warning("Could not register som GPIO expander LEDS");
4 {) J. m7 _( A6 y else( u% G" `8 [- U- u
printk(KERN_INFO "LED register sucessful!\n");
& I- T% F3 y: i& }5 G$ ~! C1 P, m1 D' A( {* c' R: f3 _* d# H1 Y
return ret;4 y ^$ H' }* i8 g/ k
}
4 v# [ c6 F5 v$ j$ N- e* `
4 h+ ~7 {/ d, ?3 P+ b" q3 `0 qstatic void __exit led_platform_exit(void)
2 }0 E' B; V# y: A0 E4 A! R{, `5 }5 m. O2 y m
platform_device_unregister(&da850_evm_tl_leds_device);4 X5 i* W, ?- b6 @, D" m
9 Z" F8 M- r' S* H7 } printk(KERN_INFO "LED unregister!\n");
9 k3 r! S5 y; r5 `/ J. |* U* a}
0 ~$ J, K$ ]' z1 K
}% R& {8 S2 n! `) vmodule_init(led_platform_init);$ ]; K& e6 d6 N
module_exit(led_platform_exit);
# B( L- M) d# s/ B5 P5 _. M
: J$ ~- W" |2 G4 D0 mMODULE_DESCRIPTION("Led platform driver");& I4 g. g+ A: u- e y0 M$ v- p6 n- I
MODULE_AUTHOR("Tronlong");
1 b( r2 p1 _2 n# Y# K A. h' W7 aMODULE_LICENSE("GPL");0 ~2 U2 V* f6 U
8 v4 u* q8 T& {9 N: s% e
|
|