|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% K7 }% s5 w7 N8 p
#include <linux/init.h> w% Q3 |3 k: O
#include <linux/module.h>% }$ i K# G) l, h5 X# @7 B
#include <linux/kernel.h>! K9 i8 f' J" E) g, L( r( v
#include <linux/types.h>
5 O1 D; P9 |. q" y( x#include <linux/gpio.h>' K$ p6 u" `" c; |. {- E
#include <linux/leds.h>/ d; b: E& T% X& @5 ^2 n
#include <linux/platform_device.h>
: E# a7 J, N# G4 U0 `# y$ P0 t) ]3 |3 m1 B2 K+ D! H5 p. k" |
#include <asm/mach-types.h>+ e# M: J i. h2 D4 q3 }3 {
#include <asm/mach/arch.h>
3 i6 Q* M3 ^. |; Z4 ?#include <mach/da8xx.h>
. l; x. i) i" I#include <mach/mux.h># M7 B! R+ d8 g, R" [! H, k8 z
- E$ I* f+ A o: F9 X9 Z$ P
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
S( c- T' J! Y9 U& b#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 ]- t# ]3 J/ b$ y. ]#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
: I7 k- f4 ]' [# Z# Q6 z, v' B#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 _+ `1 z: T4 h; P: ^1 Y
2 B* j `2 @) }" [/* assign the tl som board LED-GPIOs*/5 R. `6 _% V+ j4 g2 K
static const short da850_evm_tl_user_led_pins[] = {
: i q$ |( s; c t6 g, n /* These pins are definition at <mach/mux.h> file */
- U3 A1 m/ O3 Z2 Q0 p DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 k# z7 R4 J" Q/ `
-18 h2 B) z" G h1 J
}; R; {' e* |+ q9 C0 U
& L/ E) s0 s3 W) x+ M! C- R7 d
static struct gpio_led da850_evm_tl_leds[] = {
$ \9 t' V$ I) W! t% m$ a: p, ^ {+ T) P/ I6 R3 Q* `
.active_low = 0,0 P ?" J4 \1 G8 V+ a- O
.gpio = DA850_USER_LED0,
! O; ]# N# |! q6 n# } .name = "user_led0",- ]6 N' U4 Q4 ^2 {* F" z
.default_trigger = "default-on",8 z; C- T1 {0 }+ f$ _ k; [
},3 m' v+ }/ H! X. v+ p( j
{# Z' Y! k3 P7 B% f
.active_low = 0, ~0 P9 l4 }6 K6 L
.gpio = DA850_USER_LED1,
" S* w r: A! w. m* u2 n. H .name = "user_led1",
$ f/ q! @8 F( Q) ]# y5 v .default_trigger = "default-on",' u, ^3 ?( r' t
},
) t% Y! f7 X/ K! b! f1 ^ {. T" D+ w' \: p5 b! o0 _
.active_low = 0,$ O. r/ d3 M: a6 g" t( m3 }) k& \2 h' I: I
.gpio = DA850_USER_LED2,
& T7 R* A* A6 w0 p2 ~% ^ .name = "user_led2",
, C1 p( d9 T$ T1 M$ I# G .default_trigger = "default-on",
( m: t7 e! T9 B' B },) q/ ?( }, j0 _* w3 O
{
. c3 j4 f* O; H* j+ n, _ .active_low = 0,
: g4 p6 s+ k# Q% `, T7 J( U( ^3 N. ?4 ] .gpio = DA850_USER_LED3,, Z- L$ H0 @: T6 s. f
.name = "user_led3",3 t* e3 J2 P V \9 n/ P
.default_trigger = "default-on",
& R4 J" `. d9 C: a1 D" {- _, k },1 G3 ^+ F* ~/ ]2 A6 `( R( j% h4 \; k
};
* w: X- _% b' C6 j9 }5 S) d* k2 ` w+ _5 L I8 N7 u
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ T. U( Q8 y% i2 U5 W! z4 I .leds = da850_evm_tl_leds,
/ ]% k T+ f- }" }& G .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 `/ e$ b1 v6 j, Z};
7 z. K. Y) F' f5 r
: V+ u+ C: b' [- `0 t5 R/ }static void led_dev_release(struct device *dev)6 H t( g! [" l, ]( p- ~& u, n
{: J) v8 X7 c# R& N' I. ~2 e
};
# ?4 T0 \0 W5 j" c) ^2 ^! ]" B/ T$ d
Y" g2 W1 B! D/ O. Y! e+ Q( Gstatic struct platform_device da850_evm_tl_leds_device = {
- C Q" |9 ~% Z .name = "leds-gpio",
# Q! H0 l# s" E, \4 `5 j K .id = 1,
; F' q# X: Q% j' J+ C! \2 @! Q .dev = {
, x; Z' E1 r, _- k+ n .platform_data = &da850_evm_tl_leds_pdata,
9 S; L$ ], [. z3 a0 i .release = led_dev_release,* C( m1 c8 t8 X J0 ]7 b- @$ C
}- y& Y5 V( g! l1 {
};
: ~" Z' Z/ |; M& R% J* w- q: t% W6 ~! F8 G+ d2 T9 x
static int __init led_platform_init(void)
& O1 i, M& n* G( d& s4 g7 W{
# Z) d7 z: K8 L7 ^1 | int ret;+ Z2 h% y6 v* A% T/ n6 y, j
#if 0
, ?- `+ f! j9 J5 i7 ]+ w ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
" X0 @4 C# ?9 }, ?- Z0 @ if (ret). c) |, ?+ l" `0 ]+ K: U* y
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- J$ N, ` Q4 G( y* v
"%d\n", ret);
4 d1 @& g/ P+ w8 c5 f. ]9 c#endif7 l' c ^# ^7 Y: T, [' I
ret = platform_device_register(&da850_evm_tl_leds_device);1 p* }8 B% g# [" j
if (ret)$ T6 K% X& W( d; W
pr_warning("Could not register som GPIO expander LEDS");
- p* c5 r. Y1 Y' a/ C6 o8 O else _7 z3 s. W; X. a8 J) S# ] \
printk(KERN_INFO "LED register sucessful!\n");
( b0 @ H% O' G% n& W& `. v
) c5 P. v# P; c, P0 R return ret;4 i7 Y9 Z/ ?5 x
}
2 Q! Q+ L7 R# [- m7 }7 J7 n$ x! Z+ V2 e0 g y7 `/ d/ I) K
static void __exit led_platform_exit(void)* u4 z& }' O: E0 e0 X0 ^* r
{# T @2 l4 c0 W p
platform_device_unregister(&da850_evm_tl_leds_device);5 R+ j; n1 U4 C+ B
( A+ ~2 ~. [5 R5 {, n; b printk(KERN_INFO "LED unregister!\n");7 H h3 c! q+ u- k2 r
}
~% x( M! H& h9 s1 w7 Q5 N, z; l; Y7 k
module_init(led_platform_init);: O8 { z3 `! T" l; _7 l
module_exit(led_platform_exit);* u8 n% v, N2 y, T
- p2 ^5 y% \9 w* `MODULE_DESCRIPTION("Led platform driver");* W; I5 J5 W' K, h: [, t
MODULE_AUTHOR("Tronlong");' ]2 M- \! o" ]0 n" k
MODULE_LICENSE("GPL");. L. e& H8 N5 a1 M
" C3 p3 ]/ ^5 ?9 t
|
|