|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ z8 R, O# t; }/ o- m5 ~5 M- }
#include <linux/init.h>
, ?2 y* G7 m8 L9 x6 R#include <linux/module.h>
`6 V3 G# _7 b. ~#include <linux/kernel.h>+ k9 P+ Y% W' b t/ @8 r& n
#include <linux/types.h>& L. J1 l1 A1 }- D' H" U6 g; X
#include <linux/gpio.h>
, c: E! \9 u* s! E! y/ `#include <linux/leds.h>
5 R/ `2 Y! o' i/ {#include <linux/platform_device.h>8 }1 s3 ~6 c1 P. w/ d" i, J: `- M/ T
7 b: f1 s: ^, d1 }#include <asm/mach-types.h>
8 }+ F! r! }& B1 n5 p# Q ^#include <asm/mach/arch.h>+ p8 M9 |8 h8 Q0 V
#include <mach/da8xx.h>
% ^8 X: o9 z. K, }# l( y# s#include <mach/mux.h>
- U h& N9 E- L0 h- m- `5 {; E5 W2 L4 x
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 r+ h1 R# ^, M: A) d4 V#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 p8 @) y! m# q# Y! U; p8 L% p#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 t [( i6 p) A
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
$ y- r$ M* Y1 v) H- v- V
t! \1 w, L* ^( j/* assign the tl som board LED-GPIOs*/4 p: H& P1 Q" j
static const short da850_evm_tl_user_led_pins[] = {
9 T: ~. K5 v; h1 I1 }2 P0 I /* These pins are definition at <mach/mux.h> file */2 b- V# u* j5 O S3 [- \+ `
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; K/ N7 @6 d' \$ F; \ -1 A5 S8 k8 C, }, a; c4 Q/ k* Z0 e
};
8 Y$ o: M1 V9 b) A# I
7 v2 i5 G( D) Kstatic struct gpio_led da850_evm_tl_leds[] = {& N: n1 U9 e" o
{
/ p! {9 u7 d ?& ]! i .active_low = 0,( Z( J( S/ z4 L+ y0 N( V
.gpio = DA850_USER_LED0,6 R. d2 I1 Z% R8 Y5 s( z5 B
.name = "user_led0",
& m/ D+ x+ r6 G2 r1 N .default_trigger = "default-on",
+ d/ U: v! C( r% a1 d" { },
) O( s: z5 }8 F. b* E5 L {
% W) r p* _3 p; O1 @, y .active_low = 0,& n3 E: {0 ~1 R9 t3 J
.gpio = DA850_USER_LED1,, {1 @( R# h3 p6 Q) \5 t; K
.name = "user_led1"," g; @6 e4 E8 ~9 E: b0 [4 n% W- H5 }
.default_trigger = "default-on",
0 F7 R0 @7 C* I( l+ ~ },' H6 t- @) t3 {( C- Q' J
{
( e3 y; z! K2 \5 c+ l# h .active_low = 0,
# d! a$ ]& O8 D4 s .gpio = DA850_USER_LED2,4 Z/ ]- f9 r2 q3 c! O
.name = "user_led2",
8 Q: I& `/ |. m; r1 e/ H% r+ B .default_trigger = "default-on",
% n* n% C, x' `! \1 h },- q1 p; E2 f& T P
{
9 B; u3 V: \# q0 n5 h- L+ a' \& H .active_low = 0,0 J3 C+ @' `) A; l" X; f
.gpio = DA850_USER_LED3,
8 ?* d9 u J: [& e) `7 i .name = "user_led3",
2 ~! y0 ?& p, O! y9 j d U1 k* j. t .default_trigger = "default-on",6 [- F1 m' s0 \4 n
},
' H3 t: E' w/ Z! M, H$ l( }};" i# I1 W$ p; S+ I
; M* L+ o6 L* I* `$ Z8 lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& h3 G d6 c2 D0 x7 ?& O# K5 v2 A
.leds = da850_evm_tl_leds,% ~" G7 ?* C4 d+ Q% `, O
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),. [8 e+ y) C: L7 J; V( X
};* L9 B8 A" b6 x F! p% z
( a. d( G8 |1 f: y" |. Lstatic void led_dev_release(struct device *dev)- F4 G; b* `' b- Y# w, U
{9 D: \) T! e; e9 z
};# O6 R, u) ?) L# k- `. f5 i9 Q8 A
0 d: E2 C( j5 B$ i" ~# r: N
static struct platform_device da850_evm_tl_leds_device = {
$ ]2 ^6 ?" _" U .name = "leds-gpio",
- _# h; I; A4 k+ |9 I4 E9 {+ L/ u .id = 1,
1 k$ U& `0 b/ q+ l9 q. ?9 E3 e2 q .dev = {
4 T" O* y6 Z8 W' _! ^. e0 W .platform_data = &da850_evm_tl_leds_pdata,& a# F- d4 e* X9 r% t5 }1 m4 N7 V
.release = led_dev_release,& T" _* k4 N: z
}
3 X9 F. x' u# g v};
# u; ]: V$ \9 S- ?0 i
7 y& K. L0 A& Gstatic int __init led_platform_init(void)
( f0 n; H1 q4 G! D% m{8 t' `) {* Y8 E* J1 K
int ret;
% ?8 {% _4 |1 ^7 k1 g#if 0& E' j. w) f' d4 A
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. K1 X3 @+ b" ^0 I( v if (ret)
) T- F7 t4 k2 c' U( y7 p pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 @ [8 L* e7 b* Q- X! y "%d\n", ret);+ o( F2 u5 b4 U, K3 E* W
#endif
% S' A2 o& ?3 r2 d0 ~5 H3 x. Q& O' m, }% |9 j ret = platform_device_register(&da850_evm_tl_leds_device);
- \8 _: K! }6 X* t+ n- M9 {. W if (ret)/ Z1 I* v( {3 R* s- {
pr_warning("Could not register som GPIO expander LEDS");" I0 V$ Z+ ^! @8 v; F
else# F7 D" d- o$ x* d8 S
printk(KERN_INFO "LED register sucessful!\n");3 ]) F5 R! {: f' z+ p0 J+ U+ O+ ]9 P
( }9 g9 k6 x- R9 o) R; C
return ret;% f* y2 N$ ]1 o0 q) a' g
}8 K0 o! u& C: R: A% h! M
r: g/ j: O: J! J: G
static void __exit led_platform_exit(void)9 d7 k4 H' ^5 N2 N2 ?& x
{
4 B4 C6 F& O" h' n; D4 y! i3 Q platform_device_unregister(&da850_evm_tl_leds_device);
# ?, L9 ^- u" \2 D# ^6 |1 c& A% }. I9 D- e7 t5 P
printk(KERN_INFO "LED unregister!\n");
1 I0 A' n0 T) h+ }* a}
* o; W) Q3 Y( D% W# j8 t! V! O; M) P N, ?7 N
module_init(led_platform_init);
D( C+ N( c' _5 Rmodule_exit(led_platform_exit);
& V* q7 Y, E0 i$ E& ?
* Q2 R% O0 |3 v9 B$ wMODULE_DESCRIPTION("Led platform driver");: y+ o# h. F1 |
MODULE_AUTHOR("Tronlong");/ K# C- ~& a1 q5 I. q0 C. N
MODULE_LICENSE("GPL");- M+ c7 b0 {' }) Q z
' E M% \/ ~. l2 f |
|