|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. f- U0 m0 i9 E3 D" j0 x9 x2 R- s. L
#include <linux/init.h>
* `& e5 D: c2 j5 U) K; P7 Q#include <linux/module.h>
) F0 J( |/ j- ^. X, ^#include <linux/kernel.h>* a5 q& I4 _% \( I/ J8 m6 u
#include <linux/types.h>
& n) y& r+ [% i/ M#include <linux/gpio.h>
# V9 D" G3 M! g& v#include <linux/leds.h>! i5 v7 W0 q8 \# w' [ n
#include <linux/platform_device.h>
3 `' D: K: e' ?5 w5 I$ R" J1 ^
#include <asm/mach-types.h>
5 W4 t7 Q! @6 j! }3 F) d* j#include <asm/mach/arch.h>4 {1 B" O8 p6 k- i; x
#include <mach/da8xx.h>7 S% z7 O. A9 o
#include <mach/mux.h>
' K9 D5 S% a& K
- }' d/ ~& c6 l+ U+ d2 S9 J& o#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* x1 v) W0 z ~' L7 X! f; F
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)' ^& v7 [6 D# v! h; D6 e/ @1 e+ o
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' G" c* y, T7 A5 S
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: a1 z* _5 P, F( s/ j$ i
6 s& k( R/ c2 ~3 p9 G/* assign the tl som board LED-GPIOs*/) _$ j% j6 W! k2 [( X& M
static const short da850_evm_tl_user_led_pins[] = {5 w) C6 w+ {/ Q
/* These pins are definition at <mach/mux.h> file */
1 J, p) X6 O3 ]' T& F2 } DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' O u: [/ n8 M" P
-1
! A* j# G; B7 K' o! v! u};
y: d- B H2 k$ b* b9 |" y: c8 y6 {7 G! D* E7 f& w* ~0 ?
static struct gpio_led da850_evm_tl_leds[] = {7 O3 P, {: G) D9 f/ P
{ r1 t4 y8 g. N! N( N
.active_low = 0,! W* N+ p3 K' J
.gpio = DA850_USER_LED0, }9 m4 h7 F: f% u" e
.name = "user_led0",
+ G/ _9 M4 o8 _, V! ?. N9 B, A .default_trigger = "default-on",
& V! D- d) b' R: E. O+ @' e }, u9 W, ~+ X1 A* {3 P0 d; h
{: M0 k/ d' y( G6 o# j
.active_low = 0,
6 j, F/ d. d% ?8 c+ r: J8 i .gpio = DA850_USER_LED1,- M. q# y- I" x0 U- d$ l/ e4 W
.name = "user_led1",
2 R2 v* g) r# y7 K8 e .default_trigger = "default-on",- v9 \; i8 i4 d
},1 G; n9 r3 z4 j0 }; {5 K
{9 F0 K; O) V' B# E/ T7 @
.active_low = 0,4 Z$ t, N! _0 B# A* X
.gpio = DA850_USER_LED2,
/ z$ k+ {0 F2 I! n' n .name = "user_led2",/ U. J9 o) W, ~5 D
.default_trigger = "default-on",7 r0 t2 a" }9 o1 A; b
},
1 i, X8 p7 c4 l) J& z) _ {
6 ?1 T# G7 v+ g& N$ T .active_low = 0,, f! U( F" D- O8 L5 `7 I1 C
.gpio = DA850_USER_LED3,1 Q" e4 w' H! y! z
.name = "user_led3",1 `; W) j+ S2 {3 ~0 b0 U
.default_trigger = "default-on",
& x7 E u2 [& U7 w },
; A9 A C+ ?5 E6 W};" y) B5 i) I, }9 R# n W% n
! S! u. i" B0 \. t- b1 Lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 ~1 c* m+ Q# E3 J3 N .leds = da850_evm_tl_leds,5 o) p9 G1 r) z& X% s2 ]! u, v
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ J. z$ f8 l, L% h4 `
};" G2 n9 p; O( X) C; Y) j! O
8 i8 V2 d$ {. e
static void led_dev_release(struct device *dev)
# d/ Y# _8 h* c! B' @{
' d) Y. [9 t: v: o1 w( c};
! B5 F9 Q. B: D3 M- v5 k8 g0 p# u1 N
. C8 `4 s* x, n3 _: r Tstatic struct platform_device da850_evm_tl_leds_device = {5 V9 r4 g+ z0 j8 l2 m5 L
.name = "leds-gpio",
( ~0 d+ k3 w* Q; U" ^0 | .id = 1,) h8 G' M6 \7 A5 H; V
.dev = {
6 X: m1 d3 [" }& H .platform_data = &da850_evm_tl_leds_pdata,
$ `, Y9 B) M: h4 q; a5 s/ i/ ? .release = led_dev_release,( z$ y7 l. J3 j$ Q" ^
}
- U, J- Q+ v% _0 w% i. j};: f; A$ X) G# b; t* p- P
$ G5 m: _0 l Y: }- N
static int __init led_platform_init(void)7 M- C) M8 }- l. y5 B }: w/ ]
{
# ~9 J' F3 L" \$ E/ d/ n int ret;
" o# \, y' c" ]# N#if 0" [# a2 u& o1 X- Z" j' f+ c; H, e) K% d! U
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 Z2 ^6 I( N% K( e( }- Y# H, T2 A if (ret)
! G( Q% P/ }" ]0 ~- y pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ y, V8 y, h4 t% Z" Q/ v
"%d\n", ret);
9 ^0 E3 F* l3 n% ~% N5 o; O#endif
8 `1 ^% f+ n+ \$ r% }+ m9 R$ ~ ret = platform_device_register(&da850_evm_tl_leds_device);
, A8 E Q2 Q9 H5 b) X if (ret)
0 Y; X r1 G) q9 m/ @& h5 p pr_warning("Could not register som GPIO expander LEDS"); _$ j) \5 y9 u/ F" L8 i4 o5 l
else
4 F! S8 X1 F1 N; M1 a2 w2 v5 L printk(KERN_INFO "LED register sucessful!\n");
2 P6 z/ h' I1 ~: S9 I8 m. N; W2 p7 Q5 d- P9 i. |& z, g
return ret;
: M3 B% ^( T) b) O4 X}& _; p2 P! }9 |$ m, d$ P
( M" y& A; Z, J# _, H
static void __exit led_platform_exit(void)( C+ L) Q! @- e6 w" b
{0 \! z* W/ r+ C& J0 W' |1 u# u0 A- \
platform_device_unregister(&da850_evm_tl_leds_device);9 f' w6 \; A- S; [0 i! x" g$ Q
- B' b+ ^; Z6 O- e- s printk(KERN_INFO "LED unregister!\n");- v2 u. I' N8 p0 B8 {3 r0 x
}
; v9 q7 e4 z$ C u6 }1 b( ~- L
7 d9 ]! t1 O# f: _. A1 |4 Omodule_init(led_platform_init);6 v" v! j0 a- L$ [, O0 E
module_exit(led_platform_exit);$ \' r* `7 i; j5 u
- {4 c4 U4 d! a9 A+ _MODULE_DESCRIPTION("Led platform driver");
* t0 D% |" c. w* n0 ~- g/ iMODULE_AUTHOR("Tronlong");$ E5 p1 U8 ~. H
MODULE_LICENSE("GPL");5 s9 [9 G+ T* |; r1 g% h2 H- d
# ]4 k8 ^9 | m7 \
|
|