|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; f( n% K) Y5 z/ W: s#include <linux/init.h>3 h" W6 o7 G6 k
#include <linux/module.h>
0 X6 Y6 B( i# r9 A4 l8 h#include <linux/kernel.h>+ f: q! h% N; U k
#include <linux/types.h>! w! {6 m1 t# A9 o! ?. K, E
#include <linux/gpio.h>& x4 h% R0 X5 Y
#include <linux/leds.h>
" e/ B/ p/ {/ N- m5 z! d#include <linux/platform_device.h>
; E* b: z$ r& X9 L7 |, B) }% i1 W
/ g6 @- ?* Z8 `' B3 t5 d n$ K#include <asm/mach-types.h>
1 Y% i% j7 f/ s( h( l" y; ]+ [#include <asm/mach/arch.h>
: r7 t) p0 v8 k3 V" |1 {# c#include <mach/da8xx.h>
3 g% A/ X# j, g# r( r3 }#include <mach/mux.h>
- K+ ~( M9 ^& ]5 b+ F' s, Q1 r( P" h# P/ P% Z) W( A4 d9 r! q+ q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 s1 Z4 m, @8 @# ~9 K# j5 P8 s* q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. q2 {+ i" R" I+ Z) c7 ]#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' J* D; f2 z6 ], S V3 J
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ c6 e$ C% P; l; j. d4 g2 E" P
$ e$ @6 F" E# _% Y/* assign the tl som board LED-GPIOs*/
8 A# H' g4 G) ~6 j8 i f. Wstatic const short da850_evm_tl_user_led_pins[] = {5 Q4 i+ `2 o7 R, G
/* These pins are definition at <mach/mux.h> file */
: f/ o' O- C; d! ?" h: B DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! }$ a! s5 n9 G" u1 C+ Z# t c+ K
-1% U; X0 C h5 b0 `2 t' A
};
& g% u" I1 Y7 p5 i" I% k' D9 i7 E2 Z" r
static struct gpio_led da850_evm_tl_leds[] = {) ~, w" [8 e% V
{
/ @7 V! _- i3 ~2 H* ? .active_low = 0,. B" c2 e, Z, F) p/ @
.gpio = DA850_USER_LED0,
* G: }0 U3 \2 O% J/ I) P) [5 b/ k .name = "user_led0",% o! j1 b# b2 x1 ^
.default_trigger = "default-on",) x# Z6 E4 G3 g; @% A0 g: Z2 }0 @
},6 @# `; E6 g, e& ? [8 T
{" X9 t/ [+ P! p6 M
.active_low = 0,
9 k3 e2 | r& l .gpio = DA850_USER_LED1," m/ S% _- P |) ~$ F; a7 E
.name = "user_led1",
) Z& l3 Y! N$ i .default_trigger = "default-on",
: \' b5 J9 c: _ G8 i },. g5 x. y- r4 _5 ^: V5 e
{9 J9 d, k5 \3 @6 n0 I; [
.active_low = 0,4 U1 ~3 f! w( F L( }- o
.gpio = DA850_USER_LED2,
- M, n2 a3 x- a* u) d( w .name = "user_led2",
$ C) d5 n6 h$ |! O$ Q .default_trigger = "default-on",
/ t% s* d4 \/ O5 k. z1 Q },
8 R r+ T. Z4 R$ M$ [2 \ {6 k+ n# ^. F# i" X$ i q* W4 ^6 w
.active_low = 0," Z9 C) z j+ S* \1 \
.gpio = DA850_USER_LED3,# f9 a8 c, L- [4 ]
.name = "user_led3",
4 x4 m, A- T. y* v% m .default_trigger = "default-on",! j- R# Z0 F6 w. S
},
* s0 M; _; F5 o( s# G: M/ B};
& @& ?; `+ H$ s: D
+ S4 q: C) M( ~0 dstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 q! w, Q4 x4 h: c) f( [0 ` .leds = da850_evm_tl_leds,
; q; `" K; `3 P5 ? .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 E- G( F2 A. u5 n8 M6 s) [3 I' Z};3 ]/ _+ R$ m3 a( y. S9 b# c# D t2 J5 |
. [8 s0 U; d7 M6 i+ u! @8 {: [
static void led_dev_release(struct device *dev)
6 M3 f2 G( @% ?" M. H {{
! [1 d1 z a+ L$ O; [+ ^5 c};
2 V" [. e0 N' A
5 F$ K: q o. X( |static struct platform_device da850_evm_tl_leds_device = {
2 K! H5 s X/ K6 N% H6 o, g .name = "leds-gpio"," Y; I& X m; {6 |& Z# T
.id = 1,
# |7 K0 G* [+ O6 }! I/ v .dev = {6 `. X7 E' L& ^. u
.platform_data = &da850_evm_tl_leds_pdata,
i- R9 e1 | }0 T5 ~- E .release = led_dev_release,6 `- u5 H' n8 c8 O5 H1 K* {' _. E5 G
}: L6 }' o) @$ d
};( Y! q% P: ^2 E
% x3 E. K/ A" o: ]static int __init led_platform_init(void)# E2 O8 A9 O2 ]( A. P1 a) f6 _( Y& p
{
& f K2 c( o% `+ y: N5 e+ K int ret;. H9 U% v: O9 }1 X9 i
#if 0
4 B( k. b0 |: O ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* H* X/ d) |& |+ C$ z! M
if (ret)
. }: a; I# G* U- w9 ~. }; u pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% C: H0 t' a, S( X! d7 B: c
"%d\n", ret);
8 C c( B& \" }" r& ?0 F5 G( x. N#endif
& f1 ~6 n* Z) C0 A N+ g# v ret = platform_device_register(&da850_evm_tl_leds_device);
/ y G' `0 x T% y: w% ]- Q; ?" b if (ret)
2 O7 Q5 F. Q( Q7 j$ s0 W! k& `/ z pr_warning("Could not register som GPIO expander LEDS");
+ G; q% j9 t5 [2 Y, ]! d else. N. e+ l9 h7 E* D/ w" |$ a
printk(KERN_INFO "LED register sucessful!\n");. Q l2 Y' M5 v) ]& k4 g7 j& N7 S
. f" V5 e) _& y6 s$ I2 v0 L& V% I
return ret;' S- ^ E% x# M, p
}$ \$ }4 l u4 f; H2 G0 M& D* e
" v8 Y% M8 c( _+ J, Q6 X
static void __exit led_platform_exit(void)
" m( U A0 ?9 E o* K; P{
_0 ~( e+ H% \( x% e! z5 s platform_device_unregister(&da850_evm_tl_leds_device);! T5 E$ O' a. A q- ]! f. n6 {' E
, j( {5 K" S4 t5 s
printk(KERN_INFO "LED unregister!\n");
3 b- ^# `# X6 \( v3 O}
# M6 K5 M9 G; K2 ?) k; z- K4 u2 E) f+ H: a
module_init(led_platform_init);- u# Q: u( a p' D: R) N
module_exit(led_platform_exit);
- ?( D5 I1 T' p8 u* N& ^( V/ h% G2 c4 K; | d4 C
MODULE_DESCRIPTION("Led platform driver"); V% R1 {- u6 ]
MODULE_AUTHOR("Tronlong");( y4 l! @; J) m1 p
MODULE_LICENSE("GPL");; E0 K4 m8 m( p! A$ k
, i7 R. m8 \% M) Z; G) m9 p } |
|