|
|
求大神给下面的程序做注解,请稍详细些,谢谢。! `3 p9 C8 i5 f, |) K+ A$ O8 O
#include <linux/init.h>5 F# ?( n3 L7 ^& {
#include <linux/module.h>
( |, t6 s2 o2 ~' J0 Q7 C2 B#include <linux/kernel.h>
7 a# [) s4 G/ K#include <linux/types.h> z( t. s7 ?8 ~ ?- \ x
#include <linux/gpio.h>
4 p: l7 F( G) K) J0 A O, v `" S#include <linux/leds.h>) K" D8 [' a. s* \( w/ G
#include <linux/platform_device.h>6 K7 o v* d& u* `
) ~3 X! g _2 e+ l; f5 }
#include <asm/mach-types.h>3 N; M, _( E- \9 r9 g- j8 F- H
#include <asm/mach/arch.h>
; u6 u; R; M4 d% h#include <mach/da8xx.h>
0 M% A% q$ [1 l0 P4 s#include <mach/mux.h>1 c. ^) D# c3 I) y$ X
( C4 P$ p8 J7 Y9 q#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
. |# e4 a% ]. c" O% h#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. v5 P5 f8 Y2 m. @* q# L0 e#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' ^6 N$ @* h' o, r6 D
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 h0 e @, R* P e7 V4 r+ o; k
/ c& S+ |( w5 ~, j- B/* assign the tl som board LED-GPIOs*/
4 W* s4 ?* P) @. h8 E$ Vstatic const short da850_evm_tl_user_led_pins[] = {
7 `2 `4 {: d& W& G" ~ /* These pins are definition at <mach/mux.h> file */5 H5 T0 `7 V$ D; E! T
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 N& U" n7 ~& P* H" t -1
2 g# h, H: a& f3 D! a2 T7 I};6 R0 W/ \& n _7 A0 M4 K {* l/ Z
) O) K' ^; a7 O" h6 z/ c4 |0 v2 astatic struct gpio_led da850_evm_tl_leds[] = {1 w9 r( I/ o5 s9 i/ d
{; {9 B# \3 n" N
.active_low = 0,- s7 m' h2 Y1 N
.gpio = DA850_USER_LED0,5 W& t, B! F- t+ Q
.name = "user_led0",
/ n0 S7 B0 J8 `! @ .default_trigger = "default-on",
+ B& F) t9 y+ f- x' C* w: F },
* I1 q: X: V) x% {* y$ L+ @5 z7 S {
# g( q" f: X; A. w1 y: ~+ ?2 P .active_low = 0," P3 K% n8 C# Q2 z0 \+ Y& l
.gpio = DA850_USER_LED1,
+ x& |9 L0 c% m/ F% F5 O; k .name = "user_led1",3 x' w, z4 ?# O5 F; ]
.default_trigger = "default-on",
7 [7 m6 O P1 F( O },' f5 q; K/ N3 Q% k/ w
{
& e) r) [* E; E% w/ k1 w .active_low = 0,
5 s2 h# j. C3 n5 G .gpio = DA850_USER_LED2, o- R5 }; e4 E/ h
.name = "user_led2",
# G/ Y" a' j( v4 X# W .default_trigger = "default-on",: M. i r3 ]0 q8 x/ ?. b
}," k6 J! X. W4 R5 y' t
{# I6 [" m; K: h$ a, n
.active_low = 0,
) c0 B" p- F, g6 T .gpio = DA850_USER_LED3,
' ^1 s+ \( `2 o0 c- P .name = "user_led3",( E& f3 |7 B6 a
.default_trigger = "default-on", G/ E% j. }8 ^1 H0 N
},
$ c( V: J7 o M5 V! F' A$ e& T |};0 Y8 f* X4 s4 e5 U8 r2 d7 D7 ]
1 d/ i* B' x l, F' N0 c
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% f9 B5 d- h) G% Q2 V
.leds = da850_evm_tl_leds,7 U! E, |7 U, D7 I0 G: b' I9 a( n
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 p" ]9 V2 a: C. k/ O- L};
4 E0 R7 q5 e5 ~# q' {; j8 t: c, j4 h; e6 ~' ^* H" r. O
static void led_dev_release(struct device *dev)$ a! F( N8 k" @
{
4 B4 ~: z, o( K1 o" {5 G};8 T/ |4 z2 b& V* y! l( c
0 m: t" E' |# l' K( X, l4 U! g
static struct platform_device da850_evm_tl_leds_device = {# [; w& q, }7 V# f) v/ D
.name = "leds-gpio",( ~5 g" U: I& d6 O+ e
.id = 1,4 g9 W% H& j& S T: \* N- U
.dev = {; V2 P# l: E% ?6 b
.platform_data = &da850_evm_tl_leds_pdata,+ W1 `' t5 ~' s1 ~1 B3 B( U d" U' ~
.release = led_dev_release,
( S/ n4 X) B! C } _" I" C$ z; I( F/ ~
};1 y5 Z& H8 C3 C9 o {
8 {5 s1 W' M; [) v* f2 Ustatic int __init led_platform_init(void)) L* |- d0 C/ R( c% Z
{" N) m+ I O) k# V0 t
int ret;
9 `+ l+ `5 ]; i( }#if 0
- }. F; Q6 j6 b, n; g ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) a/ q5 f5 t) ^0 t# J! H- t9 H9 [- i if (ret)! W4 h R9 I6 y
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ w* z7 H$ S" `9 R7 i
"%d\n", ret);% o8 \0 R# g# T
#endif
t2 I6 P; p# V" N/ M ret = platform_device_register(&da850_evm_tl_leds_device);
: y6 r( D4 L7 w+ ~ if (ret)# c4 e6 Z" `, a1 ~7 y
pr_warning("Could not register som GPIO expander LEDS");" M# {, K' ]8 S+ X9 N
else/ ^: w q. l! ^$ M. ~
printk(KERN_INFO "LED register sucessful!\n");2 H8 d2 l9 O+ m8 S$ p
! _1 v: r! S/ O# k3 X- _0 d; c return ret;3 l4 {3 F/ s' R4 O% i: V
}% h* M* X7 \* j+ Q
4 S( A5 o* Q2 @8 d7 e5 T
static void __exit led_platform_exit(void)3 L) j4 v2 b6 }" t" M
{
+ f( K0 W/ f8 O& r. p7 ]$ V6 z platform_device_unregister(&da850_evm_tl_leds_device);
2 Y- E& r& P1 U3 G5 D- r3 n5 I' F* J- L( N* p4 s$ q, G
printk(KERN_INFO "LED unregister!\n");
4 h% O. q9 |" G" n}: B7 k+ r" V0 _3 F
0 K% I1 o: q3 fmodule_init(led_platform_init);( f' c! L8 A$ x0 I
module_exit(led_platform_exit);
& f/ S3 ?! |4 L
+ s7 o7 \ F, ?3 J: Y1 h. a1 K' SMODULE_DESCRIPTION("Led platform driver");
/ c3 ]+ a [4 v2 ~; {7 N9 BMODULE_AUTHOR("Tronlong");* m' ~) s5 C; N" m/ g7 h! O/ @
MODULE_LICENSE("GPL");
+ Q& d* b0 j4 \$ r: S
/ b, h; C4 B7 J" @$ { |
|