|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- z3 g1 P; a* f. z" R- @#include <linux/init.h>! }/ a F4 w$ A1 n/ Z
#include <linux/module.h>! u3 @. |/ z4 Z# e- j; A* l
#include <linux/kernel.h>
6 n6 w' y4 b9 a( K#include <linux/types.h>8 g' x( O! i; a0 |
#include <linux/gpio.h>. f4 P' R1 N) K4 A
#include <linux/leds.h>
( I; j4 A1 Y1 g5 d5 v6 \#include <linux/platform_device.h>
+ e# R, b [' D" e# b( t# @- d! z7 R% ~" T
#include <asm/mach-types.h>
B8 D2 t9 K3 Y: M( W; \. v#include <asm/mach/arch.h>
" m. q* W2 P0 Q8 n#include <mach/da8xx.h>- x( Y7 F. t. d! @$ |
#include <mach/mux.h>
0 N& i+ H' @$ Z7 f, k6 f- f3 L
- l# W2 s [% n& B9 c; e$ e#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" ] R' ^7 G; J6 ^& D
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 t. C+ g4 j* q+ V5 p* ]9 @
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
1 j" h! }$ A' w6 M& a6 C#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* w6 T& c7 a! H
) m6 T! }; X( m D# r/* assign the tl som board LED-GPIOs*/, b% Z4 h# ]; x% M, T; Q
static const short da850_evm_tl_user_led_pins[] = {
. ~ _) R# Y6 d /* These pins are definition at <mach/mux.h> file */
$ W1 ~$ W! ^8 U$ @, v/ |# `/ J DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* c( f4 W }, d% m' I
-1) W! C4 u$ P9 t+ D/ Z3 B
};+ N+ x* v8 c; c$ c# u0 W
9 d4 `3 B" R P; D1 B) ^ Estatic struct gpio_led da850_evm_tl_leds[] = {
! v4 h4 }3 M- |! Z) q! _# ^4 w4 N {
5 t, ~+ M# ]5 z9 ^ .active_low = 0,
" f3 {8 I2 n. v0 F | .gpio = DA850_USER_LED0,! s$ g2 K X& f4 q# ^
.name = "user_led0", [6 l) d1 `; t! ^) ^; L
.default_trigger = "default-on",) L, \! ~- _& V9 }5 G4 p( t
},0 M, q; M- n% i o8 Y5 l
{9 Y* a5 F9 H( c! U3 l
.active_low = 0,1 N6 {: h: J `5 @6 n5 ^$ g
.gpio = DA850_USER_LED1,
+ J. c/ t! k* L# Q( O .name = "user_led1",( {7 o/ j! E: E$ D
.default_trigger = "default-on",9 }- y- N) s6 h* h! N+ y# X0 s
},
+ i$ d$ k) A" t! F2 S1 C X {
# Z+ O) s4 L- K/ `! m .active_low = 0,
- K; x& \6 ^" n, @ .gpio = DA850_USER_LED2,
' R8 y/ g( f. o5 ?0 G- C .name = "user_led2",- n1 v2 i; [* y3 u+ m9 s0 }* Q
.default_trigger = "default-on",* [! S( \7 H" c4 ?0 l2 @: b" r8 o
},
+ p- } i% p" a2 I {9 A# k" c* s( z# B" b- c9 t$ J
.active_low = 0,; L3 Q4 a1 f! c H& A
.gpio = DA850_USER_LED3,
8 p0 L: _* y4 S1 [2 i4 o, `) }' q .name = "user_led3",
i. ^* H5 \* ^ .default_trigger = "default-on",
: Y; x; }# a1 P% Q3 R },7 F, n e; E9 @8 H! l8 q3 p
};
. }* @4 {$ f+ U: A" K
9 [7 B _5 j* N. ~' j, zstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {5 u, y N* y- C4 S$ O; H5 m
.leds = da850_evm_tl_leds,
) d) `, H3 I; {! w1 w& ^ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 P- \; N E* P6 J+ U) x) t2 ?
};" t- K! {/ V8 F
. `" [: d+ W0 u; R( j! e- P- S
static void led_dev_release(struct device *dev)
' T" K# |0 A2 i) S0 V/ w{
6 ~+ D& Z+ z+ I2 M5 X1 Y; ~, R}; Q# Q- j; m2 y# d( o' z* v
! K1 R% W/ h Astatic struct platform_device da850_evm_tl_leds_device = {
9 W. Z( B: O# N8 J .name = "leds-gpio",2 w* [+ z! W. L! Q' h! i
.id = 1,
0 W: P* I9 o" w8 ?# M .dev = {" X7 s% C) J w6 B. N3 x- i
.platform_data = &da850_evm_tl_leds_pdata,( V( K& w" f- M. Y$ c
.release = led_dev_release,# W2 b9 x& m* g) O/ j
}1 X/ Z: F1 ]8 K7 |7 B
};2 Q/ n* J+ U& Q6 [. s( e! ]' o
6 Q. l3 {- u" `5 ?' @$ gstatic int __init led_platform_init(void)
" }3 f$ S6 p6 O3 x- q{1 O+ Z3 r) i* e: ?
int ret;' A: f% y7 U6 u7 f6 i
#if 0
/ e5 ^7 d/ ]2 l% W# L ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ i# O: b9 ^4 `5 @$ B4 N- q7 J if (ret)3 V/ p& t, ?1 {( j9 H: j7 ]7 P
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 w+ U2 H. [! V( F# R7 v% D% q' \
"%d\n", ret);7 V% t( y( u+ t% w; M3 n. D6 {$ `! `
#endif
; O- V! l) m3 a! M. m( W ret = platform_device_register(&da850_evm_tl_leds_device);
, C6 K* z0 x, C3 C* j2 o8 ^' O/ U5 \ if (ret)$ v& C: L: l: a* f2 {
pr_warning("Could not register som GPIO expander LEDS");; I6 G& l7 y7 k5 u, _; ?+ f$ u
else
# Z1 z; N. q. |* i. j( R+ g0 H( f printk(KERN_INFO "LED register sucessful!\n");
5 j9 Y, q1 \. l7 v1 Z0 w- L( |4 ]+ f* r6 ^: x( x
return ret;1 A% _2 x8 m" f6 R
} T; v, p3 r2 F- |8 P. Z
/ Q n( K3 _. h+ k* K1 f( V
static void __exit led_platform_exit(void)
5 e. K; G* m: A7 w- G{( P0 w3 d; g' [+ Q2 @. h
platform_device_unregister(&da850_evm_tl_leds_device);
1 ?* e& q0 N) O3 q1 s, b
& @; ]& k$ j3 }+ i4 e: Z printk(KERN_INFO "LED unregister!\n");' H& e/ t# s- Q& A, U
}
+ V0 H+ A* j" I; p- s0 P0 | n3 \0 `5 h; v7 O
module_init(led_platform_init);3 d2 Q" ~7 t' q, Y! y* v( O
module_exit(led_platform_exit);1 v" n, X) n% N5 u( d4 ^, G e
& T |8 R% i( F i- D& X+ C" IMODULE_DESCRIPTION("Led platform driver");/ S' z$ u. Z' _
MODULE_AUTHOR("Tronlong");, a9 \6 o. D0 u( s
MODULE_LICENSE("GPL");& h y# N! K$ T6 B
- r& ~- g5 u' m" ^& M- B& `/ @
|
|