|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% j8 N! `& H! t% j3 P" f8 C; A
#include <linux/init.h>& |; F" r' R2 y, c% M, S
#include <linux/module.h>
8 E9 Z( G+ N9 J# H* v, Z8 ^#include <linux/kernel.h>, i" ~( s; e5 ?8 E
#include <linux/types.h>' h4 `9 T; X! {) \0 Z9 U" k2 s
#include <linux/gpio.h>
+ I' U- j, o! o# M#include <linux/leds.h>2 Q& R1 U1 l! B% F
#include <linux/platform_device.h>' d; p; _: b' s
# p2 o* r q& A0 t#include <asm/mach-types.h> e1 s+ F! H# M4 [2 b1 s
#include <asm/mach/arch.h>
; h G- u# Z+ x' G; ~#include <mach/da8xx.h>
% I* C5 S+ L$ \- Y: m* t- f#include <mach/mux.h>
0 S, O& t, `$ a* o4 A) S7 M. n/ r$ ]/ ~
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' ~ x& [/ ^- r0 C4 B1 Y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 h7 w0 P; Y# ~; r" A
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 t" s+ v& z& ?, ~3 _4 V
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)% H1 k2 |- w) b0 X7 G5 v
8 u# T. y* C2 ?
/* assign the tl som board LED-GPIOs*/) Z" |' R8 H! {5 d6 m
static const short da850_evm_tl_user_led_pins[] = {
, a+ y" T. O/ Q6 J7 Q5 d /* These pins are definition at <mach/mux.h> file */
? c) [5 Y/ N9 Q5 U8 X DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- ^) X" e1 S6 n1 ?- p9 h
-1+ E7 m+ Q" F4 V% L& h+ A0 F) l3 h
};
" u {0 `; k9 g, A6 q' ^. \# [2 v8 J5 T! d- `9 P! P' L1 {2 n
static struct gpio_led da850_evm_tl_leds[] = {; R' Y, q/ I% g( U0 A& V( K5 A9 ~- E( k
{
' s5 b* z0 v* Y0 S .active_low = 0,/ H: s% O# c4 B" D8 a) w, a
.gpio = DA850_USER_LED0,
8 j$ `6 o& Y* \! z+ X& N .name = "user_led0",6 V* q0 B& ^2 l. Z
.default_trigger = "default-on",7 O; Z0 r0 U! y: W7 z
},
6 Z) {% m( p# }1 ?0 l3 a# g {
7 F( ?2 u) N& u" o5 W .active_low = 0,$ j, ^* ] B7 v0 w4 B
.gpio = DA850_USER_LED1,
. \* Z9 Y* o" s N" m .name = "user_led1",
0 J/ \2 m% J- U# Q9 ^ .default_trigger = "default-on",2 ? j& A, K1 x; c. J+ O2 W
},
( ~$ C2 c8 J$ t {. O3 h4 T8 X0 N$ |) O( K
.active_low = 0,
+ y" [4 p0 X7 i5 ^ .gpio = DA850_USER_LED2,5 k0 h- |, }" G" M
.name = "user_led2",+ b4 u3 }& h* j: E7 v
.default_trigger = "default-on",% H' @% b' o$ Z2 b% e% P8 H# G
},
- j* ^7 Z2 m" y" B {
" Z9 O7 J/ d6 z, e .active_low = 0,
4 d# _* S6 w, A6 f .gpio = DA850_USER_LED3,* E2 L; I1 A- q9 f0 h
.name = "user_led3",
# H, E6 ^& W; ]! p* y+ z .default_trigger = "default-on",# `/ U t$ w$ d/ |0 `
},
% I+ @; C e+ H# L4 p- e& G0 W};
4 G. X1 Q' _$ |4 @+ f6 O' c! b
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% q7 B. ]+ Z& p/ n7 S .leds = da850_evm_tl_leds,
( l( { w q2 S/ ] g .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
- w, R) U# _, O) T8 h};
' Q- r4 C" w# V& T: O
8 F* O8 o' E6 kstatic void led_dev_release(struct device *dev)
. q& `3 n: e8 l9 h{, }3 A) ^8 B/ L' i# u" p
};+ N2 z" J$ |2 u2 h1 S) r
4 e0 @. L+ u4 N& m# P3 G
static struct platform_device da850_evm_tl_leds_device = {5 B+ [) b4 \4 O' p8 I( S" y" M; M4 g! P
.name = "leds-gpio",! [( B' b' C6 W
.id = 1," `7 J4 U* I" R1 r* N: |
.dev = {7 `) S3 c* H! N; [- ~
.platform_data = &da850_evm_tl_leds_pdata,
0 h+ i8 C* Z: C4 I .release = led_dev_release,
' W% p) A3 t W3 F J' J }/ [( W: C' u9 Z# i4 A& S
};
- n# A8 c5 K; z0 H1 ]& m; e
0 R4 P) T& o9 i& v5 c8 u/ g% ]static int __init led_platform_init(void)
0 D$ I+ Y1 O1 v{4 ~9 X) K; A) C5 {0 z# G
int ret;& e! S3 K! x/ d g! R
#if 03 I" [; f1 B% r8 ?" i
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
Z$ u! B8 l _# d0 W* j+ u if (ret)9 [, H ]# b0 A. @
pr_warning("da850_evm_tl_leds_init : User LED mux failed :") O4 e% Y" ]5 |# x1 S- K( I. p
"%d\n", ret);: B# q+ s0 x7 ~ q
#endif
" z' F( [; Y$ ?7 n& f ret = platform_device_register(&da850_evm_tl_leds_device);) V1 c0 U/ h& R" e
if (ret)
5 u; d$ g( u7 p4 m: T pr_warning("Could not register som GPIO expander LEDS");% J2 F" u* T0 Z; A
else
8 f/ L' f3 P" O" D8 m' D2 Q printk(KERN_INFO "LED register sucessful!\n");
: q6 D3 t# B% Z( M0 t \
* c5 ^$ z& Q: v, F0 d+ m" A( h return ret;/ f4 R8 z: U4 J4 o2 D# y" ?
}
" T1 q( n7 q( Y; }! y% d9 x# x/ r5 f+ I
static void __exit led_platform_exit(void)9 Q7 T$ X4 j3 W
{
. N# c9 d+ A# x# A1 w8 x5 D0 e platform_device_unregister(&da850_evm_tl_leds_device);
5 o' ^3 {1 C% f k. C$ p9 n e3 N
printk(KERN_INFO "LED unregister!\n");0 @* k% D* b a3 I
}8 n; Q4 I; e, z, y0 g3 v8 `
# p7 z) D4 b3 B. {9 P" bmodule_init(led_platform_init);' b% @# o i: m/ |: i
module_exit(led_platform_exit);
: u& k- _+ F4 |) V9 ?0 o. [ x" E
$ u% [( n( q- zMODULE_DESCRIPTION("Led platform driver");
/ a. J8 D: o; ^7 J) NMODULE_AUTHOR("Tronlong");, i4 O! ~& u! M" r1 `# x S% ]
MODULE_LICENSE("GPL");
" r- U) _* n9 H9 p) b: n8 J7 r! D2 v) M) I) p: ?& ~
|
|