|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( N0 J/ _6 X7 y! ?#include <linux/init.h>, J+ Q4 f0 u3 h- |3 P; }- s
#include <linux/module.h>
d/ V- t2 v; B#include <linux/kernel.h>
& m; s0 c! e2 H0 h6 H; q#include <linux/types.h>
0 q- Y" |5 B& J, z: x/ b#include <linux/gpio.h>' z8 F9 Y) } k1 D" F/ Q3 o
#include <linux/leds.h> D7 m, o# E! S }$ n; s+ m
#include <linux/platform_device.h>
5 O$ G o3 F5 o3 C
& k$ Q! v) t7 X" Z$ P9 h3 ^#include <asm/mach-types.h>9 T/ m* N1 N& N. i- R* t+ r
#include <asm/mach/arch.h> _/ C% a' c* f- y. L
#include <mach/da8xx.h>
6 Z {: f1 u" X" z v! s#include <mach/mux.h>& ]: ?6 P$ x. B/ j+ p7 H1 s
, d1 ]; S9 I8 ~- R" [. i9 c+ Y& y8 T& Y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0). K% R( C: s. x" @
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( a1 m* `4 h* l3 h% I" y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. Y3 B6 ^0 C5 T#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- A. K3 Q% s3 s. S
+ r% n! d1 ~7 M* J
/* assign the tl som board LED-GPIOs*/' S) s# s* Z8 o) y2 z0 v9 m* J5 }
static const short da850_evm_tl_user_led_pins[] = {
7 Y: K" r' ~1 {% q7 p /* These pins are definition at <mach/mux.h> file */: {3 t) X, e9 ^3 T
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. Q/ l! j" h( K
-15 J) P/ [, e- Y2 \1 A" Q; e
};) m. b v: M2 j( F
l% _2 S: k" J9 M( B& k* u
static struct gpio_led da850_evm_tl_leds[] = {
2 z- y- T! ]* ^$ I# U( [ {0 Z0 i8 \: H# a- V& R
.active_low = 0,
5 s1 e) @5 y: p6 c .gpio = DA850_USER_LED0,
+ N; _/ Y; _* U) [8 n* g5 m .name = "user_led0",
' z+ h3 [& O1 l. U b. t1 r) x .default_trigger = "default-on",* b2 f- h6 X, m1 K$ R$ A% R
},
# k: p3 s' d* k- w& N' D. D {/ m. {; V: ^0 h, t% I- S
.active_low = 0,4 b) R }: @+ w$ u" ?
.gpio = DA850_USER_LED1,
* {8 ]2 I, r0 u6 X3 `. `9 }4 ]# Z .name = "user_led1",/ {2 B3 N; a. c6 |5 L
.default_trigger = "default-on",
$ E0 a- j: a$ H& a R4 M },
7 S' t7 ]: r9 g$ R5 Y {
6 N9 r% ~0 S; B( N7 w) o .active_low = 0,7 ^) z X& C" A7 m
.gpio = DA850_USER_LED2,
, J" x/ E5 E1 b! v9 e .name = "user_led2",4 y% d4 W3 [( `: Q. S) [2 @' \
.default_trigger = "default-on",8 e9 t( u7 z! S# ]( M, h: Q
},% A, F$ v8 _7 {
{
6 y5 k5 ^! Q$ Z7 v# B+ v' N .active_low = 0,
5 e# [* H" m" N, `# ^) \ .gpio = DA850_USER_LED3,
4 w, `) W/ Y. F .name = "user_led3",
6 T+ O( c' y' z) u5 a" A' Q .default_trigger = "default-on",
% b5 W$ H2 l+ p: v/ c },
7 d) m: I/ S: V};6 P, B8 Y* h: G! x# b# T3 ^
8 L# L# W5 f8 h2 Ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: a4 b, C. R/ T- h6 m) c7 X# ?
.leds = da850_evm_tl_leds,0 C/ n0 C! P/ j) U! Z
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ h+ y6 \2 o2 O: E* q$ ?7 ~
};
' T' ?! _# O" h, _( m3 _) y0 ?* E
* ?7 |2 {3 }4 y+ A% {2 h3 Q: d$ ~& astatic void led_dev_release(struct device *dev)8 B6 @. ?! A# s+ g, i3 N9 @$ O% X2 T
{
" \$ s P/ \+ B};
+ \0 h# g3 f: _1 h
) k5 V( B7 E- t {/ estatic struct platform_device da850_evm_tl_leds_device = {
" W9 Y1 m0 n) O+ _ s6 ]8 G' P .name = "leds-gpio",
' {; Q3 C% g' [! A5 e6 |0 J) n .id = 1,
& e3 n7 Y$ ^7 A4 k3 D: N+ x .dev = {( v \# q+ v' `' ~+ v, _6 E
.platform_data = &da850_evm_tl_leds_pdata,% J. C3 \. x/ N
.release = led_dev_release,% q& I: k% A. A, r; U
}# v5 R* R* U* V t
};
- n& U8 [% [: Y4 V# d- Z& J
) ^. h+ P* l" \. i7 Jstatic int __init led_platform_init(void)$ J2 h. ?0 e x. M
{( B/ l! g' x/ Q# q1 o/ Q J
int ret;. K) | E& P3 a
#if 0, R1 \# g0 b/ S! P; Z, v- C. q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
6 m1 X0 O' U8 S O2 Y1 K: X if (ret)3 `$ p. |3 t+ L- H7 p0 g
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; z/ q. K, F0 B6 Y- B
"%d\n", ret);
. X ~! u, Z, u; }2 P5 L#endif! r8 D0 O$ G; x' ?
ret = platform_device_register(&da850_evm_tl_leds_device);
% h7 }8 \/ E: ~ if (ret)
. _. D( B# z* _- r2 } pr_warning("Could not register som GPIO expander LEDS");
' D9 Q q; Z$ \6 j0 r% d/ U H else1 [. D4 D; W: q X
printk(KERN_INFO "LED register sucessful!\n");
% A2 e. L! T) r; f3 `
5 {1 _! U2 v! b6 q3 P8 h( e return ret;
2 V/ N8 o( j. M}0 N6 r& O* k5 O& W' B6 j% L# n
1 D( F. @1 g! c' }0 Bstatic void __exit led_platform_exit(void)
" H/ H# e1 B7 v- w1 O' h{
, w# @ v4 E9 k& h2 P: D platform_device_unregister(&da850_evm_tl_leds_device);
4 y. l1 @4 ]) Q0 g/ L+ U l
! I+ N ~% D5 [/ n8 O printk(KERN_INFO "LED unregister!\n");- @' j0 H3 G; P$ w: ]4 f
}9 b7 D$ |- \' Q7 q e; G$ N/ B0 \( ~
6 n+ M2 q. z3 Q/ e
module_init(led_platform_init);
S- q0 U: h- Fmodule_exit(led_platform_exit);. t% T( _% x8 X8 E! O5 u. c
, K, G: Z! ~# P2 [
MODULE_DESCRIPTION("Led platform driver");8 g$ l% Z! l0 \" ^: v; d! c
MODULE_AUTHOR("Tronlong");
+ b9 j5 S2 h n8 @- X# W8 kMODULE_LICENSE("GPL");
7 m/ }$ I I: @
+ z+ d' ?. }6 x" a' d |
|