|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 t4 _0 Y: _& H0 J
#include <linux/init.h>
7 I# r- V% K) C) b0 R3 h1 `#include <linux/module.h>
! t9 r9 f$ k/ w. w% K: x) t; T- i/ C#include <linux/kernel.h>
4 B1 Y3 K8 |8 C$ ?% P$ w#include <linux/types.h>/ L4 ]$ }7 Z( b0 Y J5 A) L
#include <linux/gpio.h>
( y/ c" y/ x1 H0 I: i#include <linux/leds.h>
% d/ [* \) x4 |! G1 e# _" N#include <linux/platform_device.h>6 s$ |$ I1 C2 t# \8 `* H
5 Q& `; X5 B0 u6 G) Y: X/ q. q7 j3 D
#include <asm/mach-types.h>
: H5 V9 E! o- B/ x3 ^2 |2 c+ a#include <asm/mach/arch.h># Z; u4 z/ o8 g/ }
#include <mach/da8xx.h>0 ]. z6 f; _0 B/ M9 K9 z: Z
#include <mach/mux.h> u2 l; o1 V5 z" A4 o: M5 X
6 _( z& v: K4 u* X% q( E#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) a. W% t1 e/ f, p9 K2 l* }0 l#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 Y8 C' G1 z9 {8 u m$ x
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 j) v- r" b4 _' }
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
$ i2 D0 r9 L8 d7 E' P9 p9 z6 j T; E7 t2 u7 ^
/* assign the tl som board LED-GPIOs*/
* ]2 E) M7 n0 Z7 @6 y3 E$ `static const short da850_evm_tl_user_led_pins[] = {
# e# p1 }/ X: F$ i$ [* _ /* These pins are definition at <mach/mux.h> file */5 z+ T7 r! N$ G1 G7 t, l. v0 J: Z
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" R1 \# R6 }% m, Y" K -18 [! M- W, l# \% Y
};
$ l& H( L U) V1 z: e. v
. O6 W" r; J2 |9 nstatic struct gpio_led da850_evm_tl_leds[] = {
) j1 a" Y/ @8 v5 ]% c3 \& D2 `* |* m0 k0 M {) L. _) i( n! a5 W* m1 c' n
.active_low = 0,9 ^1 b8 L) R1 H; K5 _6 m+ g9 S
.gpio = DA850_USER_LED0,9 ]* p. q; ^& o+ i+ m9 \9 Q% Q: i
.name = "user_led0",: J8 p. R+ p {
.default_trigger = "default-on",
. V9 L) c/ t9 n1 f8 Q9 b },
8 {# |' ^: [7 Y& l$ ? {
! u! u( C; e6 ?! c# R$ K9 T! A .active_low = 0,
+ N7 |1 A$ `0 a. k9 d0 n v .gpio = DA850_USER_LED1,
+ @3 A0 B1 x+ U .name = "user_led1",2 M4 E T& [0 e) X
.default_trigger = "default-on",. k+ g# I0 b* w/ g' N$ F- A
},7 d( v( |" c* }! n
{2 f) ~* D6 q4 O$ ?. F
.active_low = 0,
; n+ Q8 B. z; e( V, i .gpio = DA850_USER_LED2,
) Z+ P. Z0 u4 }/ H .name = "user_led2",
& W4 Q/ P& @3 D/ u$ O& u& ` .default_trigger = "default-on",) O7 N: O' z! F4 Z! G2 e
},2 j8 G' Z/ ?: D9 W, M$ u
{
2 o3 _: e( }# B. Y8 q1 | .active_low = 0,4 J/ h+ o+ z& i7 w) [6 M. H) k7 y
.gpio = DA850_USER_LED3,
5 d+ g; ^4 z6 d0 a .name = "user_led3",
9 q6 t& F7 l! [# g8 {7 C. C .default_trigger = "default-on",2 b2 y2 [: D+ N# L+ D
},' c- O+ y( W6 p8 K* V
};8 e. {3 |. J7 d* ^6 }
# \* {1 z0 Y& N7 X: `
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 V& Z1 U- K, w+ }0 T; @. f9 Z: x
.leds = da850_evm_tl_leds,
& K% S% I! N3 W .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
- n( a _6 o5 h t& { L$ A};
* f' w: h8 y/ o
$ n! O$ h3 w; U" ^& ystatic void led_dev_release(struct device *dev)1 F" g6 S5 r7 L6 {) l. ~) l. k+ o; p
{4 s* a0 R9 R. F+ ]
};
, s! z+ W; S! c! j9 f# _% _9 l; W
3 w1 \- l0 {0 f* _static struct platform_device da850_evm_tl_leds_device = {/ F5 ~' F( l( f: k1 }* w
.name = "leds-gpio",7 Y% T* l; X' q! a) z
.id = 1,
; C9 R. a3 n3 P+ Z9 m7 e" E .dev = {
6 s4 ?% P/ x. Y* @: y% u2 j" ~ .platform_data = &da850_evm_tl_leds_pdata,
4 \. M8 m& S4 E: O3 N; t6 } .release = led_dev_release,
1 J5 `/ ]; M# K' I) _- x' Y4 d6 J }+ B# {9 p( L: f
}; V! u' M: h7 h: W2 y& U
% Y @( z+ Y9 S5 S3 u' G$ j8 a
static int __init led_platform_init(void)
( ^. {2 q5 T9 E9 Q5 W{$ V4 k, q/ w" J& w1 _& ]
int ret;
% L' h* c/ H1 u0 z* F% }5 Y4 G/ I- w#if 0
+ z$ \. q* x2 U ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* {8 V6 A+ y4 B& r0 @" W: R9 o5 Y
if (ret)
) D1 l" z, T& J* Q& i* u1 X O pr_warning("da850_evm_tl_leds_init : User LED mux failed :". s$ z- Z' [. ^- k2 h- t; T
"%d\n", ret);, F; C3 ~( c1 ]; ~9 I
#endif( D7 ] b, P9 \; |
ret = platform_device_register(&da850_evm_tl_leds_device);" t( W0 }" F& D# P1 m
if (ret)/ k; I8 t1 z# I4 j% ^/ U
pr_warning("Could not register som GPIO expander LEDS");7 A- A% n1 t* N+ J9 X0 P% `2 T, K
else( z$ e% i, N; a% | f: c7 _* P
printk(KERN_INFO "LED register sucessful!\n");1 }9 \* k3 J% }% _
' x \7 x2 `3 K/ o9 _" f* V return ret;7 {! s! x5 o) m9 `! P# K
}4 M; D' t! J+ [' z2 D# g
/ k! n6 c6 x' O2 Z
static void __exit led_platform_exit(void)' _: Q: C0 l0 _! K: e2 W% v
{, Z& [* Q/ n; @; W' m( o, c
platform_device_unregister(&da850_evm_tl_leds_device);: L; a R$ X: V- D5 @
0 j" l* N6 x0 B( Y% @) l0 B/ U. ^
printk(KERN_INFO "LED unregister!\n");
! `6 d# r* \% b+ ]( S0 q1 [& ~}
2 \8 O( c7 l/ m
/ i: s4 V& ]2 X6 V- Xmodule_init(led_platform_init);
2 e5 H* c5 F6 l0 Dmodule_exit(led_platform_exit);
" ~8 z9 l1 z' @5 t/ B, c' J1 q( t0 g1 q! z, P, ~1 U
MODULE_DESCRIPTION("Led platform driver");
: z) Y! A( e, o) o8 R: H( VMODULE_AUTHOR("Tronlong");: E7 R$ j: g% _" \, P
MODULE_LICENSE("GPL");
7 n: e! C. v* b- y! G# r& g0 Q1 e5 [# L3 h
|
|