|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 x3 k) t: F- q, ]+ h1 n
#include <linux/init.h>
2 h9 E, Q# ~" p4 m/ {#include <linux/module.h>; ?2 u7 Q6 t/ G% J2 ~
#include <linux/kernel.h>
& J, D, ^( K e/ w7 H#include <linux/types.h>, T2 S4 d) M$ |# f1 m
#include <linux/gpio.h>
( G8 W+ o/ O. }; {6 I5 i9 r" L#include <linux/leds.h>
4 a, F5 p# y8 O% ?#include <linux/platform_device.h>2 I+ x: s& y) A1 U* M9 c
* o: b4 b- R. V7 G#include <asm/mach-types.h>
# Y {9 v. v( w4 [ L0 U, z, H/ ?#include <asm/mach/arch.h>
3 O& `+ G1 M* g! g+ }#include <mach/da8xx.h>
]5 D- Z, m$ [4 C4 i#include <mach/mux.h>3 T) G/ _8 K( n, B% z
' |2 A7 ]# a+ X" X; E {+ A
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 T& `) I+ V7 ?1 f#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 N i; C3 K) K+ f7 ? G
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; y: s5 U4 E9 M: p#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% m0 M; o; j% l% Q/ g! Z+ @
5 A! _2 T0 c k+ Q) V1 E( _/* assign the tl som board LED-GPIOs*/
( F* b3 S7 G( Q; H% `0 P, Bstatic const short da850_evm_tl_user_led_pins[] = {3 G& U# n$ ?& ~( l
/* These pins are definition at <mach/mux.h> file */5 s7 u9 d. I& ]
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: x7 H! d% z! x
-1! M; O C. a4 |! d* D L
};
+ M' {# G: I' L% C/ C9 t8 k+ z
- a! K1 d6 E" H Ystatic struct gpio_led da850_evm_tl_leds[] = {
, G0 Y9 y6 Z/ v; O+ P9 W {3 m. g1 A; G' L
.active_low = 0,4 T( i9 O" F: m* b
.gpio = DA850_USER_LED0,7 |9 x5 Q) m0 d2 v4 q5 O- ~
.name = "user_led0",
5 j- ]% k" E# u4 N. x2 D" G/ K .default_trigger = "default-on",
O8 |% R! V( O; N% J5 ^9 v ^ },
3 \$ a. z5 e, m& |7 A% m7 W2 w, a {! O: f9 f1 A+ z! g2 \
.active_low = 0,2 B: M2 ~, H0 L
.gpio = DA850_USER_LED1,8 m% q3 e: E: L
.name = "user_led1",
7 E: v& V# w, S! u! k .default_trigger = "default-on",
$ F1 Q/ ?( r# R+ f },
, J2 N7 F1 F' z' t. b {' z/ }1 g2 N! N* ?* W0 k$ P. y/ ^
.active_low = 0,
2 H& d+ ~+ K" R# G e6 B .gpio = DA850_USER_LED2,
+ ] r5 i7 O% Z5 g4 i1 y .name = "user_led2",
4 P1 v% L+ {; K/ G' e$ H .default_trigger = "default-on",
6 o7 l! G$ e' A7 l },
/ f( U: d) P2 r8 ?8 ^ {
# k% V& R# ?- R2 _" { .active_low = 0,
]! f2 g8 Z8 i% |( c6 q .gpio = DA850_USER_LED3,# M# Z& d5 B$ H6 T
.name = "user_led3",- `5 Q9 N7 x" ^/ S
.default_trigger = "default-on",5 b1 d0 ~$ k1 P: F
},
) n) Y1 y) I) z};
9 R9 {, o0 _+ L: E6 f$ F
/ f, A9 b3 d- B( v# Q, w$ e- X: bstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- D2 l/ ^1 k8 t9 u3 R& a .leds = da850_evm_tl_leds,& u" b5 b' |6 S6 \$ x; F
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 F2 b2 M# T' e) `) R! q h, u};! j4 ?8 ?% w6 r/ |) }/ j1 ~) r. d h
( x# w% x- L x! x; @8 gstatic void led_dev_release(struct device *dev)! S. ?! q4 @$ C6 X1 a
{8 M. G" H3 h# u* @, J
};, c: X( C+ I1 ?
6 M( Z( Z1 X* n; ]* }' K8 k7 S; O
static struct platform_device da850_evm_tl_leds_device = {
/ M& r4 c7 B4 a/ F) E .name = "leds-gpio",! ?4 T8 {$ @2 h! _. T
.id = 1,8 |2 o! T" D7 s# ?4 I b* j
.dev = {7 z5 ^$ `) M6 s' p* A2 N5 z8 ^
.platform_data = &da850_evm_tl_leds_pdata,/ M1 |$ x+ {* m
.release = led_dev_release,
4 u3 v+ y, S1 y* c p+ r) P }
; I& R, R* |( p3 R6 t};
- z6 g- A0 Z( u5 B9 U
( Z1 L% }6 h7 s( \& Y9 Estatic int __init led_platform_init(void)
/ @1 ]1 R! z# U0 I{
. `- G {7 |( B2 G, L5 q int ret;
0 p2 {1 @8 y6 c( v# e2 T#if 0
( e( C* i: a* [! Z8 a* o ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ w9 y% j/ i# d
if (ret)
: T( ?# l @* d% N pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ x& x; Z, t: U/ o# a1 I. j& D5 ` "%d\n", ret);
( {9 L% D; U' v0 }6 V#endif: C% Y9 R' E9 y: n( ]5 X
ret = platform_device_register(&da850_evm_tl_leds_device);! b( I/ ]2 W% I5 }& \6 n% s
if (ret)
5 {% }" n4 |: j pr_warning("Could not register som GPIO expander LEDS");
; @4 M7 J" [3 }2 `+ J else0 z/ b6 Q; ~. j/ m
printk(KERN_INFO "LED register sucessful!\n");
4 l* m6 o: f6 \5 D) z; @% q" o0 q) o, S, d* e' [) J* ?+ m
return ret;
( ^$ W$ G& R) x1 x3 b) Q$ [' E}3 T4 R; ^( s! x% u
, k' |) e; d& d, `static void __exit led_platform_exit(void)
3 t. C) K# C% y3 r{6 d B) t+ p3 t
platform_device_unregister(&da850_evm_tl_leds_device);
) c3 \/ m" b8 B
$ Z. ~- u9 R. s printk(KERN_INFO "LED unregister!\n");
: c2 ^- Y# r$ b/ A}
. V! S# Z p4 m. w6 \6 e
# [) c2 ?$ g c a5 gmodule_init(led_platform_init);
* D9 W4 R X* t6 K4 Qmodule_exit(led_platform_exit);4 @3 p! h7 E9 z) I7 r+ L+ \7 r7 [
* W; X1 T g' B! t9 ?1 X% g# ?3 mMODULE_DESCRIPTION("Led platform driver");
2 p) g; s1 A7 Z+ P( P8 c: _MODULE_AUTHOR("Tronlong");% g. P' w2 h: }- v' e8 r2 |( W
MODULE_LICENSE("GPL");
0 F; e4 z5 Q$ Q4 _5 |# T0 b% u% Z# h
|
|