|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 S: P# b: d4 \ P, E4 b#include <linux/init.h>" B R7 {/ f3 r4 q/ P8 g, E( _8 }
#include <linux/module.h>
# S/ D" b( m( x7 G8 d+ U#include <linux/kernel.h>- e' O7 U3 C8 p5 j+ A
#include <linux/types.h>
: l2 J& Z, F/ L8 k S#include <linux/gpio.h>
; U% C' J5 P0 S) N' e; K& A) P#include <linux/leds.h>+ ~/ ~' u: z2 E
#include <linux/platform_device.h>& [4 O5 `4 `+ F. P
, u1 W; R: w4 [/ C e: U
#include <asm/mach-types.h>
1 v7 B. |. y6 V0 |. b* Q#include <asm/mach/arch.h>. G1 y2 `5 H, V
#include <mach/da8xx.h>
, Y! H6 Y% G, W) i% K#include <mach/mux.h>2 @1 G- e9 B2 T$ c9 u3 C0 D
( W7 s+ k4 e, I2 G7 n#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
( @3 E0 d. M! w% c#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ `8 T# M/ ]6 [- g: ~. j* L#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) W0 r# y3 \# h#define DA850_USER_LED3 GPIO_TO_PIN(0, 2) `) G1 K- ?- b9 O
4 z* o* _7 H/ z. m' l T/* assign the tl som board LED-GPIOs*/
: X/ I3 e! C7 hstatic const short da850_evm_tl_user_led_pins[] = {) T) x9 R% D/ K8 o5 \ e, F
/* These pins are definition at <mach/mux.h> file */
+ f. y7 F4 p5 N0 z7 `% r DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 b3 ~$ \& x1 e8 K% g) ^% G# p
-1& P: F$ t/ D3 I( {
};9 P9 \ E! z; l
9 T/ \$ s% B& L; w, Bstatic struct gpio_led da850_evm_tl_leds[] = {" o. @ I$ _! M. w9 C
{& V! `: C8 Q; I- A! c
.active_low = 0,! X: p i* }: K1 o4 |) e
.gpio = DA850_USER_LED0,. D: z( v6 L$ O4 ]& B, l r, t
.name = "user_led0",9 C( w- \: ~, h3 ~
.default_trigger = "default-on",. ^- r2 b' t1 @& d5 W: z. ]
},- z6 }. Y2 H( i( Q6 v
{- s" Q' ] |* }% j L9 ?
.active_low = 0,
" o# {. P- `1 ~, B' w9 r4 S& t9 J .gpio = DA850_USER_LED1,: m$ m$ _/ j7 z6 }% Y" x! l r6 m
.name = "user_led1",. x& R! q9 B4 D( v+ ~4 Z. A! i
.default_trigger = "default-on",
/ Z- \% r6 T0 O3 M7 q },
. C9 H2 ~! n3 E& v6 V4 j4 ]7 R {
7 @- K( b4 X8 Y+ {5 } .active_low = 0,
& v, |, j( _7 j0 o5 H9 j" j .gpio = DA850_USER_LED2,
1 S% u. J) _0 } .name = "user_led2",! ^* E% L4 l4 S& P4 {, U. G8 M) t! z5 s
.default_trigger = "default-on",
4 w8 q4 R( K1 R$ ~ },- Q0 E& j- L% U/ M: e5 ]3 M$ \3 i: e
{
1 f; e$ X, t4 `% C .active_low = 0,
) f+ S& B$ J$ x }& q .gpio = DA850_USER_LED3,8 h Z- R/ a t; i; }% w
.name = "user_led3",
7 C4 ^5 y0 m/ `6 ~9 d- Q .default_trigger = "default-on"," w4 ?# O: N# L! E
},- ^1 r5 q7 i4 a0 F% w
};$ y' g8 Y' N2 }7 ~" B
9 s+ k4 |! F, ^' x5 cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {8 }5 V5 x" @& p3 `8 @4 N, ]
.leds = da850_evm_tl_leds, Z2 q* T) b0 G2 x' N7 a9 P
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),- b# l. W* F. O2 m: d* V
};4 L$ f% B& {* @; f3 }
" F% S, J2 z+ \
static void led_dev_release(struct device *dev)
/ f' b, w3 k9 P( l1 X& I4 D- C' [{( y/ C' |8 c5 E8 a' C
};& d- V; K6 T5 Z. ]" m o! @8 j
2 Z) O a, o. `* s1 G& G
static struct platform_device da850_evm_tl_leds_device = {. O+ z6 I7 ~7 E1 l/ [7 z B% ^
.name = "leds-gpio",
9 U4 j4 r5 x4 J; L" e" z .id = 1,0 m' H) Q0 A9 y9 n
.dev = {8 V8 e5 K+ e M& X% E* ]7 H3 s8 C
.platform_data = &da850_evm_tl_leds_pdata,$ l" M9 C* B" i( B4 R
.release = led_dev_release,, Z$ z6 |) U" m( i" [
}2 d, ~+ v$ I) ?% T: A& h
};
' Q f- l; X( o% u2 N0 m/ z/ D7 f7 A2 @8 ` Y" a3 g
static int __init led_platform_init(void)
6 i, F1 ]( K O2 M f" i8 z{
2 ]0 _1 C& X$ o& L E$ B; x! ] int ret;: G/ S+ {# n! v: z* j& [
#if 0' ~1 D7 g& P6 z# i9 `
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& U9 | E2 ]( n) s. O& D" I if (ret)0 S/ u' ^1 Q/ H% N
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 }1 R6 q# R. j U2 i "%d\n", ret);; y3 @1 @9 D @" B3 P7 M( @
#endif
% S7 n; W" E* U- s; w; g8 k7 N ret = platform_device_register(&da850_evm_tl_leds_device);
2 b/ Y: l, w) l" T if (ret)
$ l( d6 ]$ C7 M5 L. F2 m pr_warning("Could not register som GPIO expander LEDS");
' M% `& P& S9 G. c; B1 } else
: L! m8 _% a/ C- F- C' [& r printk(KERN_INFO "LED register sucessful!\n");7 V! |( F( K1 l! {/ F
- A0 d. P3 y6 w+ o/ r% V return ret;1 ~0 p7 y2 c; o: ?6 a4 f
}1 y! j8 G! j/ o8 b/ D
& N" z7 i! m9 }: q+ r& M3 z* w
static void __exit led_platform_exit(void); {: z9 g2 |# u7 u& {
{
}/ X/ O, Y/ h5 F6 X platform_device_unregister(&da850_evm_tl_leds_device);3 u# D8 Z: T- t) \: M% z1 w- B
3 g/ m+ d& R) e printk(KERN_INFO "LED unregister!\n");+ o9 @$ q' C" u( f6 x/ L
}
. S; ~0 ^7 P8 E+ u: a: i- x
1 m- n+ J! i1 ]) Ymodule_init(led_platform_init);
2 k9 N3 l/ d/ \0 ]" L# S, vmodule_exit(led_platform_exit);
2 _' b( Q% }; t; ^! p/ O: U% a0 Q; j/ m
MODULE_DESCRIPTION("Led platform driver");
% x& B4 Z5 m. ]3 I4 V5 g7 wMODULE_AUTHOR("Tronlong");
5 Y" ]& d9 z& q7 H; w6 ^MODULE_LICENSE("GPL");! @' w+ k4 T2 n+ C A
7 F0 ?+ d% o" J |
|