|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 i4 J5 g" t4 g: V/ ~* q) |#include <linux/init.h>- i' f& l B! \% S2 k% c3 J
#include <linux/module.h>7 \5 L' W9 ]1 u7 _6 f4 N" Y. A
#include <linux/kernel.h>; ^: a3 Z: K/ P
#include <linux/types.h>) Z6 S1 `- L) S' H5 k' r! U9 E4 X" I
#include <linux/gpio.h>9 Z+ E- l1 C: n$ C9 W& q7 }
#include <linux/leds.h>1 ~0 T6 p5 L' Z& m( w7 Q) K! D" r
#include <linux/platform_device.h>0 b1 ?0 g5 _% i/ G' h
/ |% d6 \: o* Y3 v
#include <asm/mach-types.h>
8 n( ?. k4 M2 S+ v" R9 \, u- v#include <asm/mach/arch.h>
5 Z/ C2 A, w8 F9 J) I6 b% p#include <mach/da8xx.h>0 K1 x O, [4 W; l
#include <mach/mux.h>; K, ?9 N! ^# N2 J
5 l. K7 u* R6 d7 I* C#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! P; F7 y, F$ ~4 g#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ U2 W9 ` j4 Y6 _
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 h7 l3 z) r O# c) g; t$ _& C! L#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" W; \% y# m- i
, p W7 P W# v/* assign the tl som board LED-GPIOs*/
/ A# B/ R) `7 z4 `- \' P7 S4 Y. ?static const short da850_evm_tl_user_led_pins[] = {( g: k8 i- w' z1 z7 H
/* These pins are definition at <mach/mux.h> file */
8 d3 z u( V) Z+ B$ k( S DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 K# Y$ m7 f. E$ k) G
-15 a& b7 B5 B& R" M, {9 H6 I" r% m
};8 v/ ^1 L9 O1 `9 E6 b5 ?9 o
( t. p1 s! S$ W+ o8 A% n @9 Cstatic struct gpio_led da850_evm_tl_leds[] = {
" }( ^9 o/ T" ^# F/ C& Y5 X {
% Z4 b4 }/ i" D( i .active_low = 0,
- U% l. D0 R. g5 r% c2 \ .gpio = DA850_USER_LED0,( P \/ B) U; F! e. [
.name = "user_led0", u# D5 z' f! C- O9 z; w
.default_trigger = "default-on",
9 E' y/ u3 g8 F# I: M5 t8 s$ v8 I },
% ~! a7 Y: s$ T+ p {) J, a) B4 s, x& O
.active_low = 0,
7 {* }( J( n0 `) ^1 I$ U8 q- I .gpio = DA850_USER_LED1,9 _7 c: L; M0 }
.name = "user_led1"," U8 K& F: C+ R: F* M3 V
.default_trigger = "default-on",- w- _! a V3 r2 a
},6 M* d) B: ^4 u* \7 D
{
4 C; v* U: Z, F' s .active_low = 0,' ~9 n+ L! ?- f: |7 T6 s9 {& k, D
.gpio = DA850_USER_LED2,8 x7 S! }% H+ F ?. J
.name = "user_led2",' J+ K1 ]4 o. Q0 P+ j' }, k1 \
.default_trigger = "default-on",
j- q6 G, O( ?" A) ~7 W },) ]: R( K/ n! S
{
$ m O9 U& c7 {+ e8 {. ? .active_low = 0,! {) A* {; ]& m$ k* }( b Z+ U
.gpio = DA850_USER_LED3,$ N" {! A2 L6 V b4 _9 }
.name = "user_led3",. p1 o8 o u. i6 a4 |. p
.default_trigger = "default-on",. q, Y! |0 b& `5 H
},6 f8 b8 N$ E7 m2 c& @# B
};$ ?) m3 s( E Q* k
/ ^9 e8 c: l3 f4 {
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 Y0 D7 a; U: [+ ~2 x0 K1 X0 }6 ~( O0 b
.leds = da850_evm_tl_leds,
" x; s; U- {9 o4 h0 G+ E .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; X, t) c! |3 s1 o. Z) @};- b( m5 {0 R& j" L$ t2 r
+ x c8 v! z2 f0 ~5 f ystatic void led_dev_release(struct device *dev)
q& Y. B' x/ Z g{- h. G* u1 C! J5 h* Z+ s
};9 a" }! C9 z* q p, O2 k% \4 }
( Z9 H, q. `4 }& |
static struct platform_device da850_evm_tl_leds_device = {* t9 G: ]# n" S# ] E
.name = "leds-gpio",7 J# v4 C' J2 B9 h
.id = 1,) Q+ o5 x" B! K$ J C
.dev = {
. n. ~" ?; p- s .platform_data = &da850_evm_tl_leds_pdata,
3 l; Y, L6 Z+ H7 l! \7 V .release = led_dev_release,& ^+ m2 w7 `( X: B
}
( e) Y$ T' R0 @' f2 z+ c6 V- h};- Y/ p ^6 ^/ a* _
3 q$ o& x" E8 n& A1 t3 F" vstatic int __init led_platform_init(void)
, G. f0 F! T5 Q: [{
0 S- l4 J+ c1 G8 o6 D; R# m0 F int ret;! C5 E& ]3 k h( y! H' \) y
#if 0
, L; Z- a8 c8 f- ` ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. [; E" N9 j7 u O if (ret)! [* x' c0 b3 O2 W9 W# S$ Y, Q$ i
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' ^5 ^8 ?6 ^9 S/ k, R& s "%d\n", ret);" Z5 E5 ]" Z) B
#endif
$ y+ Z( c2 g; U. i* [ ret = platform_device_register(&da850_evm_tl_leds_device);
( ]. j r. o' q! u0 G; T+ a. I if (ret)9 g% q4 o: M: k# M1 ^
pr_warning("Could not register som GPIO expander LEDS");) {4 R+ g: B6 u9 M* |' M
else
9 P2 J! t3 E2 l5 k2 A+ Q printk(KERN_INFO "LED register sucessful!\n");
1 h3 p q/ B" g. T1 F- b( {, e' a0 ~
return ret;9 R! [6 b5 {! m% V5 W! R' h' @
}2 Q& l: _7 V* }8 P/ h, E! O4 n
9 i; q/ E3 B% o4 L7 ]
static void __exit led_platform_exit(void)
' _6 K0 b* v& n! S{
/ i* k; [' q; ^. K# F: G platform_device_unregister(&da850_evm_tl_leds_device);
0 Q" |" N# e& I: @6 r, z
& I* |3 W1 S) W( q8 }+ t printk(KERN_INFO "LED unregister!\n");
) K7 q! ~( Z3 i2 b6 c7 c% \}
: O3 H/ t$ @' P+ p! }+ i+ A+ q) W' t6 ?: M+ M; s/ L
module_init(led_platform_init);. |; L$ I0 G! X
module_exit(led_platform_exit);+ }( [6 S) Q b1 t s* W# i
( c( ^$ c4 I; s3 h6 n
MODULE_DESCRIPTION("Led platform driver");& A. `. Y5 m2 e5 _* E# S% E# f
MODULE_AUTHOR("Tronlong");# r9 p, j% y3 ?/ j$ i5 Z. T" ?
MODULE_LICENSE("GPL");: l1 c- p8 A7 V
$ A# V1 d6 y5 y8 {
|
|