|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
) W; |! R. O! P% v7 J' J#include <linux/init.h> i& N h9 s& R) a6 L' f( w. `% K7 O
#include <linux/module.h>
$ a# U$ G2 E( x6 k1 o9 _, O#include <linux/kernel.h>
+ e3 a4 |4 r# ~. R1 |#include <linux/types.h># f7 ~% g5 i/ M$ i: @
#include <linux/gpio.h>" n& Q. d$ F" J0 u2 Z8 E+ C; T* S
#include <linux/leds.h>7 N! C Z2 B$ R2 I8 n; ]7 H
#include <linux/platform_device.h>
* z! N5 l H. j- w% v/ D/ o
) L/ T' _. r8 ~: M0 d#include <asm/mach-types.h>5 R+ {8 S* U. A& j7 a: z
#include <asm/mach/arch.h>7 G/ I! N3 ~' r7 R$ T/ h0 h
#include <mach/da8xx.h>
{9 F. ?4 G2 e8 k#include <mach/mux.h>9 H3 _7 J. @; R( N+ `
/ Q' E$ f8 R7 C' c6 q. O, v; X" W
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 J% ~8 {- N: Q6 \! X. y2 o2 ~#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 b& ]4 m0 A& z4 ?% m; @#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ i& F; w7 ]' Q5 P( O a" `
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 |! A% @8 ^$ Z$ a4 x# W3 W: [, R" I1 c* S- {) x6 t7 I- v
/* assign the tl som board LED-GPIOs*/
# c8 }1 J: {. n: E6 zstatic const short da850_evm_tl_user_led_pins[] = {
* c8 L0 |5 h9 L$ Y4 J& E /* These pins are definition at <mach/mux.h> file */' @, S q+ X$ \, h D0 t4 @
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 ]; b7 x2 O6 R. H, }; y7 N0 g
-1" p; r2 q! r% g$ [* f/ G+ d+ c
};
$ M2 ~, s# j1 n: ?% H/ ~* _: o# Y t; \4 v: p+ _& h/ \
static struct gpio_led da850_evm_tl_leds[] = {
( A2 d7 v s+ W' O2 W" R. r/ t {2 D. \2 @$ a* n( A+ k5 b
.active_low = 0,9 C5 K2 R0 {% H: w0 Z7 A, z8 [
.gpio = DA850_USER_LED0,
* R% R: v/ g% x5 \# H/ S .name = "user_led0",
3 X% R& A) i e8 ^ .default_trigger = "default-on",
4 r* \8 h% F6 ^9 \; F },* l. K4 L+ Z, Y8 B9 T- T
{2 ^$ N$ g$ j3 Y6 k0 j. s9 n
.active_low = 0, Y, Z) e( s" y: a- ?
.gpio = DA850_USER_LED1,9 Y- r" j x$ v; P( F
.name = "user_led1",
3 M6 b( ? t9 e4 G# [# q .default_trigger = "default-on",
. \6 \9 C6 @7 \" G4 n6 P4 v },/ @/ ?1 Q- `7 a$ o% @2 N
{
8 m/ b$ w0 ^ A" s6 D0 @7 b4 \ .active_low = 0,
* J2 `8 g& u/ @5 n# S n _ .gpio = DA850_USER_LED2,
6 t4 [& g. E% r6 C4 M4 ^2 c .name = "user_led2",
* j/ S. g) x' _" ?3 g/ a .default_trigger = "default-on",! H9 d+ j4 d8 g0 z% ~' o6 S
},7 ?' S; M. c" J h0 B N6 E
{
; `, Z; r: `+ ~1 u .active_low = 0,* Z: n1 b$ C' O) `- z
.gpio = DA850_USER_LED3,
/ Y- ^! S: S" V4 \! O .name = "user_led3",
( n$ }1 {. c6 e) g" J .default_trigger = "default-on",
" V. B% D0 A5 q6 ?& d },/ b6 a, M: @! h: t9 B0 b1 t
};
# m% v$ w3 m* g: f" a. K2 w! @
# B1 E( k$ L B6 `9 W% pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# ]) L7 f6 B" a$ l' Z. N7 f
.leds = da850_evm_tl_leds,
2 S+ R8 B; T5 @' k% G/ u: {- f .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
^5 O0 R r3 i) F0 Z& ~5 e: j};
9 N$ `" u, E- k% X8 z0 B5 @' O& b
- _) Q1 C9 ?+ Rstatic void led_dev_release(struct device *dev)/ x/ }5 E8 ?6 j* g4 J$ ]% O
{
8 w' R5 m0 M7 R4 O% d3 L/ A* j};) K+ H6 n4 s8 r0 B' w
S$ Q7 v! x, E. c2 B2 m' X! w; Q0 dstatic struct platform_device da850_evm_tl_leds_device = {- M, [( r; r+ J9 I6 V9 G* e
.name = "leds-gpio",$ R7 t5 W) S. x+ [; s r
.id = 1,+ T6 g' ?2 `+ n; X1 z; M
.dev = {
4 w1 m2 d, {6 B5 M! F .platform_data = &da850_evm_tl_leds_pdata,
6 J" C! D* y9 W/ [" I5 } v4 B .release = led_dev_release,# z: j" x: X+ D9 n, Q
}
" S# y( p- b" f! P# j};
4 x! k: L" v# X$ O) P0 J1 r* [- v4 ^0 Y+ d2 C* ~5 _! }+ [
static int __init led_platform_init(void)
( K$ ]9 v1 ], x) N. A; @6 \{
1 t5 X9 ^& T( D9 J int ret;6 @6 \8 d6 s# [, i+ I& u: X
#if 0. k6 W' a! T% o3 I% ~
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# E' t2 @5 Z0 H& ?+ C, c# a if (ret)7 F' `, ]( R* r0 }
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 V! i( w( J7 r( D4 X "%d\n", ret);5 w( R/ U+ r$ A( N
#endif
" O2 f2 i. l* R% `1 t0 o ret = platform_device_register(&da850_evm_tl_leds_device);
3 I2 b. g; y" R ? if (ret)
9 L. f$ k% z0 {' b. D0 X3 j pr_warning("Could not register som GPIO expander LEDS");
1 s5 ^1 k+ k5 J8 c/ _/ \ else
) A O+ [* h! n( F" [ printk(KERN_INFO "LED register sucessful!\n");* h+ ]7 w3 s+ X, y6 R
( t, z) G- L3 A$ M
return ret;
K9 @0 r f) f}
# w4 T, S4 B' P5 Y6 k. k
( G) Q& C( z0 ^! R: g, kstatic void __exit led_platform_exit(void)
" A. P! \( s* R) w! G- u{
; ^2 {" d. B, z' F6 W) a platform_device_unregister(&da850_evm_tl_leds_device);8 E N3 Y% ]8 ^' S. o9 {; G
( u: [" T. x1 I$ ]3 ^/ t9 w) f' j7 P
printk(KERN_INFO "LED unregister!\n");
: W, A: N) M, f* S6 W( }; a}
, N# d9 {, |0 n
# x7 l2 \9 {5 w+ r: _( Amodule_init(led_platform_init);, Y4 I8 Q; b% m% S9 u. \
module_exit(led_platform_exit);
i9 Q# W$ o: N" q% ]) o
$ L# J+ O2 w! f w9 TMODULE_DESCRIPTION("Led platform driver");
' i/ }+ G5 p7 U ~MODULE_AUTHOR("Tronlong");
8 v: x+ h" ?, N9 L- c) `MODULE_LICENSE("GPL");
) ?0 m4 d9 W, l7 {4 _- x2 t: Q. a+ w
|
|