|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ g: t7 i+ E9 d
#include <linux/init.h>
( M- F1 q/ o* }$ A, \( X#include <linux/module.h>' _3 p* g/ V9 I9 Y' i. |
#include <linux/kernel.h>
0 N+ v% x# A# K#include <linux/types.h>$ P5 F+ |- K! ]8 m0 b, I9 E7 p
#include <linux/gpio.h>" f$ y# T8 T+ m5 B
#include <linux/leds.h>7 s: A. T4 \% Y2 N. E
#include <linux/platform_device.h>
1 G7 T$ Y7 `8 i( A+ w% l% b7 I- H p% t6 `2 ]: j4 x+ `3 ~+ l
#include <asm/mach-types.h>
2 p0 F A. U! s2 Z2 k1 @#include <asm/mach/arch.h>
. s8 c5 Z% E: e. z3 M. [ K d#include <mach/da8xx.h>
- M( ?! `# L' c2 n, h3 R#include <mach/mux.h>
" ^+ p- B% C" r o" x
a; |3 b; L$ C#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' v {/ D# @& f8 E% X
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 R7 J, m L! p j#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) I L1 I5 L! f' n3 m- ]#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ W, e( w% L( I" f7 G
7 S6 p* J: Q' }, R6 Y# |8 [# |/* assign the tl som board LED-GPIOs*/
( s( T0 g8 k/ i: j" O/ Gstatic const short da850_evm_tl_user_led_pins[] = { T2 i3 ^# ?9 o9 i8 p" H
/* These pins are definition at <mach/mux.h> file */4 [( ` q) ]+ g5 G; n
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. l) P5 P, I5 J. D$ t2 D -1
0 P6 Q% D+ j& O0 T};
) Q6 W Q3 z( E2 X
8 E8 ]. l6 m4 T% }static struct gpio_led da850_evm_tl_leds[] = {
2 A0 Z8 |2 C2 i& b% z5 b7 b {
7 O3 Z3 M* d1 a .active_low = 0,- M4 M6 H! o6 P3 C" U+ _& Y2 j, Q
.gpio = DA850_USER_LED0,
6 N2 y, E& s+ A+ Z3 i- T _1 X .name = "user_led0",: v/ q/ S4 O/ E3 k
.default_trigger = "default-on",
) h" M6 i" F" q0 o" m },) u* S; V- k U+ \. B) b, R# E( c
{
7 M5 S" E* {9 e9 e, Z1 } .active_low = 0,
( |) a0 a* Y7 c; x2 H' T .gpio = DA850_USER_LED1,( |3 K# i; J2 s: w
.name = "user_led1",' I9 U1 ]: P# i. a- D
.default_trigger = "default-on",- a3 D0 t D7 B! _6 N+ Z6 u
},( C/ ^, T% s' K/ X* D
{
; ~) Y/ i9 a. W/ B- z .active_low = 0,
' D8 o' n8 h9 }$ h. f! G .gpio = DA850_USER_LED2,1 i: J, D y, m
.name = "user_led2",
0 M9 Q+ [- q# \( v1 `1 E t .default_trigger = "default-on",
, E) h7 `5 M8 X! [ },
/ o! R8 L! D# d* C+ U {
6 [) T9 t; A8 q' V% V .active_low = 0,
8 \: ~, t1 \2 l c6 d .gpio = DA850_USER_LED3,& }- }4 j3 r0 N; t' {5 }* d& t
.name = "user_led3",
+ M" e6 Y. h9 i. v5 E8 P .default_trigger = "default-on",
, [( K9 @' i- @& }3 p0 F1 w/ H },7 z# O5 w6 o7 B( K9 s
};4 r+ d7 N2 q; ]9 B2 u7 q* ~1 Y
& j+ _( r4 s' H3 Y: E, z, ~ O/ S
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( m% n1 x; [2 f .leds = da850_evm_tl_leds," ^9 I9 M6 b% g* Y; S0 k5 g
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 l3 G' U( e9 ~% r2 ~
};8 z: c. r( {: Z, t2 e& q0 f+ {0 t' G
& Z0 J0 z! [1 U! E% J% t+ ~/ zstatic void led_dev_release(struct device *dev)1 ~( [+ H' e2 n. G* V- c( [/ F# ]: V
{, G/ C) {/ a8 G1 O y
};. `5 t' p6 F$ W" @ H
2 s1 ~2 }# w4 Z# v* M3 ^) b% kstatic struct platform_device da850_evm_tl_leds_device = {0 d8 q6 Q% T+ y5 t
.name = "leds-gpio",
8 B0 a! d, F0 T; I7 t# w% ~9 `, w .id = 1,7 ~$ ~# C u& w$ t8 n2 }9 I# e* s
.dev = {
3 M2 w( Y) A( u6 j .platform_data = &da850_evm_tl_leds_pdata,* L! w& V: X+ C& M [; X% M
.release = led_dev_release,7 `5 s3 J* ?1 m/ J. P) X, P3 S
}- R: V. }6 u2 k
};
( @& |% @& j' g; @7 Y; ^
( w9 G! `& @* \; Q" j4 R! ~% ]static int __init led_platform_init(void)- i& x1 _8 y5 V4 F& W, j6 W
{+ s1 z# I+ g: z9 W% L
int ret;+ F$ E I0 _7 W9 n
#if 0
; }( V/ Y2 k7 Q+ h ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: G g' B2 g0 g' b* D if (ret); p# Y; @" H6 r3 R4 p5 i
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 y/ p# U, J3 K- E |. J2 j, O "%d\n", ret);
' F5 T) p/ d( h#endif& |8 ]4 P8 B& w$ j
ret = platform_device_register(&da850_evm_tl_leds_device);
$ l- u" F A4 S! D; g if (ret)
$ {# t; ^" Q3 ?* d7 W' t0 P pr_warning("Could not register som GPIO expander LEDS");- i {$ h, O9 u
else
* w: p1 G: Q/ C+ I& e printk(KERN_INFO "LED register sucessful!\n");
$ W9 }7 l3 X# c+ f x: i3 w+ K E1 ?! u! |# J X* D D
return ret;
E4 ~0 d" `4 t, R, h}
d+ ]' _# ?8 D; i3 o. \' b: i# E, K }8 a1 H4 S7 R9 U
static void __exit led_platform_exit(void)
7 H% M+ Z- n- L' w _{
4 A4 M( ?: c' ^6 N6 O6 D( j platform_device_unregister(&da850_evm_tl_leds_device);7 _8 w$ ?- A) G0 Q5 H% T
% }4 V# r/ R8 i
printk(KERN_INFO "LED unregister!\n"); q! d2 w) [9 h% N
}, @. }: K" p! q/ R# D
& b" q8 `2 E( v0 Y; A" z( w/ B
module_init(led_platform_init);& y- l$ d$ I2 p' L: C8 j: D
module_exit(led_platform_exit);! y; |& N5 E6 Y0 C" j
/ d% p5 z/ ?# S7 A# `. L4 jMODULE_DESCRIPTION("Led platform driver");8 m1 a u7 h! e3 ^, q
MODULE_AUTHOR("Tronlong");; ^5 `- v+ Q% W9 d
MODULE_LICENSE("GPL");
, g/ e! y1 F3 t
2 m. Q( f' F$ A6 x1 e |
|