|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! e& v/ h4 D+ f) Y. b#include <linux/init.h>
8 `. E$ C4 n' w, e% E#include <linux/module.h>0 }- H' _' [0 t1 N- c2 @
#include <linux/kernel.h>. M4 t& d7 n/ b
#include <linux/types.h>
8 y; ], @- w# Z! _5 z#include <linux/gpio.h>- U7 S* H6 }' ?4 r; Q2 @
#include <linux/leds.h>
1 K! d+ n; Y6 s/ A+ P. {. L M& Q K#include <linux/platform_device.h>
, g8 w- @4 ?9 l& d6 e% }+ z) ]- P3 F8 q6 K5 ~3 h! ~
#include <asm/mach-types.h>
* j+ d: ]+ G7 T: r0 ^4 @#include <asm/mach/arch.h>& h/ i% b$ C1 Q0 C
#include <mach/da8xx.h>% ?+ k& {, } p- W% z9 H- G
#include <mach/mux.h>
6 J _. V! ?$ x- p4 L* l' t! P+ R% c) C8 G
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- q2 b, P5 G! f/ J4 Z6 N. K: ^& u/ Y# y/ o
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 O, a- X* H( j( ?. M+ W; }- H#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
* _& Q9 l' w( G4 E* E4 X8 N2 S3 s$ b#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# L7 O! o& M0 T, w# e/ t/ N' T3 P. w, z) i6 M
/* assign the tl som board LED-GPIOs*/
: f7 O% o3 M- u# t( astatic const short da850_evm_tl_user_led_pins[] = {
( B8 ~, v2 v+ x7 }1 u /* These pins are definition at <mach/mux.h> file */+ R! Y6 S. \+ C) V
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 n: s7 V. e0 f5 |7 [7 d3 B7 V -1/ ^8 z/ q: f+ |% ?
};
D6 e/ f6 |8 C+ o
0 d0 q6 N8 H1 o4 w' E/ Lstatic struct gpio_led da850_evm_tl_leds[] = {! _! J6 U' x$ Y4 ^$ S
{
: [. |; T) x% G* ~' L o$ S) c5 h .active_low = 0,: R9 D& g [4 ~
.gpio = DA850_USER_LED0,
% B) y, G3 _2 m% X1 \* L$ X .name = "user_led0",
7 v! A( Q: `) h" g( h$ p! o! R+ n .default_trigger = "default-on",* i9 w, G {/ `0 A, J# _* Z3 B
},
) D0 v! D5 D6 e {
$ q) f1 ]; R6 h7 ]( s4 h .active_low = 0,
* T/ `: @, v2 a, T8 f .gpio = DA850_USER_LED1,
9 X# S! [, q- j0 | .name = "user_led1"," r( t" [1 J. y5 {$ Z4 {: P1 R
.default_trigger = "default-on",# z9 l4 U0 J6 x8 h6 i6 `. y b
},
+ n. e4 g: s1 l, O- @ {
6 r; r( P& I6 M8 `8 O. J .active_low = 0,
" C- F+ x3 d/ @ `3 M- Q .gpio = DA850_USER_LED2,
( H9 E. u3 y5 ?; t0 z .name = "user_led2",# r. z7 W" L+ b6 I d1 l
.default_trigger = "default-on",
# d3 K: s: ^& g* J, X( D },
! o0 o/ x* V, y1 ]: P {
i! t8 c( I. U/ p3 ~ .active_low = 0,
8 ], a- n+ M* Z& A# e9 n .gpio = DA850_USER_LED3,# K# Q8 X2 A& j: o* g
.name = "user_led3",
6 t9 @2 o: i. ?% f$ t, h0 g7 z .default_trigger = "default-on",
/ S* X f n% g* _/ \) V( s3 Y* b },
% m' j& E+ j6 K' f1 t8 a};
* s, G7 j4 u; k$ B2 \! Q/ O [, K
3 ^6 L+ K$ U. z# z1 cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 E9 T$ f; p$ s4 R1 @# ?, @$ ]* ?5 S
.leds = da850_evm_tl_leds,
8 X2 A4 Y$ }' d .num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 H/ P8 w: h: V" G1 g4 j/ M* G
};
0 D$ N: m2 W/ U" [
5 x' {' z6 k! d* \1 Y7 Bstatic void led_dev_release(struct device *dev)" Q+ p! z3 A0 j7 ?' X5 I
{( o( a& r8 o9 O
};5 b0 ] C$ S( m* \. |
1 ?* u+ }$ f* R; U" J1 n# M
static struct platform_device da850_evm_tl_leds_device = { l% E( R1 w2 W9 |: a& x6 M6 r# j
.name = "leds-gpio",
& ]& _. x) u! C: K8 H3 l .id = 1,2 n$ u4 m5 M$ a
.dev = {; E$ U& t* U& r9 a6 `5 L% N
.platform_data = &da850_evm_tl_leds_pdata,
3 |' T. u- y+ W7 f# w .release = led_dev_release,
1 F1 B/ `0 q5 m0 ]+ A5 L }
* A% n$ O& l& o. w& H0 ?$ J6 d};8 ~5 Q: i$ F# i6 _/ b. ]
) @; v9 G M4 B+ N
static int __init led_platform_init(void)% ^1 o. c' K5 ]5 E
{
; B# D" Y9 B. a* B; C3 K int ret;5 ~. @0 f6 D' B& s' {* K
#if 0! [1 n! B% ^! U5 r
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 M, i" P. z/ q7 t2 [7 C% _" B
if (ret)
" Q' \7 y3 ^9 f* m9 u pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% |9 V' T: z' L! I5 [) v$ B9 t "%d\n", ret);
9 g' D* f8 S5 e& t. e#endif
9 c' m: l& S! Z2 y4 O* s ret = platform_device_register(&da850_evm_tl_leds_device);
% \- l3 [9 x% M: t& { if (ret)2 z% e; P; M- C# e: X. n, h3 ^
pr_warning("Could not register som GPIO expander LEDS");( t) v" ^ R: W0 q! `" { D
else
7 s; k+ M5 u4 a, o printk(KERN_INFO "LED register sucessful!\n");9 o, F1 S4 g ]- w1 I" N( d. h
5 {8 L, v3 W2 I# e4 B% X
return ret;
3 p% \) P/ Y* K0 G. ]# E3 t' X}
' R, @; F0 }/ k9 u) X' j& [0 C4 U; \ f& l0 M4 C
static void __exit led_platform_exit(void)
8 X$ b8 ?1 k6 E" ^- S{
3 h1 C2 Z, x% y platform_device_unregister(&da850_evm_tl_leds_device);
' Y0 D8 S# ?5 d* R% I; h2 o' x8 k( Z0 z6 }
printk(KERN_INFO "LED unregister!\n");9 `, H: j5 p" [7 J0 L7 h. W3 J& A
}
( c7 o9 G$ P0 v) f( b" L. L
% h6 Z8 ?8 v: Amodule_init(led_platform_init);4 J; C1 R& \' J8 a
module_exit(led_platform_exit);
: T! Q) w1 C7 X; d; {$ h2 J- f. S2 m1 P5 \* h3 k0 l: E
MODULE_DESCRIPTION("Led platform driver");
+ |* Y! M4 W& U U# P; MMODULE_AUTHOR("Tronlong");
# {) f% C; [- _$ h$ lMODULE_LICENSE("GPL");
, ^5 u x- m9 i* i- d
3 J9 Q2 S C3 d) q |
|