|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 y" _$ A% t7 L$ R- U1 c" ^
#include <linux/init.h># u( [5 S% a1 K
#include <linux/module.h>- F4 Z3 [. p* @ Z
#include <linux/kernel.h>& c8 i% O$ U9 V( q; E! e/ `" G
#include <linux/types.h>
3 o' P! x% V2 r7 P n# P#include <linux/gpio.h>
( w! n1 d1 a/ b. E6 P3 A9 t/ H$ b8 o' l#include <linux/leds.h>$ W# ^) K2 ?4 Q
#include <linux/platform_device.h>7 S4 x5 T/ ]* r+ k& r
# \2 A$ v# W8 \2 @
#include <asm/mach-types.h>
( K7 x/ T: j5 N6 m2 q#include <asm/mach/arch.h>. C V* E, j! g l5 _' {5 p) s$ z
#include <mach/da8xx.h>6 i# e0 N! C9 F: }3 c
#include <mach/mux.h>; B5 v% m; Z- i( e
( h: J. x2 i" B0 X8 ?% W- }4 J
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: T& L! ]4 B! X- F#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 t3 n( n0 o) W
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1): M% R4 d( w( v: t) @+ ~
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); ?$ H. [! X8 W& W3 W& L
6 K6 S$ G. i/ J: Z5 [1 A# Q {
/* assign the tl som board LED-GPIOs*/
9 @' D; h$ i. y+ z% S J6 pstatic const short da850_evm_tl_user_led_pins[] = {
9 j8 q2 d" ^8 n+ M4 Z- a/ [ /* These pins are definition at <mach/mux.h> file */
9 F# }& K$ G4 {7 D$ @ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) j' S; C5 Z3 Y2 V, ]
-1
$ M A# B! g5 A};
: O% y: O) P& j/ ?+ y# V+ `' ]; }0 T5 C: n3 l
static struct gpio_led da850_evm_tl_leds[] = {! \4 ~/ u9 K$ L% H3 a/ ]" _( b7 P
{
+ _0 B* Q9 v+ T, x, u& I7 b .active_low = 0,
4 o" L" z$ s3 M- b& v .gpio = DA850_USER_LED0,7 K, X' s. b% i8 K# _
.name = "user_led0",
/ q4 P/ m' w b. Z: }+ S& d .default_trigger = "default-on",
/ `: h# l5 ?6 ~: E, R% t2 |. [4 l },, d) ?% ?% `( q1 I2 A+ u8 l
{5 t# K& @; h% q+ [9 n: V8 n7 Y5 c
.active_low = 0,6 k) B" h% v7 Y6 A( V6 n- E8 n
.gpio = DA850_USER_LED1,
; p/ n! |0 K1 l3 W. n6 `% F .name = "user_led1",
. d9 m- V3 D" A7 e5 l) y& a" { .default_trigger = "default-on",) l9 Y& Y5 ?* ?
},
6 [+ a) o+ _+ k# h+ S* W8 T {
9 l) N% k7 \. i) \ .active_low = 0,
$ A& T6 \+ p2 [5 j, P( s .gpio = DA850_USER_LED2,5 p6 Z# {# h* U, h. F0 U# X
.name = "user_led2",
A4 N3 {# k: L- n" N. Y! S .default_trigger = "default-on",
& z) I, M; G+ i5 B( M( q \6 w6 @' V% h },! k8 B; E( o- w9 V3 Z( [& o; ?
{
4 R6 x" k |8 O .active_low = 0,9 T! n9 H. x- U- j& S+ b
.gpio = DA850_USER_LED3,* y0 O% Q: }( H4 l0 {$ r
.name = "user_led3",
. l; s# ?2 b, c! l6 Y .default_trigger = "default-on"," ]7 Y, F6 j0 w% B
},
: s* [# M1 }$ m; K; f7 g4 A};
. B+ q3 y7 y' r; U# E' }( A/ ?$ ]0 R* ~1 v- T( D+ B
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 ~+ {' B* L$ ~. W3 s$ O8 V: l .leds = da850_evm_tl_leds,, Q# ^7 l: t# Q1 @1 H* T" v7 r
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# i! _: N& N: A7 {; Y! D};& G$ p5 ~' ^9 R' t3 v! u5 ^
5 `. @ l6 Z, ostatic void led_dev_release(struct device *dev)
* _7 i- @+ p, D- B$ [/ j{* C' w- O; Z2 w. }0 T/ m. \0 d: q0 r
};# b8 |" r4 F& ] ?
6 x1 E7 R6 v9 [! P: P
static struct platform_device da850_evm_tl_leds_device = {
0 P) p7 |; [3 Q' s .name = "leds-gpio",3 B: c: [1 ]( p' S% Q% b0 J5 x
.id = 1,8 }6 j9 J) { W" Z/ @. @
.dev = {
$ a& H& X9 y- r& v- E5 D1 G- C .platform_data = &da850_evm_tl_leds_pdata,
0 I. H6 Y8 G. v) V .release = led_dev_release,0 O& u4 J2 Y6 |& ?% G# l; }! Q
}' U7 q5 a6 b4 @
};
( e, J1 r0 r6 A
/ E! t; K/ A3 u* z) c9 e1 P9 fstatic int __init led_platform_init(void)6 t) M: o, r5 L( @) w3 K% U. z
{- V% S- S! }6 ~! X2 b. M
int ret;
9 D3 Y4 Q8 s. U* P+ A7 j#if 07 E. ~. C9 [% R3 y: f
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 M `) p2 V1 r; k2 w if (ret)
3 v9 @! C/ F& K3 A pr_warning("da850_evm_tl_leds_init : User LED mux failed :" A# \! n8 p7 O' b9 ?" r6 D, `
"%d\n", ret);
/ ]0 a2 b0 V, ?" S, G#endif
0 P: Q; k/ R( }. R ret = platform_device_register(&da850_evm_tl_leds_device);
/ L. }8 t7 f7 p if (ret)
- g5 b: U% W6 y# h pr_warning("Could not register som GPIO expander LEDS");
5 O2 }5 _# X- [# j& v* v/ o4 V3 h) k else( ^ g# m3 K: p* V
printk(KERN_INFO "LED register sucessful!\n");& S1 S( \- k. L8 r
2 t0 O2 s- S2 h$ O
return ret;, Z) y! E, s3 L, B
}
! Y' ~+ u+ L3 ?3 ?7 K; A0 i; ?# |
: R- ]9 y. u% n2 Y# H+ y/ bstatic void __exit led_platform_exit(void)
. a" F7 M! Y, t U{1 E5 B# ~6 `8 r* G$ [
platform_device_unregister(&da850_evm_tl_leds_device);
U' M- \: Y; J! h4 Q0 a% g
- E; b8 ]. Y/ } printk(KERN_INFO "LED unregister!\n");: Q6 m9 R/ q' {! s2 ?6 V
}
' i7 y% @+ x1 P9 e9 {5 P; \3 t
module_init(led_platform_init);- s6 {+ r1 h2 U$ L- O4 s
module_exit(led_platform_exit);* R. F! K0 @% j1 @: A
! l. H3 W. u2 H' g d- }& U
MODULE_DESCRIPTION("Led platform driver");3 A2 ^. G x, Q' ?( e* F
MODULE_AUTHOR("Tronlong");5 r3 q i! c4 q
MODULE_LICENSE("GPL");
7 n" T& T/ j) P; m/ j
; C3 \' H* } s" S |
|