|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. ^2 ?8 b6 ]: Z1 Q' ]* x5 t#include <linux/init.h>7 r0 ~2 _& Z0 O( Z- i, ]
#include <linux/module.h>
7 W9 o5 p8 b2 n#include <linux/kernel.h>' z% i9 I7 y2 P
#include <linux/types.h>
- L# a0 ]# {5 V2 Y) D/ P#include <linux/gpio.h>( B9 t5 o o5 A& b$ }: \( h1 X
#include <linux/leds.h>
: M0 `8 a$ D& g& u. T) i, N! T#include <linux/platform_device.h>' F. b; p8 l/ S; p
' h5 i( {( f4 X8 z
#include <asm/mach-types.h>6 @4 u4 j+ D; ?- G3 r' ~6 ?
#include <asm/mach/arch.h>
* i& y! R% t$ n4 J#include <mach/da8xx.h>
" o! f1 a6 M: X: }7 S! j4 v#include <mach/mux.h>
& Y4 Y. H& k1 n1 m) y2 i5 d
$ d4 u! H4 S3 }( o' _#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' ?% F: S" s& @% D8 v' `$ \
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" E; {% m# u C#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) g3 |1 j# B7 Z- e- }& F: |1 w: M#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 q2 ]0 R' z1 H2 o+ ~% ?) l7 Q$ L
4 O3 y* \- Q( x8 o% N; z/* assign the tl som board LED-GPIOs*/
m0 o+ b! M4 m/ T! xstatic const short da850_evm_tl_user_led_pins[] = {
- ^ r1 o* s: p" n" m" _ /* These pins are definition at <mach/mux.h> file */
s7 s: c$ l4 N, T3 b* \ J4 P DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ ^3 ^, X, |2 P+ I -10 t' I& K" B+ ?
};4 A; ~% v; |) c. R
4 L0 ~$ x' E+ q4 _static struct gpio_led da850_evm_tl_leds[] = {8 l& I% [4 a( h3 G5 E0 w0 @# ]( a
{( ?; V& {5 `+ N4 I6 l7 V; z
.active_low = 0,, N) V, h9 H9 K: A* ] N
.gpio = DA850_USER_LED0,
3 R' E* T6 p* O6 a ] .name = "user_led0",
7 d+ z/ q4 ]* E1 |6 _ .default_trigger = "default-on",
8 p u' T% |4 w. j },+ N: K, s& i& q( Q! f$ Q
{
u( [# O6 C# s5 v; L .active_low = 0,$ D5 \3 K" M) }3 j$ M; C
.gpio = DA850_USER_LED1,- g B/ V. |: D5 K- N! H
.name = "user_led1",
1 a5 T, I. |2 g2 X, J! c .default_trigger = "default-on",) H$ o- @+ \) l8 G$ @ w
},
2 e8 {# i- i2 Q' F! w6 b, f {
& p0 V* [- _# N: p8 i4 I% v2 Q0 [ .active_low = 0," e2 R& B0 m6 T2 }4 ^% U
.gpio = DA850_USER_LED2,
- e* h+ m6 G1 ~& u* v .name = "user_led2",$ {4 Y" y0 f7 k
.default_trigger = "default-on",
: b- s! z( K, z# L },
% R$ c! }6 {- y& @9 C; d$ W {1 A6 Q) v7 O* j) n- w
.active_low = 0,/ |- B0 Q1 z, d- z
.gpio = DA850_USER_LED3,. E: h. F3 r0 B( W' g3 S3 M
.name = "user_led3",* o& F/ X' R& a. C+ W
.default_trigger = "default-on"," D/ f5 P% a* z5 l
},
( } D$ L! T' z2 M2 C9 ~; ~) p};
1 C7 t% d2 H) @% w/ t" W" |
; n9 @3 X: X# N) X1 }+ o% `static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' \! ^3 L& N) c. o; u7 F- ~
.leds = da850_evm_tl_leds,4 r3 k7 L2 g/ g, x) V. ^
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),* [ T& ?* r+ a* Q! q
};
- c K Y( v! v6 x3 R4 F' e
2 H# _' K( w3 j8 d/ kstatic void led_dev_release(struct device *dev)
o9 }! ]1 m* i; a: A{
K, l8 M. S; X; n};
" e8 B% D2 @7 ]" Q8 f# x$ U3 _$ f K" n' {, H0 w
static struct platform_device da850_evm_tl_leds_device = {* P4 ?$ P( e8 ]" o
.name = "leds-gpio",
- j# |6 W2 h2 j' X( Q .id = 1,
# H, I; u: s! ^* l .dev = {8 h1 j# t' I7 a j# b3 \0 [9 u* N; A/ r1 \
.platform_data = &da850_evm_tl_leds_pdata,; z- R: v0 j# v6 V; w6 o3 n
.release = led_dev_release,
( j, I8 s7 ^8 K O8 r$ N j, J) ` }3 ?: [: x6 e, Q& ?6 e
};/ o5 c. L: U4 M" Y
6 h$ w7 p* {/ L5 V* V. q
static int __init led_platform_init(void)8 G6 a4 V3 Q) O* q, I5 [
{
0 z3 @; V" e! u+ R int ret;4 C I7 n$ {$ R: f7 \, q
#if 0
# K6 M+ G1 W1 j6 T8 [' ]% O ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
4 i8 \6 k9 a6 h2 n) I( r P if (ret)1 @ C' O/ f8 U# o" V
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& ?! N$ ~* p9 m "%d\n", ret);% N8 k1 |% Z0 F% p5 M
#endif2 Q% W) S/ A' m. H8 ]7 e
ret = platform_device_register(&da850_evm_tl_leds_device);
2 H* `0 f9 W1 s6 w9 y' \8 ] if (ret)
4 y3 V8 l+ F) a! r pr_warning("Could not register som GPIO expander LEDS");% H0 I# ~) A9 t3 I; ]8 z. F3 w, H
else
' X+ r1 t; z) t5 n printk(KERN_INFO "LED register sucessful!\n");
( I! D5 k2 V+ U. e' O+ R. g) y# [/ D6 E; y
return ret;' i) f4 j! S4 H: _
}
" w2 J) n5 [8 U& Y% |0 P5 E+ e" f& F, k% a% N; f+ S
static void __exit led_platform_exit(void): t; w1 ?" ?1 ~5 w( |5 L0 B
{
2 e( M( [2 m* q. W1 t platform_device_unregister(&da850_evm_tl_leds_device);
7 C: J( z: u L, @1 {4 T
p( d2 z1 r! v6 V$ Y6 K8 | printk(KERN_INFO "LED unregister!\n");# Z( ~$ _3 w. Y3 }
}
2 s: c% K1 ^$ g$ X: j( S
/ t% j* P; o2 @: z% N/ p6 G4 Emodule_init(led_platform_init);
; U; q, P$ j9 @" Imodule_exit(led_platform_exit);
$ z! Z" u# c2 y- T/ A/ D% }9 H9 Y4 e& x% C5 I; `3 d- e0 M
MODULE_DESCRIPTION("Led platform driver");
3 y% ~* n) r/ }3 [0 ?MODULE_AUTHOR("Tronlong");" u- l" f) [3 K+ K. D, l
MODULE_LICENSE("GPL");
. L# {# @! X& R
8 r& y' `, m) V6 D% |% l |
|