|
求大神给下面的程序做注解,请稍详细些,谢谢。- ]& ]) ?* p4 R
#include <linux/init.h>
: C( t8 h! |, e" D* C#include <linux/module.h>
6 K' s, |9 }! B: c( l. R9 g#include <linux/kernel.h>4 Y& b5 J5 _; m& V
#include <linux/types.h>' r8 P l& K/ y
#include <linux/gpio.h>
& @) X" K; P/ I% r3 y#include <linux/leds.h>9 _& O% z- g: T! H1 h$ j* Q
#include <linux/platform_device.h>
+ R4 N9 _. A! F/ G* g$ U6 A" u, l. z
. V" v/ U7 S7 i" b#include <asm/mach-types.h>
$ ?& z8 P2 l+ M) A8 K1 b* P y2 {#include <asm/mach/arch.h>
6 x$ `, [1 k* g( k#include <mach/da8xx.h>
! s0 @$ g) ^: {#include <mach/mux.h>- U/ p& ]5 z, w$ _: A- f [
: n& y0 {$ ^: r# F#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)# _- `, Z4 w6 m3 \1 u: X
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! ^7 ]1 l0 ?! T$ e, w0 V; s#define DA850_USER_LED2 GPIO_TO_PIN(0, 1). H; \& C9 C E* `) r+ N5 S
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- n! u% G) k( x. H
; } t# q4 D( L/ G# J0 l# l. v/* assign the tl som board LED-GPIOs*/9 [* ?/ u- M! ^; _4 W6 K
static const short da850_evm_tl_user_led_pins[] = {1 o; S$ G2 b- M; Y
/* These pins are definition at <mach/mux.h> file */6 I1 S0 B! K3 E' V- ]
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
4 _& ]1 s X" b1 H9 ~/ e( M3 t& | -1
- ~6 |3 m# N$ b& v! `1 E};, E/ v1 w9 ~& H; f5 B
) H2 A8 {) ~4 R& e0 Nstatic struct gpio_led da850_evm_tl_leds[] = {9 Y m* u- @/ n. ? N, K$ Z& {" X
{
8 j/ ~/ i* q; {$ Z .active_low = 0,
- G& E3 Y& J( d Q3 l& |( n .gpio = DA850_USER_LED0,5 U9 Y) h2 d3 l" O: U
.name = "user_led0",: e6 w6 q" X/ B& {' A+ \& S; C( o
.default_trigger = "default-on",. H& g* Y! k# i
},
- Z6 _9 I/ d( f3 l; y4 k {6 t c% E, i9 q' ?+ a' \) J
.active_low = 0,$ @6 ?2 C- T& V0 v! O# i# O4 H
.gpio = DA850_USER_LED1,
@" K8 H6 e% `. A/ M q) u, R .name = "user_led1",
9 q3 j7 @! h/ o .default_trigger = "default-on",# |7 t( e; B. u: V, }0 P
},
! S9 j5 u6 R: `6 ?+ A/ a. C2 B {
/ I( \) ?0 d: p! S .active_low = 0,' N2 l2 D! o$ ]; K# r3 ~
.gpio = DA850_USER_LED2,
+ a O4 T: I8 u. S% N U, B7 _ .name = "user_led2",9 m' w+ k Q! X3 F
.default_trigger = "default-on",' Z- z6 B- q- ~( p: p. G5 k
},: T' }5 v4 _; B- |9 I( q$ s
{/ T, w1 V9 z3 i
.active_low = 0,4 w9 s( D4 K9 ~7 \" t3 e
.gpio = DA850_USER_LED3,* b' ^1 O. W, ?
.name = "user_led3",
1 a1 Y! q+ ^5 `' y1 o .default_trigger = "default-on",0 K; y' q7 n9 A* n: b' _) h) b
},+ ~; E9 s" e+ |1 ^7 c2 F
};
5 g$ F* T2 l, |3 Q: D0 E. |9 A8 x4 ?1 C5 z. J6 t9 a( `( E
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {8 {. v- O, H; |# l5 \" }
.leds = da850_evm_tl_leds,
7 V9 m, `# @! j9 Y# S( ~ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),. W% V1 Q0 F" x. j
};
6 O4 e7 F: u9 U+ i
7 R1 L# q$ J/ Q+ dstatic void led_dev_release(struct device *dev), S( z. n$ F/ M5 i0 Q9 k8 h/ x
{
- N: o1 C2 s* e; O( |2 J};
% c6 t1 c4 Q! ?1 S# W9 ]7 q, c, N ]+ n# R
static struct platform_device da850_evm_tl_leds_device = {. ]" o1 u$ W1 s* G- {) b- n, a
.name = "leds-gpio",
@, X2 S5 }6 u/ {$ @0 _* y; ^# ^ .id = 1,5 T. b. u/ \+ ?( b
.dev = {) A2 f, ?8 I* j
.platform_data = &da850_evm_tl_leds_pdata,( x% A' N7 H2 Q7 L
.release = led_dev_release,& x4 W0 _9 X9 i# d8 x! F
}: e9 @1 j+ N$ ~& g/ Z: j, H
};& ?9 \ P; X- Z; ?
3 d/ c' ^: P) `7 f6 F
static int __init led_platform_init(void)
( Z6 j3 I. U: \0 B8 l- g4 D9 n' E{
% L0 R" H( H* v int ret;
3 p) ^. U/ j4 @7 e$ E7 D+ m, q2 T#if 08 x, ]5 d5 k( B; Q. S
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); o& r/ X6 B6 c! D* O( v
if (ret)
% o/ J6 ^ K- Q: X$ @9 j! R pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ d) k# z' B% O; B9 V; N "%d\n", ret);1 K: M2 Y, }& q
#endif3 f# Z( e* s6 \2 L! }# L; d+ ]
ret = platform_device_register(&da850_evm_tl_leds_device);
( ?% o5 k/ m; _- M `* l if (ret), r H/ n" j% I& Y
pr_warning("Could not register som GPIO expander LEDS");/ Q" V f2 B' t, h% ]
else
1 ^ a: U. ]( q9 Z; ^9 [ printk(KERN_INFO "LED register sucessful!\n");
) R/ d4 u7 ?) U0 I6 y' r+ P
2 b% ?$ e9 o+ @- l; n4 G& K# K return ret;1 @# g) x. k$ G# ~! a
}7 A$ S8 n9 s5 Y' U2 o' ?5 ^
7 Z6 ]7 i. O3 \% R4 @
static void __exit led_platform_exit(void)
U% `4 L" A6 L# D{' [4 E# h4 O# i8 S$ ^
platform_device_unregister(&da850_evm_tl_leds_device);8 b) A! n4 A( a9 q: D
# ?/ e8 R6 X' [! R printk(KERN_INFO "LED unregister!\n");/ C1 C( W" R5 K" e1 q% P
}# d, J8 F1 ]+ v9 m8 `# N
* [+ j7 b1 q6 U; {( [
module_init(led_platform_init);0 F5 t- ?6 { H$ y
module_exit(led_platform_exit);* H8 p4 y% H' G, o% U: h
% J$ q7 W8 N0 IMODULE_DESCRIPTION("Led platform driver");6 |# S k+ {+ W2 }3 A
MODULE_AUTHOR("Tronlong");
8 P' G$ G- i; w. _( xMODULE_LICENSE("GPL");
4 } {. M7 D! j$ y- G! a( z( p1 Z
: j' G$ i5 |& b6 Z |
|