|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& P4 Z) j0 g! O8 a G' O& R- @1 Q& L) y#include <linux/init.h>
/ V1 }+ R% C. ^% M- p$ g#include <linux/module.h>& R7 [+ X, D( H6 B4 C8 j7 c7 ]
#include <linux/kernel.h>
7 g: s3 u/ f6 d; K( C1 }4 k#include <linux/types.h>
, m) c7 _7 u/ g0 A7 Y& O' f#include <linux/gpio.h>% B4 ^- w# U& y; V
#include <linux/leds.h>
3 m: H8 T/ D; E3 p/ B% f4 n#include <linux/platform_device.h>) a( B& O) m( i8 s
# R7 A! L( \. f$ G#include <asm/mach-types.h>
: `8 A$ I6 o( a1 ^6 y# M \#include <asm/mach/arch.h>
+ r0 T8 O) G& f, D3 c#include <mach/da8xx.h>
3 v; _7 j( t8 X8 S! @5 b#include <mach/mux.h>2 d L+ [9 a" T; C
# m" B) Z0 j, l+ q: a7 B2 d+ Q7 e3 Q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 B( ~5 I7 e; b; g4 Y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, @7 V! f( S/ J6 v/ n R#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& q! y; v& Y4 e K' y, k& I% U$ O
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2) l, @% O1 k9 s; l' X0 u, U6 U5 ?
) n7 L" a, R/ b3 m0 j$ p3 y
/* assign the tl som board LED-GPIOs*/! W n; ^7 Z+ o* ^3 i
static const short da850_evm_tl_user_led_pins[] = {
; }0 J! b0 x7 o, w' u /* These pins are definition at <mach/mux.h> file */$ x0 A. R" u7 Z- n4 s% _: m
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 T6 E* N6 i. p/ @; L& m- K& e" s# | -16 C8 W. i0 e, i, e9 P
};) t; H# t) S; L$ d8 I
% |2 @0 _ B; F( ]. ?) R
static struct gpio_led da850_evm_tl_leds[] = {
9 |3 t# A/ {0 f5 `" ], |3 C/ Z {
7 V+ s5 |- R, z: J& t .active_low = 0,2 M. ^8 m& L" a+ `# {" A
.gpio = DA850_USER_LED0,
( z9 U( L7 Y, M' q: V' @ .name = "user_led0",
% L! m/ B! e0 h) r .default_trigger = "default-on",
7 `5 Z' Q) w1 @( C# o! t },
$ Y( m7 W' E3 j. I( q' x {, w* d. ~/ p d2 t$ `) C
.active_low = 0,( p* w9 H3 [! E1 U" u8 U
.gpio = DA850_USER_LED1,
4 T0 p% g2 e5 n+ L# S .name = "user_led1",/ V# j( ^& z% |; W; R3 ]
.default_trigger = "default-on",- T, U4 x1 b4 e% E' t1 l; o' ], K
},
5 |0 i! x) G. {. h5 ~ {
3 Z$ I$ J5 C- R8 g: K .active_low = 0,
W ]7 z* z, v" X, K' N .gpio = DA850_USER_LED2,0 L% m( ?7 K5 {4 z) D8 Y2 `! j
.name = "user_led2",
* Q6 o% R, I. @- |0 D0 g8 t7 {9 B/ S .default_trigger = "default-on",
% ?6 n: o1 l/ \ },
9 z* M$ A( q% @2 l+ Y- G {
x( x+ V% N; j .active_low = 0,
: c( x/ H: x8 i3 V; F .gpio = DA850_USER_LED3,2 i$ K+ E0 d/ {, }2 j
.name = "user_led3",
% q% g5 f1 [0 x' f& G .default_trigger = "default-on",
4 j/ y3 r' j. N. g3 R },
: c+ [/ W3 w& n. d};
( x, t" G& d f/ S* T$ a h o( X( Y# n1 W" w- @
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 T/ i, A, p$ q: \* P .leds = da850_evm_tl_leds,
% G. k1 @; m v" z' Q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 L" B8 a; j: m9 h, Q+ |};. _+ F6 Q0 i R7 p: M# f, H9 s
7 \0 c+ Z9 }7 q
static void led_dev_release(struct device *dev)
% ]/ `: p& u9 E" `! \{; f: B- v$ _0 V! E6 z% Q6 g
};* y. J/ }9 z" B/ P
: Y. B( f7 G" D- z- z9 W! l: G1 F* jstatic struct platform_device da850_evm_tl_leds_device = {
2 H# I+ }4 s1 } .name = "leds-gpio",, p% |" B7 e) j7 n0 q3 A$ T5 D G7 }
.id = 1,0 ?7 x, v% K+ P! f" W4 g
.dev = {- R, \" ^, o2 E* z, T
.platform_data = &da850_evm_tl_leds_pdata,( @6 w# q% X' Z8 g0 }- \6 k
.release = led_dev_release,* C6 L6 m$ K+ M0 Y$ J# }! ~
}
& l" W0 Q; F2 N};/ D5 v9 E6 V% U8 s* H( ~" _6 F/ v
- r# {7 E$ ?- f) L/ ~7 L5 L
static int __init led_platform_init(void)
) `' w9 g/ X" I7 n6 c; `{
0 x/ m9 C+ d0 W int ret;% `- i1 X3 g G8 t; n l
#if 0
8 h1 _( A: n, a5 [. J ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); ^& P1 A3 t, J- G, C9 T
if (ret)
. T! J) w- c6 }3 C/ ` pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) ^8 f' f. j4 q, P+ v "%d\n", ret);2 \7 e, O7 d: a4 R4 R- ~
#endif7 h1 M8 N& M5 Q$ P
ret = platform_device_register(&da850_evm_tl_leds_device);
4 w' }; k6 b9 C0 C if (ret)
z+ ^% |+ ]1 n$ b4 m6 f pr_warning("Could not register som GPIO expander LEDS");, A4 Y. A. o" _
else
4 b" ] }- `# U& {9 O. @1 Z printk(KERN_INFO "LED register sucessful!\n");
- k! C. L; R* ?% s, ^- s6 t! l( y- v4 ^+ h) v$ a! T6 j. T5 N
return ret;
. _# a- [4 i. g. y& j; x}3 l9 h2 C. S& f$ f L
. N8 x3 x; j7 ~* O
static void __exit led_platform_exit(void)* X! j* x) Y; X- Q5 l
{" d8 u1 Z3 ^, c, M9 ?7 z) g5 x0 `
platform_device_unregister(&da850_evm_tl_leds_device);$ Q) m& d- c4 ?% I
% e0 H- Q$ r1 W9 W6 ` printk(KERN_INFO "LED unregister!\n");4 y0 x6 o+ V) `& C* f6 w
}" R+ _ C9 M9 o# H# O4 v6 F& ]
% w4 a0 l! F+ _2 R- e; i9 H2 _
module_init(led_platform_init);' Q6 A; F: ]8 X( d- B
module_exit(led_platform_exit);0 p$ [- R' z% O$ F l4 g, Q
! r( t3 \: P. K& D* P6 x8 [MODULE_DESCRIPTION("Led platform driver");
6 R$ k8 D9 f0 m- IMODULE_AUTHOR("Tronlong");0 o' @4 |" W0 W" T' M* A6 v
MODULE_LICENSE("GPL");3 A: r8 {: D0 Z; @# j
: M" Y" H3 n, x0 |7 M* k
|
|