|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
% W% J! X o+ G7 O" L2 {9 }#include <linux/init.h> o6 z; ~; E& ~
#include <linux/module.h>% C1 G! G8 \' I. P
#include <linux/kernel.h>
- h- j: L: j8 F' W" ~: E#include <linux/types.h>
6 G* q5 e2 {. _- h: U: k- c#include <linux/gpio.h>1 G( O" e& ~4 N
#include <linux/leds.h>
, |/ X$ X: T3 ]' g+ X! z8 E' ^' N#include <linux/platform_device.h>1 L v& d$ B6 D0 e
! e1 V, w' U% l* w' q
#include <asm/mach-types.h>5 a; `, Q) t: K8 q
#include <asm/mach/arch.h>
$ r/ G" E5 P) q% t#include <mach/da8xx.h>
5 K$ T/ \2 P: z! c' U#include <mach/mux.h>
5 H" n1 i! o! C; U5 S6 b5 N+ J+ B- Y& ^, a; m
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ l" l8 Z* d6 T. V/ ?6 B
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! @# e/ m; l$ k, T5 W7 c#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" M6 k0 O$ A' q$ @6 }' q. f! d
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ v" L/ L3 v; T9 F5 C8 r m" T) {
& Y& M& v$ F4 w' Z8 b7 `0 r3 x
/* assign the tl som board LED-GPIOs*/
f0 A1 N: Z5 T/ Q: S4 G* `7 Lstatic const short da850_evm_tl_user_led_pins[] = {4 L x. y/ P- T: p
/* These pins are definition at <mach/mux.h> file */
* X/ y- @# L* I DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; U8 i# O5 n/ b6 P, X
-1
# b- S% e( ^. g& Q) W};
& P0 G1 _# a" O" X' ~4 f
" S# P5 S. k$ K, G2 f9 ustatic struct gpio_led da850_evm_tl_leds[] = {
' e1 ?: e6 ~% I& N a {
3 z3 m" V) g( v4 m' d: U( S .active_low = 0,2 Q2 s2 c4 v- ]# C; |; o
.gpio = DA850_USER_LED0,1 Q* Y6 P% Q. m" G+ X' ?
.name = "user_led0",
: S% x! ]7 o& u6 P* B: s$ p. q .default_trigger = "default-on",( T. r* W" W3 c3 w
},: B7 E/ i/ J5 @ Z Z3 o, g
{1 h- ~$ \# e" M7 A. r! a& F2 Z
.active_low = 0,
, j4 g; {( ?; J .gpio = DA850_USER_LED1,) A) k. @5 b i: Q! K
.name = "user_led1",
- f0 s8 H$ W8 g' M9 {0 q .default_trigger = "default-on",3 X6 i+ u1 a: o3 y/ Y
},; N" r- d, t8 M* |# z. I+ B* v
{
/ y3 x) x; s+ G$ E- t. m .active_low = 0,; ?' N1 w4 J5 c1 j% ~& e5 K
.gpio = DA850_USER_LED2,7 G; k( G0 o# m
.name = "user_led2",( \+ W& f. u: S# ]+ P% l
.default_trigger = "default-on",5 x% b, y- q9 @" Z7 c. J
},
. d! a1 Y' Z5 w) ~/ ?3 T {
) {8 t$ V5 h) X, H( m .active_low = 0,# x# F" K, m* T4 b; E; n. F
.gpio = DA850_USER_LED3,+ r+ q4 o" I6 S/ U! Y% M
.name = "user_led3",
% L8 n8 P! n# { .default_trigger = "default-on",
, j- N2 k: \" j# v# d1 O/ l },
q, y0 g# f8 q- s y. J1 v};
6 l" k; k# C9 U& O3 b1 M# N/ O4 u; ~/ J+ C
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- o- y0 Z m/ w i .leds = da850_evm_tl_leds,/ b/ u9 F2 o& r, R
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* C0 y% `4 h$ m! C/ U! }! E};
d5 y+ V" X. W& G! M$ \7 X0 A4 C; E0 s( {" c
static void led_dev_release(struct device *dev)
3 U4 _( ]4 l1 e! q }{
( J& ]; q; n% u! I};& f, t' _ B7 ]$ L" h9 Y& j* C
8 u0 [6 y, J! E2 ?static struct platform_device da850_evm_tl_leds_device = {2 W+ F- {0 p( `( ^- A6 P
.name = "leds-gpio",0 b# h) h1 L3 S" i6 m9 ~/ M
.id = 1,
" r$ p; O: \/ @4 d; v .dev = {' f. G; {5 p, Z
.platform_data = &da850_evm_tl_leds_pdata,# X+ G3 B8 Z3 |' @1 Z+ T1 A! c
.release = led_dev_release,8 [1 n" T1 G! F$ \
}6 M1 |' Z9 P- U6 t3 \
};
# t8 T0 [( N' ]1 Z/ ~/ \, e. A1 B% \3 O6 v
static int __init led_platform_init(void)
* Y/ K) M# J' H6 Q% Z5 T{; h! a/ y7 J: _9 S$ n
int ret;; [, G, `* T, a
#if 0- ~ ?8 X! n* @' t# w3 w
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' d- C, o* X8 I. Y0 ?9 l6 N' [" A
if (ret)- x8 F8 @- M- D- h) x; a
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# I6 y6 F; o/ c2 E
"%d\n", ret);
! N0 D6 W) i; H; t* k3 Z5 N#endif
$ W4 _" h6 H# Q- _% \# Z. k ret = platform_device_register(&da850_evm_tl_leds_device);1 K% `1 D: Y0 K) Y- {, E
if (ret)
! o, t" m; C6 c; |4 t o pr_warning("Could not register som GPIO expander LEDS");
) D! S" a6 {' O5 _8 N else" h- q+ q8 _- b, a/ [
printk(KERN_INFO "LED register sucessful!\n");
5 F& K9 x1 H H" ]' s- C) R6 ^& h+ h2 `# o. _! n: L
return ret;1 R; Y& Y% R1 [8 d& a% N8 O9 r' \0 `
}
; y+ V1 V o) ~5 `$ S2 e8 h; q3 g$ P/ O$ F1 X) C) v/ `7 a* D
static void __exit led_platform_exit(void)$ j. J; F3 u6 N, E! @( Q
{
`$ {$ G, `- r/ T: F h% T4 D platform_device_unregister(&da850_evm_tl_leds_device);% T" `/ _; p& ~6 f' G% V
, D' i3 X% _5 Q: Z7 N$ T5 m printk(KERN_INFO "LED unregister!\n");
9 X& X/ t, u; a; B}
0 `6 B$ K, P! u6 C. \: D) m0 r+ a' O" h8 }. S
module_init(led_platform_init);
1 q7 Q* R: N3 H4 P2 [" a( C6 [+ kmodule_exit(led_platform_exit);; I, o9 M0 a- |; |8 L8 i
% b& k8 ^& |" m( W
MODULE_DESCRIPTION("Led platform driver");/ C+ r0 d5 G9 G4 \
MODULE_AUTHOR("Tronlong");
' M. X& W/ \) ?/ f5 oMODULE_LICENSE("GPL");
' Y$ @& E: C# ^. m3 m: Z
1 H% Z) S7 R; G, W" c0 c4 O |
|