|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 ~( S2 @6 \$ Y9 w# I: g- M2 L' u! |#include <linux/init.h>& a/ P! B7 F. R+ ? q+ e
#include <linux/module.h>
. G! d$ `$ l+ H% J N* U#include <linux/kernel.h># G- q3 I" H9 `0 \" n4 l2 H, p" ^
#include <linux/types.h>
3 {: \! H+ m$ Z% P% z4 I# p' X* `#include <linux/gpio.h>8 }: H; m) V" N. A
#include <linux/leds.h>
3 h! d% F4 Y% X#include <linux/platform_device.h>* t1 {3 n0 S9 V7 k5 v3 M
# J( D" O W2 r/ s#include <asm/mach-types.h>
/ x2 \* i) N; y" r% N' F#include <asm/mach/arch.h>
- i; \, A' t j3 j8 ? e#include <mach/da8xx.h>5 e: o8 b2 }) f% a8 Q/ O
#include <mach/mux.h>
( R2 } S: p6 y1 ?& ?
9 |5 B; D: W6 m0 U- R! X% B#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 E/ e8 S9 L0 A% w' P% K#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)& E% ^( N; }: c
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
x! Y& \' g, y! a#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" F6 K, p+ R, Q- q; R; Z+ Q4 c
) {. [+ c0 q M/ C) ^: c( u/* assign the tl som board LED-GPIOs*/ J- k3 n1 V4 Y' z; x
static const short da850_evm_tl_user_led_pins[] = {
2 s K2 c2 a8 L5 W7 F E" g /* These pins are definition at <mach/mux.h> file */
1 v m ^2 M4 X5 U5 Z DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, R! t9 M" j7 F) w2 P -14 s2 c8 p" v8 q- W. ?2 z4 L
};2 [1 _) l& r ~7 |5 G# G+ S
- O) u3 O, c+ n" g5 X$ Xstatic struct gpio_led da850_evm_tl_leds[] = {
3 A2 r* m, d5 O3 T# N: |& i {5 ^' i! ]) |, ^ O% X4 u; Q
.active_low = 0,
. e; G h. n- X( T .gpio = DA850_USER_LED0,2 p' V; |4 w/ s; v' [
.name = "user_led0",
& X2 m0 V5 Q: F& ^0 P .default_trigger = "default-on",, o7 |+ A3 _; X0 S0 u7 H8 o
},: ~. H& D5 _$ G$ z. p
{
1 c: E$ b: h' K9 t6 W; ^ .active_low = 0,* ?6 U3 q1 U: W9 P; ~. l
.gpio = DA850_USER_LED1,
- s" k4 {- n- b6 l .name = "user_led1",
& _/ |# d0 S4 o. y# H3 O .default_trigger = "default-on"," F3 x, ^3 u1 b; C2 }' u }8 m
},+ [9 V! r: q5 k) R9 x
{" w6 x9 d9 M1 U7 R3 S' ^+ M q
.active_low = 0,# y3 ]' n: o, J/ X# e( i
.gpio = DA850_USER_LED2,2 @ C+ z: c. I
.name = "user_led2",
# }( s* S: i9 `4 H! z .default_trigger = "default-on",% v- E) L/ |% ?) ~+ }# f' Z
},
8 `7 l; F- S4 E2 M {
" o; `0 R/ Q* D* Z$ n .active_low = 0,# p; t1 j& A9 _4 {/ \' k
.gpio = DA850_USER_LED3,
) d/ {/ Q$ ]* v" I- P! [0 g d8 v3 f .name = "user_led3",% r4 j- b. X6 b4 r( P% O
.default_trigger = "default-on",
' I8 y( B% B: _ o8 c& k) I5 ^1 h },; S0 v2 Y2 _' Z6 R2 ^6 d
};
1 K- N6 n; Q; m/ `) V% }( j) _
* ?. O0 R7 _5 S/ o9 j) r) s% ^static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ Z2 t. j8 u6 e0 U% q' ^ .leds = da850_evm_tl_leds,
l# G# R- F# o9 s+ @" _ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
+ H( ^$ ]7 ?% v2 D$ G0 u: p0 d};
( ?4 {, T3 p! @/ K$ n, F
/ Q' z0 @, B) Y5 _8 M8 F2 Fstatic void led_dev_release(struct device *dev)
' F' O/ }5 Y' r4 ]+ y7 X: K{
' I2 \! H3 f7 p/ x};6 N% l! i- M: a% t" G p0 u, r) i
) m- N0 r5 q5 T1 O7 u3 z: Jstatic struct platform_device da850_evm_tl_leds_device = {( ]: J& K) p: e; G( x
.name = "leds-gpio",$ a7 [" C8 C: k2 s% ? F
.id = 1,
) W: o' l( j5 U w" K9 G .dev = {8 z: @& Q! A9 w! U2 k# o
.platform_data = &da850_evm_tl_leds_pdata,' n+ |' j. N) H: \
.release = led_dev_release,9 [0 D5 `' U9 E8 Y2 L( A6 u5 E: A
}( n) K5 }. D5 v6 N1 o4 {& r
};) v6 n; j; @1 c- Z" W
8 t7 D5 Q- M! l' O- k7 O M+ o* o
static int __init led_platform_init(void)! V _& t' a! S5 e
{* g. d0 x0 N2 L* C+ t' ]
int ret;. G8 L) Y: [8 k6 C: d% {( Q, a
#if 01 F- _! l/ W# Q5 N: ?1 I6 S
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
8 Z/ h" @' ~. L1 i$ e if (ret)# E1 y' u5 E' _
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 r; v+ m6 l# f& k& ]( b
"%d\n", ret);& D. c. U, T7 V+ e, D
#endif1 w- ]. s; s$ x& B: O
ret = platform_device_register(&da850_evm_tl_leds_device);
! w- A4 e |0 q- x if (ret)
0 J' @+ O9 h0 o. U0 p pr_warning("Could not register som GPIO expander LEDS");
4 n# R2 P! G+ j6 X8 s9 w else
. ~8 p1 ?7 @! i* L' D7 U( \ printk(KERN_INFO "LED register sucessful!\n");
; e* k ^( P- E1 c/ ~1 ~& s$ O( ^) [. k
return ret;# f( H A- \* D* Y$ b5 I3 d
}/ @, W/ w9 h. h& V* V% H5 a: h3 b# v
! x5 e' f! h! m7 }# jstatic void __exit led_platform_exit(void)1 R5 P; W2 W" S+ x% P, Z- S Q
{) E6 I# w0 `' w8 ]( C7 |
platform_device_unregister(&da850_evm_tl_leds_device);
5 ?9 Z" e8 m2 L! C( p0 _( y, Q' O/ G2 e8 A( S4 O# O1 W1 j
printk(KERN_INFO "LED unregister!\n");
0 P Z- Q6 ~6 A) x0 A}
O) ]5 s- }6 H/ o) J& ^
1 L9 m$ j$ z1 H8 [ z7 pmodule_init(led_platform_init);" r8 x; I. o, a* s0 s) K4 O
module_exit(led_platform_exit);
( l7 k$ p8 y) r% P3 N
8 z1 a% ~& `& n: qMODULE_DESCRIPTION("Led platform driver");
1 S; _' p- W( A Y9 @MODULE_AUTHOR("Tronlong");" p$ l& S! ?1 F2 |
MODULE_LICENSE("GPL");
+ Y$ F( Z* k" N& c7 D5 Q+ `: J' V
+ S" B9 b' w( |+ w1 ^) K |
|