|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- g+ `; L8 U/ b# { | u3 u3 S#include <linux/init.h>7 S; Q3 k7 `& L2 [5 U
#include <linux/module.h>1 Z+ @5 b/ u5 ^) S p$ e
#include <linux/kernel.h>& A& w0 R- x& m4 F7 K) |% N9 ]
#include <linux/types.h>
% D) B8 g5 C. ?4 ~9 z5 ?5 \#include <linux/gpio.h>
5 q1 Q" e) g+ p4 b#include <linux/leds.h>- b: i% P) x# x/ \0 x5 ~1 K4 D) c
#include <linux/platform_device.h>5 X' t/ ^0 ]$ B$ u$ S6 m% b2 U
; b. \* M+ Z* o! a
#include <asm/mach-types.h>
' ^2 X/ H' K4 q4 p# B" P#include <asm/mach/arch.h>
( v$ C3 l% _5 }, A#include <mach/da8xx.h>4 U t2 T/ N# n% s: j
#include <mach/mux.h>
' }- x2 i+ j; ]; V
, Q5 J |- w3 p1 |5 n& V#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ X. U' L! F2 M5 _0 J) b' _" K#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, I+ I7 H& ^3 H% T#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# ?. e; i7 v- ?9 [. P' F: u, ^7 J
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% j% t* C* j5 I+ \: ]% S3 K G- Y$ i/ p/ Y! c& b7 u5 V
/* assign the tl som board LED-GPIOs*/3 s8 Z- i- ?2 W/ v
static const short da850_evm_tl_user_led_pins[] = {
/ U. [( y) e1 K6 d4 N# ? /* These pins are definition at <mach/mux.h> file */
$ P: z! x! k+ |7 e! j DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' a$ b5 G# y. n0 r
-19 B7 ~" E, @3 L) t' B5 D" a
};
5 g8 F* S& M, X$ p% {5 ?5 a/ R- m4 w7 F, K) N+ x: u, F
static struct gpio_led da850_evm_tl_leds[] = {
! d# R( g0 V$ c' c& K {
+ z5 V6 {2 W' `* Z .active_low = 0,
) K7 f% M: k- ]+ J9 D$ y .gpio = DA850_USER_LED0,' `8 b9 s, v% b$ C
.name = "user_led0",
/ }! Z" k0 u8 e* o2 }! Z: z' I .default_trigger = "default-on",& {) S. M3 {: B0 E! Q- ]- _
},% @9 e; g, a2 n/ z; Z4 u$ j+ M
{3 N- u; s- k/ P0 m4 x# E; ]
.active_low = 0,
* C. q# V6 |& ?5 x .gpio = DA850_USER_LED1,0 f+ x8 u2 E9 P/ U, m' B
.name = "user_led1",
: G) c! W& n' S r .default_trigger = "default-on",
9 q1 y* z) D( q; k },
' ~% z% `; V4 p" ?- d6 R7 P {$ O& m$ t" o" }4 p1 ^. F
.active_low = 0,
1 c# f& j8 ~- b .gpio = DA850_USER_LED2,
- J0 _7 x- |; D2 J# E# m; f .name = "user_led2",9 O7 f! h3 i, Q) Q" J
.default_trigger = "default-on",( V# C# r* R0 e
},7 Y/ ?+ Y. j7 P2 l" _4 r
{! m, Q8 l- q2 ]2 o8 v
.active_low = 0,1 T3 y: ~5 ?+ v5 W% F0 r9 D% u
.gpio = DA850_USER_LED3,
, }1 k3 H) n' }/ M/ X2 A% J+ I .name = "user_led3",
. R ~1 b, z& ]: I .default_trigger = "default-on",
( e5 B1 U+ @1 R2 C },
; }9 k! p$ i7 f! D5 Q, _; A};
; U1 `# ] \7 W
& g, w% v( I; J+ e$ Wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 z3 X: D& r$ k .leds = da850_evm_tl_leds,5 j. r( @; f5 t' s2 d
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 i( J% \% H/ H! _. S2 A};
& L6 c5 B, j4 P& M) J, G& }# G0 A0 a1 f) M8 \; V9 t9 ]6 G. I) R
static void led_dev_release(struct device *dev)* y6 N0 Q5 v0 y3 p' L
{2 x4 f4 O' Z* e
};6 G: c! s( l. B) y
* G+ z2 z* ?. S" ?7 U, l3 l
static struct platform_device da850_evm_tl_leds_device = {
: k/ I2 t, v* p2 J .name = "leds-gpio",) Y F! @) Z( i# R$ q/ E
.id = 1,
, r/ |: l# d. p/ D .dev = {
. w; K) M# k; A w .platform_data = &da850_evm_tl_leds_pdata,
# Z: V, i. U2 W3 O5 _ .release = led_dev_release,1 [8 O, y0 r+ N Q, K
}0 `4 Y0 W, n- ?1 V) g& P
};
, E, `' g I9 o: E" o8 m" A: o" [) M4 U. P% g5 K" O
static int __init led_platform_init(void)
: u+ n& Y$ D6 G9 h1 q5 T{
& k0 Q2 V9 R5 U/ i1 t* Q9 S& p. s int ret;
' }2 M% Q) W% w* ?9 I. _/ c8 V: B#if 0$ P. B. I. v5 y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- X8 G, {" g$ I9 a- K+ o, o# K if (ret)% A* |& A9 G/ n9 k
pr_warning("da850_evm_tl_leds_init : User LED mux failed :" |$ l7 M' i; t; g; i3 v
"%d\n", ret);9 T- L: t1 v& W- ^: t
#endif
; c1 c9 a$ t' t ret = platform_device_register(&da850_evm_tl_leds_device);
- J# k. R7 R; \, [ if (ret)( n7 \ c, f2 Z. |$ i
pr_warning("Could not register som GPIO expander LEDS");2 D) Z3 c2 O! @- l% i
else
. \/ U* {- T9 F9 d9 H printk(KERN_INFO "LED register sucessful!\n");
5 a* p8 U! M; v$ a0 r7 _0 r7 U- k0 r! K/ w0 N( k B
return ret;
7 K P o' v3 e- G6 u, C) y% j& s7 c- l} ?" S& G/ G9 Q2 F- f! B z
7 h6 D: O1 x8 {& ?. M& ~ Y- \
static void __exit led_platform_exit(void)
. r; k* `5 y9 e7 m/ O8 X( F{
' G% y% M, }+ ?7 r7 z platform_device_unregister(&da850_evm_tl_leds_device);
/ ^- m7 |- z% Q0 U; _' o& }1 m8 N8 K2 D* Q1 ^- E
printk(KERN_INFO "LED unregister!\n");" m- S8 s3 Z# k1 X/ K
}
/ o( R) q, n% v8 x3 T- G, C
! d0 J$ K; @2 ?5 Q/ p y4 nmodule_init(led_platform_init);4 d* ]7 z2 O4 z2 O9 l2 ]
module_exit(led_platform_exit);( u/ ?* X- w4 u: A/ k. d, ~
" ?5 ~8 S8 o0 z, r4 W5 E% j
MODULE_DESCRIPTION("Led platform driver");/ C+ E& r6 U+ r: x& K
MODULE_AUTHOR("Tronlong");; O& j3 n8 X. J4 i9 w
MODULE_LICENSE("GPL");
9 T% r" Q- [, q# x" R, I6 M+ j8 @+ t0 ]2 }, C2 q
|
|