|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ n8 O; Z8 f3 @+ d#include <linux/init.h>
% F+ W; M7 ?8 T h" ~: P#include <linux/module.h>
4 k$ I& @0 ]# Z; M; W#include <linux/kernel.h>
; P' F$ v2 U9 H8 E! U#include <linux/types.h>% c# f% Z/ L6 g0 d- B' Q; {2 @
#include <linux/gpio.h>
9 Q+ a- }( T. S K) \1 \#include <linux/leds.h>
6 L- Y- Z- R/ p#include <linux/platform_device.h>$ c, [1 X9 V5 `' u3 b x! p2 R5 q# W0 O
) ~" \7 h- g. b8 Z& \! u& h9 b#include <asm/mach-types.h>1 u6 N% p: u2 _# Y' m) P/ I w- B, q
#include <asm/mach/arch.h>5 }6 v0 I3 f$ ?( d8 C
#include <mach/da8xx.h>, v, @3 F6 ~3 _$ M( {* Q( ?
#include <mach/mux.h>" P, H+ ?0 D) R; N
( X9 ~! J& R; G* \#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 M1 Y* P7 P* L2 E; A#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
?8 O" s9 O, |3 e0 f#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 u2 q& }4 p, ?; X, f) p
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); A# m1 O, j b) H/ w
p3 [1 A' \2 c# E/* assign the tl som board LED-GPIOs*/) \; u% ]( _8 X! _. ~7 P
static const short da850_evm_tl_user_led_pins[] = {) }1 X! j1 C& J" L0 p6 W+ h1 i% ], b
/* These pins are definition at <mach/mux.h> file */3 z8 L! k* s% Z' y3 z
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 z( N' m0 {6 Y1 m6 h5 v. ~ -1
$ ~; Q6 V0 s" l3 t6 W' \};
6 e9 t& E1 U. V% q8 @1 q' ]# j7 J# q; ]$ r a8 K2 ]% u
static struct gpio_led da850_evm_tl_leds[] = {
7 L A$ L$ u) @% W- x1 m& N o/ ^ {' _) e% w/ O* j% D
.active_low = 0,
7 a% e3 ^' T- @ .gpio = DA850_USER_LED0,& ~' y2 C/ z' Y5 E& i+ r. P+ b( @' _
.name = "user_led0",% ^" c' U# T1 C6 h: j
.default_trigger = "default-on",
7 G# ], T# f- v% F },* t5 x& o! _6 m( [* s! d0 F
{: H* m+ z2 ^6 u$ |) E
.active_low = 0,# f e9 G0 k0 z* u9 H1 O
.gpio = DA850_USER_LED1,7 @& C5 d1 \& X1 D2 C
.name = "user_led1",
6 Z4 d! p) A3 S0 J' m" M9 r .default_trigger = "default-on",
l8 Y, @- _) `; r1 ]' [ },
7 p/ U0 C: ?2 o" _, t, r {: i! e" u3 C$ G- z/ X9 X( E; t2 }
.active_low = 0,+ t! M7 w* R$ m: D- l6 j
.gpio = DA850_USER_LED2,* i9 i% t& d( F- s! E
.name = "user_led2",# l9 B8 ]% [9 w' n! g9 e8 H0 g3 A
.default_trigger = "default-on",
% I1 a) x6 E+ v },
* |8 o' [9 G" A9 x' M {8 k1 I$ K& r: { N
.active_low = 0,
2 t1 b3 J# L2 T' ` .gpio = DA850_USER_LED3,* v Y/ X% k3 f7 q3 D
.name = "user_led3",
O" n- z/ Q: ^- \2 F .default_trigger = "default-on",% m8 E) b: u% k5 M
},
, B$ e/ R, a4 V' C8 D+ }};
8 Y& ]& A/ @( L! ?3 y8 Y- H5 Y7 o; r( q9 \- q3 V% P* F$ u5 W
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" ^1 p9 I6 Y* r8 X7 W
.leds = da850_evm_tl_leds,. @% G1 _1 t* _3 V1 v- b
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 t5 G# C% T# S: r};
+ g! E3 K0 D* {2 G% Z
4 I! ?+ ~, Z; c3 x: sstatic void led_dev_release(struct device *dev)
- h5 w4 ~: \) ~, N$ f! ]' E{! C4 I; N, b# q) W
};
' [5 o! }' o6 C* Z/ t( x% L2 w/ H" I% ^9 r* ?
static struct platform_device da850_evm_tl_leds_device = {
j5 v7 F5 o( y O6 e9 f/ q& r .name = "leds-gpio",
2 ~8 u) s( A/ W( m6 e* [+ v .id = 1,1 [9 r. f7 ~, n! S
.dev = {" L' t% l# M1 f& ?9 o/ m: a
.platform_data = &da850_evm_tl_leds_pdata,% D$ W, a' g: X, C j' J0 `4 ]+ ]3 f
.release = led_dev_release,9 u% \' y. @: s$ {" X8 O7 U
}, m' w+ `( w3 o( s# p; ?- @
};4 u2 c7 M( I( y% O6 n: w' ]
T5 ?& E2 i, L0 j
static int __init led_platform_init(void)3 c) D( s4 N$ E& \, W; U9 l
{
4 u8 B- v& R& n: J int ret;
- a: a& i6 f% t- e#if 0
8 Q$ \& ] Z0 s5 x$ Y: t ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); r% J1 h4 E1 s. K1 f: \ U
if (ret)8 _, d) V8 `; e/ I+ F( u# J! H W. D
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ \, r# j# z/ X2 I
"%d\n", ret);
1 S1 c' A6 V" O% `7 c' \#endif' l2 a4 p) D" S# Q
ret = platform_device_register(&da850_evm_tl_leds_device);" V2 A) e4 j0 C# v7 A! s" y% H' p
if (ret)
" K* ]8 n0 E- D pr_warning("Could not register som GPIO expander LEDS");
' ], D; R5 S6 z" R" s else
, _0 b2 S, q7 l2 M' W( U; ~ printk(KERN_INFO "LED register sucessful!\n");
2 s7 s; V$ {# U8 I
2 B. K! e! c D: [4 P return ret; M/ l. s6 y0 o
}
6 U/ F& f: a1 J+ s* u* d' j; `, Z) S, m9 S
static void __exit led_platform_exit(void)5 B: j( \+ R6 q
{
: n9 z0 z7 {1 t2 i. \& c platform_device_unregister(&da850_evm_tl_leds_device);/ Y$ E' l+ o) o7 {4 ]. [8 q
. |" e3 |. Z+ }2 R5 `- D
printk(KERN_INFO "LED unregister!\n");
( ?. A) Z9 |9 i- d}
! b, t$ ^1 [; u) ^
1 Z# B1 \! i! j, ]" wmodule_init(led_platform_init);) u3 d6 J- }3 X
module_exit(led_platform_exit);
) ]3 j2 ?3 e6 e n" B- R' F
. s! a; _, S: }" }6 k0 ZMODULE_DESCRIPTION("Led platform driver");8 O5 O- g; A; H) W( g
MODULE_AUTHOR("Tronlong");
s( H9 F5 |( W% u K# |2 G7 A# dMODULE_LICENSE("GPL");
h1 E8 T. C' L" x, |7 S: D7 a% S2 v f
|
|