|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 d4 J2 j$ k) d( e. A) b#include <linux/init.h>; F/ L) a$ M3 B! U
#include <linux/module.h>
+ v' [& Q2 T; Z4 F" a#include <linux/kernel.h>
( p& F& S( J: u* u#include <linux/types.h>
1 c( { r( B# T: }6 {% i6 h#include <linux/gpio.h>! W# y0 Q: I* h# f0 C
#include <linux/leds.h>
" v" T. l7 f' U" n3 B7 B( ~#include <linux/platform_device.h>. v5 C0 Q! V4 r# W1 f! ]
9 t& P) s0 a* j2 K4 Y/ J
#include <asm/mach-types.h>
( \0 a4 Y- I( i/ w# d8 w7 c' y. y#include <asm/mach/arch.h>
1 w( i4 t: k" k, X: w, F4 J#include <mach/da8xx.h>
+ H5 D3 O& l4 a6 _7 F/ ?9 e#include <mach/mux.h>$ t8 o8 D2 q1 }1 |. ]
d, Q7 }! B2 z5 B/ y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 @6 H' i# N: [% k6 c' p, z
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ d- A P, w% C; f
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), ?; T' B( P9 O, b) {' b& u
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 S) m4 E( `/ B3 d: w0 a+ R
7 F& z( E3 q% d& j- P6 Y/* assign the tl som board LED-GPIOs*/
; o# S, B7 `+ F: o' q2 Mstatic const short da850_evm_tl_user_led_pins[] = {
0 x4 m' F6 y- C( W# e7 ?+ w+ X5 L" b /* These pins are definition at <mach/mux.h> file */
& m* C2 R" _; P DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
$ n9 ^" y* k' W& s7 V -1/ { H. Q2 d4 m, c/ y3 |
};
3 s+ i% S: I4 n
9 T$ }; l; ?/ ?5 D$ g7 Qstatic struct gpio_led da850_evm_tl_leds[] = {
; L- i5 q5 A$ ]0 P: Z: o7 B6 O {
6 `5 J6 N' j$ } .active_low = 0,. u) ]% y0 t6 `/ _) N. h
.gpio = DA850_USER_LED0,% C5 h; S, }: b' i* }
.name = "user_led0",$ z, j3 J- u' v: J. K6 s- L
.default_trigger = "default-on",
0 ~7 E1 }+ S4 R! i* O* K },$ i* `8 O9 y& o Q2 {+ r+ u4 M0 Y) u
{; h1 d0 e- s# X. R: Y2 h
.active_low = 0,
8 ? U) H' ^5 I% J1 H, @. R .gpio = DA850_USER_LED1,, S3 n4 Q, P K; j" T
.name = "user_led1",
9 ?. r: h5 F; l" l* X .default_trigger = "default-on",
5 l3 I* [6 E. a4 Q9 a$ ] },
. V8 r* N1 d s, o4 q5 r: i7 m {
0 b% ?' S; W$ s! p2 M j .active_low = 0,- N( m1 r2 C& t+ {
.gpio = DA850_USER_LED2,
. B) g3 r1 Q! E# m, Q% \2 I .name = "user_led2",& [6 F# ~. Q' l& N* l( Y$ O& _
.default_trigger = "default-on",
6 ? x0 b: w, Q4 R2 B! Z },
9 m4 x- V$ V1 m4 u {
2 q" t {7 J2 O# y3 i" h Q .active_low = 0,: j1 Z9 g1 ?' S8 Y" I
.gpio = DA850_USER_LED3,; x+ ~" C5 @) ~
.name = "user_led3",2 F7 i) Y5 U& r" }; R8 c' K9 ?' X
.default_trigger = "default-on",7 B" U% t' d; U( ]6 x
},: M7 V" \' S+ `7 ]$ U
};! k' u# Y' z$ {# V
- X7 m0 W1 l5 Y0 n3 r5 `( sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 `& y$ ]; l* f g; d" E& ^
.leds = da850_evm_tl_leds,8 b" c& Q: N" {
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
2 g4 ]3 e! U4 _+ Q% t};+ }% V4 g' @2 _' ?, G3 I' @$ x. t
5 S, p, y4 } \. @) }
static void led_dev_release(struct device *dev)
+ G4 `& h+ B+ p5 X( E1 L{" ^" O3 h; }, x% C1 x2 |
};+ c4 B$ }# Y1 }& V% k) `
) F. j" j4 l4 }" s1 D! Lstatic struct platform_device da850_evm_tl_leds_device = {
4 K6 ~2 {' }) ^5 Z$ V .name = "leds-gpio",4 ]6 ]1 z3 z% P
.id = 1,
0 E$ o) J4 p- K1 D/ Y! M6 F .dev = {/ \6 a8 A1 E- Y
.platform_data = &da850_evm_tl_leds_pdata,
' N% C h! D2 F/ C. ? .release = led_dev_release,8 ]* A- z3 M8 a8 Y: k! F
}
2 O8 p! X; }6 _8 T7 `0 g};
3 b' q+ u. o; s' T U
/ L: R. O- N/ I. `5 O. @static int __init led_platform_init(void)
4 z7 z( l4 U1 E4 z" m# t{
: I) G1 H# N* f6 ~2 b int ret;
, ?7 m, T; C+ v7 M#if 0. o8 F! K' [$ y) y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); j! h- o, |5 Q
if (ret)( `# y7 S/ o' J1 o
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 m8 ~; ]. \# o* Y "%d\n", ret);7 f! g, ^% y T( \
#endif
! }8 B, ]7 l& I ret = platform_device_register(&da850_evm_tl_leds_device);
8 {" @* s' H4 \ if (ret)' u( u: l% ?/ i5 v% f/ I; a
pr_warning("Could not register som GPIO expander LEDS");3 o: ]: f( M3 v# |
else
' y* C+ R9 @0 ?; L7 v' @ printk(KERN_INFO "LED register sucessful!\n");
* `) l8 W1 Z$ U1 b' W! Q- D. d1 @3 b* ]8 j
return ret;% D" O0 _8 ]1 Y2 R p4 H/ G
}
9 p% D/ x6 }( j1 M, K- W+ u# j7 K/ r2 L1 M( S2 D
static void __exit led_platform_exit(void)
$ v/ B3 j6 |& Z' G1 x. L2 {{0 h H! B4 n# I. L. C! E7 D
platform_device_unregister(&da850_evm_tl_leds_device);+ t1 G& i( S3 u/ @
0 F, L& q; a" c7 V3 C. B1 b printk(KERN_INFO "LED unregister!\n");
: ]$ B0 L. _' p# r}
4 Z. x3 D, H) b K4 a8 f+ b
8 N% g3 }' r% M% x$ wmodule_init(led_platform_init);
/ b- Z( n& h; ]) Z4 Lmodule_exit(led_platform_exit);
' @$ N9 ~1 ~- c9 O8 X4 K- g# Y0 P# e4 F" A5 Y7 N# N: Q
MODULE_DESCRIPTION("Led platform driver");; L, V' n3 [8 R0 V; Y
MODULE_AUTHOR("Tronlong"); u7 s' N F( a) D) @
MODULE_LICENSE("GPL");
9 M0 k7 Z8 o# m. K2 P! R
4 u- @% [# V" `6 Z a! `8 q3 X% k |
|