|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
% k1 G, j r Q" z1 R4 L) V#include <linux/init.h>3 |9 l1 z h: M0 b! a* u( I# a
#include <linux/module.h>$ g* B& q9 {" F" V
#include <linux/kernel.h>
5 J* ~- Y' n% ?, Y, C# [#include <linux/types.h>5 i( B1 o/ |6 f
#include <linux/gpio.h>
) M8 x% p; y3 ^: w1 Z$ D% C#include <linux/leds.h>0 n7 s. Q. P6 J3 T6 ^4 u$ C
#include <linux/platform_device.h>
- x5 Y- `2 `! V/ v$ k% d: ?0 F2 d4 N7 V3 w8 a, ?
#include <asm/mach-types.h>+ O7 C) q4 g( v0 i; Y# _
#include <asm/mach/arch.h>
% e% K- t3 b' s#include <mach/da8xx.h>
2 O% y! W! l H1 b& `- q#include <mach/mux.h>
7 }' q& ]2 c3 {4 q4 A; j- x, S3 b3 y# m
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 U) S7 \( F9 |6 Q# ~! w#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); \4 m7 c) ~0 C' r
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
' i* ~8 Y6 O/ p; m, F8 d#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- O8 e1 Q2 M6 S$ D5 e
) Y4 a. T, s( E$ p z/* assign the tl som board LED-GPIOs*/
3 { n& h/ b/ g5 W, w. I vstatic const short da850_evm_tl_user_led_pins[] = {. u; I! F; s" H5 O* O
/* These pins are definition at <mach/mux.h> file */
/ u# @ r/ r: S4 u& G DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 G" k' f L5 j/ `# p' n2 G$ W8 v. \
-17 x3 [2 I$ G6 ?, H
};: m8 O8 C. }2 G* D) T8 B3 Z/ q5 F
, r0 ?& d# ~& E
static struct gpio_led da850_evm_tl_leds[] = {
' p; i- Z9 K, Z% \& Z1 g+ Y {
- i8 l7 {0 L4 S- B .active_low = 0,
+ h; V$ B, e# N- C" r" {$ |: ]. r .gpio = DA850_USER_LED0,+ V- H5 ]; |! n! M2 b
.name = "user_led0",8 ~/ ~/ j" W/ ~$ b: I) \
.default_trigger = "default-on",' d4 h# g/ f' n ~- @( z- g8 B7 z6 d
},
- ~8 K5 @) c" ?/ w% \. [ {
- ~1 ^ V+ i" e Y9 E5 P+ X# A) x, a .active_low = 0,; g! N8 N3 r1 i* D
.gpio = DA850_USER_LED1,
7 Y" J& F" Q( b; D .name = "user_led1",' E9 j% E5 V- o. ?6 p1 L
.default_trigger = "default-on",
7 M. @8 y: |% V& `; N, x },
: B6 \9 Z* D# p) L+ G9 f {2 S) i" \% ~9 A3 V3 D2 H
.active_low = 0,% n0 F6 N+ [7 F
.gpio = DA850_USER_LED2,
. O! C& O# P( o7 m7 I' E" a .name = "user_led2",
5 d4 T, Z n: p+ b3 ^/ a .default_trigger = "default-on",* ?# D4 G4 p: i9 Y" l, G
},
) _- {7 d s3 W$ J {
# }/ z4 G, p: b$ a& [! j- s U .active_low = 0,
8 T; ^6 B, b$ {6 V5 H- | .gpio = DA850_USER_LED3,7 T9 L, X- u6 G A M! Z: u
.name = "user_led3",
7 S4 V1 C) o3 t( W2 Z( d r .default_trigger = "default-on",
5 \; ^2 ~+ D, g- {) P! T0 W },1 U% O( O X% W, Q/ b- T
};
w1 W+ i8 D2 O$ [) m6 e0 l$ i5 p+ L, y9 I6 [
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( v" z; S0 Z1 J3 y3 P8 T .leds = da850_evm_tl_leds," f- `' r% G n% n# H# L
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; w$ z6 N1 v m5 _4 U7 O' E5 C; O3 r};
5 O$ V; R0 W! h5 i1 |
' [; n3 Y+ ~5 F3 V- istatic void led_dev_release(struct device *dev)
0 v3 V0 X+ W) `1 O' B{: J+ c4 q( c; \, B8 ^3 I- Y
};# B. m3 p6 m1 n# w- ~$ q
) f9 V& E" J5 g
static struct platform_device da850_evm_tl_leds_device = {1 @8 Y( ^* M1 O; h& s: K0 T
.name = "leds-gpio",- M9 r: _3 l ?. `$ F# b
.id = 1,% j2 d2 }. \6 W, z1 I3 l
.dev = {5 K9 e. _9 j3 N6 m
.platform_data = &da850_evm_tl_leds_pdata,. I, {* d4 m1 m: Z( i: j/ `
.release = led_dev_release,& b8 Y7 ~" g. v) d2 p, E; E0 j
}$ F. K$ ]" {1 W- n( y3 _
};2 {0 g+ h% S/ E& s4 i+ y4 e
; V2 S; U, F( }5 ]0 R, b. z
static int __init led_platform_init(void)
0 N% v" C4 k7 H{) B- U/ T% P7 v) q3 l/ U
int ret;. T' Z/ V' p Q- p
#if 0
4 d: s! l7 C5 Q- S2 Z1 z0 ~' W5 \ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 T+ X2 F& E3 ^% G; y
if (ret)
% P& e7 L8 T; a3 l pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' x: C% C' c( {$ x "%d\n", ret);
2 b( y( W. ~5 B#endif
$ g- o& p3 | X ret = platform_device_register(&da850_evm_tl_leds_device);, [4 h" o- Z' `+ o, L$ Z( d3 H
if (ret)
5 m7 d2 h# w6 W% G pr_warning("Could not register som GPIO expander LEDS");
# N+ x" R `9 { else
4 k5 j' ~1 {+ P, W' h: T% Y printk(KERN_INFO "LED register sucessful!\n");( j9 t3 n) y L0 Y( u4 L9 p- ^ j
# i+ I" m" g+ {$ O6 `
return ret;
m8 m' K# f- J0 W! X}
% e% i( [3 @" |) D7 z- e% m3 J* ?% U# G# O& {/ A8 a
static void __exit led_platform_exit(void)
. [9 f+ v, p9 N, X! V" O4 j{2 J' w$ n, U) N: w3 }
platform_device_unregister(&da850_evm_tl_leds_device);" m6 C+ m5 i' f
7 E% \3 T! k" A6 H1 S; i0 Q
printk(KERN_INFO "LED unregister!\n");
3 H( a( E! [9 K( W: y}
{% |! H) V4 i8 z1 C, ]- t9 H- q0 K) A. g
module_init(led_platform_init);3 y1 S* Z4 a3 q# N# Z3 F5 ~
module_exit(led_platform_exit);
" h8 r* y8 U# e+ |- v$ v. G* z+ y1 h1 b, L A
MODULE_DESCRIPTION("Led platform driver");
1 s, a" _: N9 TMODULE_AUTHOR("Tronlong");
" |# L5 i- O* ?MODULE_LICENSE("GPL");
) u! i- _* I' U: z- `. j. m0 S" {6 u7 J$ [/ C
|
|