|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
U! f# k$ Q: S4 A#include <linux/init.h>, B7 t* f1 F! Z6 L& r C
#include <linux/module.h>
, Q7 Z: k2 X& L7 @8 S. S#include <linux/kernel.h>
( S4 h; X, Q J#include <linux/types.h>
6 h9 q8 B7 Q$ H0 K* O; N#include <linux/gpio.h>1 n" r6 u* D* Z9 t* j. ]
#include <linux/leds.h>
' Y/ @4 C- J( |#include <linux/platform_device.h>+ R4 i% \! m4 s) c2 [
8 @" Q) ?1 O" E
#include <asm/mach-types.h>
& o, P, q1 X2 w) A#include <asm/mach/arch.h>
6 w7 Q# \: K3 s' W% l#include <mach/da8xx.h>
9 s& ~. c$ M* @+ L: h#include <mach/mux.h>0 X( V4 i6 Z2 P
4 @, p6 W3 j0 H V
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0): c( b: y- E9 z/ n* y. Z
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( S& W1 L- j0 F
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
1 b# H- Q5 \/ x7 G' g: z8 Q#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) g1 V& q8 }& c' _% Y
H5 u1 |# b/ K# S: _* I7 Z
/* assign the tl som board LED-GPIOs*/0 H* M* D/ K& e2 N5 N
static const short da850_evm_tl_user_led_pins[] = {+ L a: }3 S( y; H
/* These pins are definition at <mach/mux.h> file */. P( I4 f) l8 L9 v
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! |5 b/ K, |: t
-1
1 Z7 Z8 P: r( G* g2 L};
$ U% _: Z* `# t. y4 D8 @
* A; V* _; M: k0 K: jstatic struct gpio_led da850_evm_tl_leds[] = {/ r) m) J7 _% C. r' Z
{
$ y$ H$ p: e9 B .active_low = 0,: y& N1 R3 q0 ]) R
.gpio = DA850_USER_LED0,
" v; s6 ?; w$ S9 f; _ .name = "user_led0",
* I; ]% Y5 s; V, r8 U .default_trigger = "default-on",
7 }$ `. G3 f5 U2 b },3 k& Z0 e# B) `5 n
{
# ~* D8 J3 `; x Y6 w% S k* G* J .active_low = 0,
M" M j' j! b' M6 s8 ~2 | .gpio = DA850_USER_LED1,
2 r# m, f# i0 }; \) C .name = "user_led1",
2 R/ G4 h% ?0 \- ?5 h .default_trigger = "default-on",
3 Z2 {! D. g7 t/ R3 N) Q },/ S% ~8 j# z. L5 h
{& b( p6 K7 Q k6 n, s
.active_low = 0,7 y) }+ Q+ I$ x/ j
.gpio = DA850_USER_LED2,
" t0 |5 q# A4 O- Z! E) d' J8 ~ .name = "user_led2",
. r# P( e' O- H6 V9 U$ T' G) J, D: G .default_trigger = "default-on",! f ^* V. E' O' W* t% H: r+ b
},
+ h" @% p) [9 ~ {# v. N$ k0 ~+ l8 @/ d! T
.active_low = 0,
8 m5 v% D/ v4 y. z .gpio = DA850_USER_LED3,8 Q& G$ E* e2 Y4 F- Q: t
.name = "user_led3",+ p8 P) _6 Y' f, b7 `( U' R) V
.default_trigger = "default-on",$ ?2 Y+ x' u9 Q; K5 w
},
& o6 [: B' e* B1 r' o" T6 O* |};; K* G. T) F' T1 |) P5 l
% r* N6 R( [( u
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( N2 b3 E+ l( m .leds = da850_evm_tl_leds,
. t2 K2 F4 H$ Y! g- p/ `- U .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
. q) d9 T W8 P2 `};& N$ d* ]' j, ]+ B: d6 ~
. @1 q. X4 W, Q1 ~ \1 \
static void led_dev_release(struct device *dev)
4 y6 y. o. r3 T8 z* M5 m{" m; z3 i# K0 x; ~8 E
};' J$ U7 N2 L9 `6 `1 l% p
3 [8 ]) S# T, t$ K J6 v5 J! A
static struct platform_device da850_evm_tl_leds_device = {
6 \' i' c% o- S! o* e! [. @- ^; j .name = "leds-gpio",
: W1 r- E4 ~) O$ M) T: Z- C' r* F .id = 1,/ W& @7 ~4 Q" V, U
.dev = {
& O3 t# D7 |& _4 r! Z. v+ w' z .platform_data = &da850_evm_tl_leds_pdata,1 ], \4 Q: L' e0 {$ J& e E
.release = led_dev_release,
: W) j" ~' Q3 m6 z v }
% U8 X' w0 q2 C};/ m4 d' n7 _& C# V u4 ?0 s; V
7 X! z* a/ E, F2 A9 F# q+ f) `$ }
static int __init led_platform_init(void)
6 k" R9 @9 ~) g1 z5 a8 D6 m{
( u, K9 f8 {# z, m# B int ret;
4 `# B- h; ^- j5 m$ P+ s#if 0
% Z( {6 v: C7 S% R+ Z! M ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! u% ~$ x* X% T) N9 L. n$ K, t ~
if (ret)5 f+ J1 u% d' v
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' W2 W5 b$ g4 ^) G9 c
"%d\n", ret);: C# }4 f) t8 {/ C
#endif, n. h- a, g- t1 n
ret = platform_device_register(&da850_evm_tl_leds_device);% m% }9 M) c* ?4 o/ Z4 h6 T/ J
if (ret)
5 B6 P" |6 _# x7 P$ i# c pr_warning("Could not register som GPIO expander LEDS");
2 w. i# Q7 h5 p5 k+ T, `5 ]; R, n& V else8 _8 y9 C4 g2 p- t' l
printk(KERN_INFO "LED register sucessful!\n");% x+ R! u8 J1 P! z! ]
2 F1 W+ G1 K5 t6 m- ?! c" a
return ret;
- W: S( P% p h7 U% w}
& [" _4 j* f9 [
4 R5 y) S/ K$ j3 S5 {. `static void __exit led_platform_exit(void)
) U" }# U2 f$ u7 z% r2 b; Y" k+ b{
' `; c& d$ ?0 a# Z2 t( X6 y% E platform_device_unregister(&da850_evm_tl_leds_device);
+ x2 b5 w1 }, J- ~7 o b
5 S6 M. [2 s# `+ Q% o, |% G printk(KERN_INFO "LED unregister!\n");
0 J) k9 ] z! I$ e/ |% c& j2 `}- ~9 [: x& ]/ d3 d3 Q/ g
" f4 X% v8 e$ W3 ?* H+ j% t& c: S
module_init(led_platform_init);6 b' i8 b. K3 R$ e
module_exit(led_platform_exit); ^1 {6 R, |& z( n
1 V3 o M5 ^. e2 p2 a2 K
MODULE_DESCRIPTION("Led platform driver");# {3 _( Y$ v e' `! }
MODULE_AUTHOR("Tronlong");; Z6 N) v. F# l2 ]
MODULE_LICENSE("GPL");( B2 I u+ z9 o8 J% A# I
5 X9 o9 A" y B4 Y
|
|