|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. M6 A% C2 X9 V4 n' S L
#include <linux/init.h>
3 m9 d2 \( j$ { m! n( O#include <linux/module.h>9 w% O" J6 O& Y
#include <linux/kernel.h>
# a" Q: {+ j. F- j8 p4 E#include <linux/types.h>
5 h S* H+ g" A! k0 D0 I, m; \( f( [#include <linux/gpio.h>* W' g) M4 P; p- h! F- @
#include <linux/leds.h>
4 A% Y: n3 y, {" V) \3 j#include <linux/platform_device.h>' x' n; z" T% |
8 W% f0 {) e# A#include <asm/mach-types.h>
) v5 W+ n0 y) \2 L3 x#include <asm/mach/arch.h>
+ ^1 M- j1 L+ Z#include <mach/da8xx.h>
" B' t/ R! G* Q$ x6 j/ c9 k/ r8 E$ {#include <mach/mux.h>! j, x' y7 h4 b `0 y
0 O1 o9 i- H: T0 N9 Q#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
* `! O% w+ N! H: h& a3 E8 F#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 R) _1 T. D( k8 O& P8 s' Q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
G3 O( y R: h0 g#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)4 [" m1 ^) b2 f5 U: p" x
, d! I( u1 L6 _' j: n! _$ C/* assign the tl som board LED-GPIOs*/
0 a [- g# S8 J6 Wstatic const short da850_evm_tl_user_led_pins[] = {
% w% ?9 K% u6 F6 {8 _9 k /* These pins are definition at <mach/mux.h> file */7 \2 D$ P- e8 G$ u" U
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 Y9 R, b, v/ I
-1/ K& y& x! J7 ~- c1 x
};
$ x( ]* }% Q' B3 L1 h9 W2 I3 T0 y4 i1 H8 O4 ~5 ]) v) ^
static struct gpio_led da850_evm_tl_leds[] = {
+ T/ u; f" h% x6 H$ F& Y3 W) ^ {" m5 T& b+ E; c. a; t* D# q7 e
.active_low = 0,! t1 {0 E) x& z+ n
.gpio = DA850_USER_LED0,
( I6 e z. ^- g) x2 i .name = "user_led0",
# S% e7 O: u& a; z- G& i! y( o .default_trigger = "default-on",) b& c; ?: w. V, h5 a# z
},
1 |5 P4 `3 r$ v1 ?8 i( u x {
0 }- j$ A# Z4 B8 q+ l# z9 _- c4 H( G .active_low = 0,
# ~* r7 w+ ^8 e, P4 B" \" T+ X .gpio = DA850_USER_LED1,8 j* d! z8 H6 A' J$ @8 A" i# X8 O
.name = "user_led1",; D8 L' [9 `, U
.default_trigger = "default-on",; T* s/ y0 P, O& o0 p: L/ |. u9 G/ V
}," ]0 z# Z7 k( y, K! x3 P
{
) R4 C* o9 a* p: u: [ .active_low = 0,
! r4 D$ e3 @, Y .gpio = DA850_USER_LED2,& U: {5 V w; ]
.name = "user_led2", P# l% f r( ]
.default_trigger = "default-on",& {5 w8 I# h# P- `0 ]
},
2 N' h/ K) v9 L: T+ m0 m$ s2 [4 H9 R3 \ {4 F/ Y. d% D4 Z" T3 d5 m0 v+ g
.active_low = 0,( O6 j4 T& E7 u! J' P/ q% _: C$ p
.gpio = DA850_USER_LED3,$ |+ f- J9 \9 k5 h/ U8 h) O& O" M$ c
.name = "user_led3",
* G5 e( Y3 L% E# Z6 g .default_trigger = "default-on",
* V- e, L! g( v6 c },
# `8 L4 A5 b8 u: {};# N+ f3 t* S% h6 \
3 T2 G- R4 J( w* B! k G1 Ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {5 Z# o' h0 M* y) I
.leds = da850_evm_tl_leds,
9 N- A9 H) [8 I% y y .num_leds = ARRAY_SIZE(da850_evm_tl_leds)," U& I! y1 b) \: z
};
/ W+ g: S- n4 o% W0 C8 N& i0 G/ v) Z
static void led_dev_release(struct device *dev)6 V: ?* s4 w3 Q4 o
{
$ B; ]4 h3 Y" _ F% D+ D7 x& ]( W p- z};
7 a7 z9 Y* P& e0 c& Z3 E8 i! b+ Z& x4 d! i8 }. r( Q
static struct platform_device da850_evm_tl_leds_device = {
! L, h3 n. R+ j$ R$ K .name = "leds-gpio", h2 G/ K) G$ g: z; z( X
.id = 1,, S# z; ~! S. O4 \4 f' G. N2 R9 ]
.dev = {
6 r% H; |! _; v- |- E* z .platform_data = &da850_evm_tl_leds_pdata,
% d9 [# ~/ L3 y* G6 V% G' \) d .release = led_dev_release,
" f" @1 H+ I2 t0 r8 o }' w3 I) K% |2 Y' C, Z" a; n
};
& }6 e4 N* [8 v: ^! t3 ]- _
2 I: `( S$ E# V% H- g/ [static int __init led_platform_init(void)+ E$ ^$ c8 i3 d' m
{: x$ E# E1 ?% i: V, @; K
int ret;
' c7 L/ L: [4 l; Y1 g! w#if 0& o$ g, @) [ m! z% w. O: B! y- e/ c
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. v" W$ r) B8 n* v. d" k& l if (ret)1 p! ^7 l( f; u9 t
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% r( f* Q, q+ D& `: Q( J7 X "%d\n", ret);: L3 s. @) [0 U x, L7 ?0 c
#endif
/ R! V2 V, b; r4 ~0 _( V& H ret = platform_device_register(&da850_evm_tl_leds_device);
8 m: u: b4 x0 ]0 M# ]+ U; y if (ret)2 t) M" p6 D0 G& i3 P5 n
pr_warning("Could not register som GPIO expander LEDS");# T& o- G! ~9 X& O2 m% R1 I n
else1 X' d+ [, x1 Y* s2 d! H$ K$ z
printk(KERN_INFO "LED register sucessful!\n");
6 v% T- Y) {9 ~2 b+ P5 h5 Y# H4 t. }. T" m4 U* e) r0 P' h
return ret;5 i$ L: D% k7 n! g! B( e
}
4 K) b* @( y5 c; f
/ z V" m, V( X7 l( E/ Vstatic void __exit led_platform_exit(void)
4 F+ I2 k& u, l6 W{
, e! Z$ e `4 _3 f/ B- ^7 W4 E platform_device_unregister(&da850_evm_tl_leds_device);
2 Q! L* R$ y/ R% n$ |) Y* p
( {! U8 H9 _; ~7 ^. |- E5 W( l printk(KERN_INFO "LED unregister!\n");
" R7 w4 e6 Z/ j, c}. {5 R3 U; ~2 s. x/ K2 x2 f
! V7 S, ^8 Z3 m
module_init(led_platform_init);4 d( V; V T& a/ ^
module_exit(led_platform_exit);$ B: y9 `" ^: L1 {9 p
' W4 `0 ]$ H0 g
MODULE_DESCRIPTION("Led platform driver");: y) w- l9 R0 J8 q6 H6 t" D# j
MODULE_AUTHOR("Tronlong");
# e& C% \( b# k9 g( y) z5 S OMODULE_LICENSE("GPL");
& O0 N4 D. G& A- ^" N! W, {/ @. Q; `( h1 z ?# d0 b5 p* E
|
|