|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 {4 ~9 M8 ^ [$ u, K) f8 A, t
#include <linux/init.h>
2 n, _: D3 v1 L! W#include <linux/module.h>9 L" A0 e3 \2 a3 \4 b
#include <linux/kernel.h>
' a; V. m$ u2 @& f7 c1 q#include <linux/types.h>
" W7 v) C7 m* v2 B7 K7 W( H3 H, J#include <linux/gpio.h>
* O; ^- M& d4 A; U# a* x9 O: m* m. z#include <linux/leds.h>
% N `0 ]: L1 B5 z$ Z#include <linux/platform_device.h>
+ H& }3 n* q" _3 y4 L: d6 e5 \, j3 R4 ^7 ]2 S- u! P
#include <asm/mach-types.h>
* j% N5 l" \0 P' U#include <asm/mach/arch.h>
; m0 Z! k7 m% [5 z5 O#include <mach/da8xx.h>
, ~4 ?, K1 t* e8 n#include <mach/mux.h>6 G5 l: b& ^5 V
4 |: F/ L9 ~" u6 k8 a1 Y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
# k0 T8 ] _9 T \% @# f" i#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 h$ N. f0 g0 h$ h
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
0 C8 z% r4 b1 E# E2 O& P+ p; g#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
$ A# q3 |3 Z# }( o W
! ?& k6 q6 D, a$ K2 X/* assign the tl som board LED-GPIOs*/0 ^- s0 Z6 M# w+ D ~* r# C
static const short da850_evm_tl_user_led_pins[] = {
0 Q* t: R$ `+ H2 ]% |1 n& G! _ /* These pins are definition at <mach/mux.h> file */
v2 E6 k- `9 z; V8 p# } ?" L+ Q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
& m! A- |: h3 m -1
* u+ i* |* j. f2 V$ I6 h};
1 P1 _+ K3 f( I9 m( n" y. z7 n* ] u6 m
static struct gpio_led da850_evm_tl_leds[] = {6 c2 X0 Z& L3 u: S5 y' ^
{$ Y# G7 X. r! C
.active_low = 0,
- f$ G) p K; Q8 ^* ~/ D' ] .gpio = DA850_USER_LED0,
6 M6 X9 B) K' S2 {9 X .name = "user_led0",. I9 j: p0 g' @/ T7 t
.default_trigger = "default-on",0 v+ q* v5 r3 X# @3 N
},
+ {' `" o* z6 h6 }. u' e {0 m5 W/ S! k" s) b
.active_low = 0,
$ z& S5 }9 A8 ~; G' o+ J) H .gpio = DA850_USER_LED1,
- c4 B: t: k7 r3 J1 T .name = "user_led1",+ o% @$ m4 N/ H T8 ?( Z( m+ X! p r; i
.default_trigger = "default-on",( o* i2 t; {: E: q8 Z5 J5 Q
},+ Q6 `: z$ O0 u) ^( j( t
{
# q/ t3 B4 G5 K- ] .active_low = 0,$ x6 O9 \7 W$ E3 \3 r) g o% i; p2 Z
.gpio = DA850_USER_LED2,
6 H2 v2 e" S C; R4 C5 Z .name = "user_led2",
# Z( L9 ^% ^ L" y .default_trigger = "default-on",
9 E. S, l4 y2 p$ J9 ~# T9 k" S },3 Q( ], ]( }0 K6 Q+ ?
{' p; q! Z$ {" }% J2 E5 z" C
.active_low = 0,
! ~; y/ j1 u4 |# k2 u6 Z .gpio = DA850_USER_LED3,
; z- V) h$ Q( W. n .name = "user_led3",6 ^8 P3 N* `5 G3 p
.default_trigger = "default-on",* I: [0 ^' d# @/ X4 z+ ^0 h( Q4 n
},, g6 u1 G+ G4 B( X
};# ?; {: d2 V2 @4 ]
0 J2 Z: F; Q* H) V0 bstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ {: Z; e9 S9 _: U* ?
.leds = da850_evm_tl_leds,
& X8 c- }5 S$ W- W/ u& j( x .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
2 J' B" k6 @ F J};
4 y) D2 _, ?0 {; m- }* x9 Q
0 `! q7 n% W3 h6 \, h% b- P! j5 Ustatic void led_dev_release(struct device *dev)
8 ^) C1 [" W5 o6 r$ x0 n{! M8 F: j$ y# r% S) D8 B4 l5 A8 [
}; ]7 D* z) \, P8 o- C( S) @
8 a# Y/ \* g' |6 _# V: [static struct platform_device da850_evm_tl_leds_device = {" B4 K! h' I a+ h% r6 v
.name = "leds-gpio",
% Q% V0 g* H* S. [1 j .id = 1,
T n: R6 ~! r4 o0 F .dev = {) N7 I: r0 p# [7 e) N
.platform_data = &da850_evm_tl_leds_pdata,
6 d/ Y3 P: n8 Z: {- e* q .release = led_dev_release,, e6 E9 X- Z/ F, N
}
5 J6 W6 k9 |7 s+ N};0 I0 A) | L4 j9 h/ h; [+ s
' c7 z# a5 B: v" H7 R" T0 K
static int __init led_platform_init(void)3 \- y4 ^1 K; j: }4 p
{4 A1 q' ?* \ y; b7 c
int ret;0 k2 B$ }$ P( ?9 J c, K
#if 00 {, s1 T+ f, U4 v8 R' ^
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);7 R K& U& l7 m' H1 N
if (ret)) q% D% ^' U- @9 G
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
4 @/ k1 M6 f' Z* Y! r1 f "%d\n", ret);
- [( H/ e9 [# T9 F#endif( v# w, Y' r+ r- i
ret = platform_device_register(&da850_evm_tl_leds_device);) @" W' r% H) c4 R
if (ret)
' s# ]( p4 r, }! X pr_warning("Could not register som GPIO expander LEDS");
4 V* R/ j4 V9 T, O, Q else
0 U& ]- W* y2 E2 y) B) H' V, o printk(KERN_INFO "LED register sucessful!\n");
1 |2 ^1 s4 Q" [2 m8 R+ t
7 j$ G0 i# l, G" S return ret;6 G7 s. j0 c. ^- c2 \
}
4 c/ C( ^ |: R& v' {+ o: e/ I* U `6 e, j$ O7 _, b U
static void __exit led_platform_exit(void)
/ C) t' v" G, F0 I! B{7 h# p* d" p$ d* E! Z% d3 f+ \
platform_device_unregister(&da850_evm_tl_leds_device);
( o3 X' e1 z3 b+ i i$ H& [9 }3 i5 ~. M/ ^
printk(KERN_INFO "LED unregister!\n");" n4 W/ L2 u# _5 N" V Y6 T; d
}
: |7 H2 d3 V- T& [; Y6 f
# ~( x& j* Q7 k9 Emodule_init(led_platform_init);7 f* a2 a: c6 x
module_exit(led_platform_exit);
9 y0 `. k& r: b7 z+ L
" \. M# R4 Z" R, W9 KMODULE_DESCRIPTION("Led platform driver");& ?' f" C$ H0 W
MODULE_AUTHOR("Tronlong");
, `3 {; ]# U" v. \) d0 zMODULE_LICENSE("GPL");
! R- O0 C" k/ X, h/ |8 A5 A
1 b9 M% s0 p( k. a% N g |
|