|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& u9 S( z0 D* K6 f. k# u) u% {4 d G#include <linux/init.h>( f% w; t$ F8 P* h& f; s8 h
#include <linux/module.h>1 p1 x) }4 H2 H1 O% t
#include <linux/kernel.h>
' ?7 v' X$ l+ t( j#include <linux/types.h>
9 I' l8 i0 J: Q. T$ A- i5 @# A# o# e4 j#include <linux/gpio.h>
/ @+ c! J1 M ~( L#include <linux/leds.h>
5 Q5 `. H, u$ w; G! k#include <linux/platform_device.h>
: v! Y+ V( L2 L' @4 O0 a4 | A+ @; \* G
# u8 ]% v- }4 d( `3 }& W#include <asm/mach-types.h>5 Y$ d6 r& `: x( `, ~; s) k
#include <asm/mach/arch.h>% J1 z$ _7 s* b0 k) P
#include <mach/da8xx.h>
8 f; i/ i1 v# }% ^& i#include <mach/mux.h>
$ Q& k ? r0 W6 C! X8 a0 K1 N' G9 m* j2 S- Y# g3 O F
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- W! D) \6 j. }- m5 z' H! y9 R
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 \# E* \) @2 q; i `#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- R: F6 g. j- w3 N N) h+ n+ `
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# R+ f7 w) R% [ l' @% I9 ?
/ {' G- H/ V( a* j$ l$ r3 i/* assign the tl som board LED-GPIOs*/
/ f8 y1 t) n6 r+ B9 Bstatic const short da850_evm_tl_user_led_pins[] = {7 i7 q. o% U" H! D( [
/* These pins are definition at <mach/mux.h> file */& r# W+ e/ o5 \ E
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ T! x4 r8 D! F* r* B# g
-1
5 A9 K( J& V% X4 s' d5 q};2 Q& T3 @6 Q- i0 B' ^
, @1 N! P' {" E( u% k
static struct gpio_led da850_evm_tl_leds[] = {4 |$ o* L: C& V. @5 T0 C4 `
{3 H2 O6 W; ]9 X9 c E
.active_low = 0,3 S" N/ N& i5 a( L; y
.gpio = DA850_USER_LED0,
9 i: s$ V6 K: G$ b1 e; J' U .name = "user_led0",2 X% g% Y& A1 M! a. u. ^
.default_trigger = "default-on",
$ x3 ^) }: Q0 ]+ R! R- B" U },
/ m* J3 V8 G& L0 a: p$ y8 a {
/ o& S; H2 w& g4 N: } .active_low = 0,; b6 C! ~- X4 E1 P5 {' R
.gpio = DA850_USER_LED1,) u- E4 ?- h6 |* P1 L) O' S7 a. X& D
.name = "user_led1",% i' s% z, P/ C& x5 F, B
.default_trigger = "default-on",. I( O9 Z- o$ U: Y, w ^4 W# s
},
. H6 M' z7 J& r. M2 o$ d% r m; Q, F {# b% \( B+ _; D7 W" R
.active_low = 0,
5 b% G" }1 D5 ~; U .gpio = DA850_USER_LED2,
& ~2 b/ _3 m# z4 S% E5 t2 \# [ .name = "user_led2",+ R: K$ o8 b1 P p8 L6 q5 G/ ^
.default_trigger = "default-on",
0 [5 W+ t) l! X: O5 h0 A" u9 b" ^( V },% d7 _& x4 p. s" _6 }/ O& a: i
{9 R3 ]" l2 b: a
.active_low = 0,
' I# p# P' Y3 Q6 V% a( v2 m _ .gpio = DA850_USER_LED3,/ j4 }: k' [0 X8 ^
.name = "user_led3",
+ f F( \1 O0 l5 p) { .default_trigger = "default-on",
H- z" s L6 i },
7 n# s; O$ Q: p$ q# W};
; p1 j( f5 L5 a- j6 g' L
6 y$ S' f( I5 c, O: \2 Lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! G4 e0 j; l; p, U .leds = da850_evm_tl_leds,! ^3 _4 m: D- @, c6 V) D/ M
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 N) K3 g8 j9 I/ F+ f) V3 Y6 S1 c: ^
};
% ?; N1 m6 l. v8 g1 v) L. |" m4 q- ?" G, Z& ?8 T0 p4 |# j
static void led_dev_release(struct device *dev)! _; o8 ?9 l6 |
{
7 W8 F' H7 i4 x};
8 ~6 A# w4 r& R( a( T' R
& Y( T7 j5 v4 J( a: }3 X' nstatic struct platform_device da850_evm_tl_leds_device = {7 ~4 k7 W% v, D4 G& P# ? d
.name = "leds-gpio",
) z4 t {: X1 Q* |" N .id = 1,
' x: F7 }. F# z6 r3 P( a .dev = {' ^9 z- U+ A+ i$ A
.platform_data = &da850_evm_tl_leds_pdata,
! i J3 M; q: S2 U .release = led_dev_release,2 s0 ~- l+ G: N- g) O( l5 H
}( m- ]3 Y+ e$ e7 Q3 P; l# V6 e
};
. n$ M2 b" j$ O( L8 x1 L0 G1 n8 k
# ^% {3 F. Y! t; ~9 [& b- istatic int __init led_platform_init(void)
$ R8 P0 L" ~6 y& v{& o" ]( X( Q: x: I" @
int ret;: {% n* U3 d- ]! ]) t& t
#if 0) @# S% Q( w% F% [. U* @' m7 A2 m
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 Q$ k) U- ]8 M6 k: ^ if (ret) o( d0 M" ^, H9 ^7 N6 P- w0 D
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! R+ ]* h5 Y1 z. j! u6 M "%d\n", ret);
: W1 a9 N1 X8 ?; z5 g#endif
; F0 ?$ O0 r: J& C2 @ _1 s' y ret = platform_device_register(&da850_evm_tl_leds_device);
6 V' `( V; V: H6 J: T if (ret)/ L9 f/ u8 Y/ Z0 y( o1 {
pr_warning("Could not register som GPIO expander LEDS");, ~+ }/ e5 I' g/ p. S
else
. H' W% G* ^5 q7 b0 W- r7 ~ printk(KERN_INFO "LED register sucessful!\n");0 N: S" N: [' k, k8 j7 @
+ v. j/ {, i& A8 l D$ @% x
return ret;: r* s" j" e" I8 t9 ~
}
$ m7 ~' x; L* {4 |6 [ v) g9 h$ r* s. d5 g% ]
static void __exit led_platform_exit(void)
m' J1 I* r% a- J& P- i1 t{
+ ?! z3 o/ |- C5 I# j& v platform_device_unregister(&da850_evm_tl_leds_device);8 n( e( c \5 x6 B, R' l9 U+ ^6 ~: `5 [
z+ `* ^; e8 e! ~/ _) p6 U printk(KERN_INFO "LED unregister!\n");' g8 S; F. @4 A- n
}9 k+ O- `' _; u1 X. w# \
5 _$ e! _% m' t
module_init(led_platform_init);
' h( p. ]2 ?; R# H- Omodule_exit(led_platform_exit);8 m( L9 I2 O+ `& F
; v; }* W" U% `3 |! c
MODULE_DESCRIPTION("Led platform driver");
! q5 H1 I- L5 NMODULE_AUTHOR("Tronlong");
2 g3 \4 K2 ~0 H8 `& ?! u YMODULE_LICENSE("GPL");. _& k* N2 Q4 S6 s y
4 F' {& \6 m% j' v; { O- M! b
|
|