|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( b X& h, Y9 J( D5 W" Q
#include <linux/init.h>
: U: F) a' ?+ O& i7 b# L#include <linux/module.h>
( ?5 i# T9 L6 Y4 Z#include <linux/kernel.h>
6 ]& N2 E+ v2 Y7 F2 C+ B* G#include <linux/types.h>
' e) n; F8 r4 N9 K {#include <linux/gpio.h>
& S$ y( T6 ^3 x; ~0 P#include <linux/leds.h>
1 A: n# Q O2 t9 z#include <linux/platform_device.h>7 q" t& l8 x0 g! a- _# F4 R
+ Q7 z$ C5 }4 N- K5 I0 H
#include <asm/mach-types.h>: Y/ o8 E* ^# ?' \; ^, O( |
#include <asm/mach/arch.h>! r! j3 d% @+ J
#include <mach/da8xx.h>! I4 J9 w& e" t" u6 I
#include <mach/mux.h>' ]! q& c3 F! R, j9 j
. x2 O, d, Z8 q- v6 v/ I
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! ?6 K8 O% D! ]3 Q. P4 N
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 N5 M4 Q- j5 \& O#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# ?( i9 F6 |5 L! \ Y8 c7 G#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 u& S; R3 Y, l! a# }
! Q/ O* M& d! P8 |$ C: ], k- w0 u' A/* assign the tl som board LED-GPIOs*/
* y w/ P" ~& X" Fstatic const short da850_evm_tl_user_led_pins[] = {
2 T# I( Q, m( z& f. D! _ /* These pins are definition at <mach/mux.h> file */3 Q2 D1 e: j; F) Y" a
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- \. e: ^& @0 g5 S* T! s -11 b G# G) ]3 _( a0 x* l, D- R+ X4 j
};1 ?' {% X p& e" D- G4 j$ K3 f- ^
4 \% K2 n' z% H5 r* H- r: n8 ustatic struct gpio_led da850_evm_tl_leds[] = {
; S" h3 A- Q. i8 e8 H {
# o" @( L( ]. \9 B; L" T .active_low = 0,
1 f5 H s+ S8 ?6 ` .gpio = DA850_USER_LED0,( d) T" I) L1 ]! ]( l
.name = "user_led0",
8 J6 I4 |4 _+ Z( N .default_trigger = "default-on",2 b3 J" y( O$ _. X3 z$ A% B* b: j: a
},
& m3 {% A, A- h/ g8 [3 p {# O' B/ u+ D Q) m* b
.active_low = 0,; K* Z" j2 p( o+ }! Q1 V
.gpio = DA850_USER_LED1,% K) t) K J" g6 h B. v% {
.name = "user_led1",0 K; `/ W8 I* H7 `; k, G) `
.default_trigger = "default-on",4 K1 y& E0 ^) K" \
},
) Y3 [ \" O7 A% |' j4 d {
8 [, E6 c; D- ~6 E6 L; | .active_low = 0,
/ V! j4 @$ Q0 d* C2 E% V" ~; V, m! Y) x .gpio = DA850_USER_LED2,
+ Q. H+ R( l& M% w .name = "user_led2",/ ^1 o7 y- `* w: X8 U0 a
.default_trigger = "default-on",
2 A, s- D5 R" W, J8 s( N+ e, Z1 X },, K/ N T0 a" Y2 f$ z r `; d5 U H* {
{) m/ b0 v5 l$ H9 ~
.active_low = 0,
- G# M0 s( B/ o/ U4 }, W' H .gpio = DA850_USER_LED3,
, [7 ]+ [7 Y" ^; o .name = "user_led3",. L, `+ x1 r# e
.default_trigger = "default-on",1 `5 b k" G' s- k6 O
},
$ E5 C! R4 O: Y, Z};0 e3 m$ I9 l5 \: b9 F1 m% s
4 d+ x6 [8 c0 d$ n
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {4 A* e( w4 _& o
.leds = da850_evm_tl_leds," e, _/ ^* g( y* X
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' h9 M& t7 j# ~};
1 a+ k0 e* v' j% [3 M. s3 C
. M1 s2 Q4 ^5 n1 @9 vstatic void led_dev_release(struct device *dev)# p2 n* K( o$ C* O2 \ V
{' ~* W$ a* s; T8 N, Y5 v
};& N0 y0 ^) }6 O6 c P
/ L7 ?4 M6 b/ z2 e7 J5 H, W
static struct platform_device da850_evm_tl_leds_device = {2 h% { A& z, p2 H% l+ @
.name = "leds-gpio",
& f" o$ ]8 v* N8 o) {- {. }7 x .id = 1,% }$ `# J7 \, m- R3 k- b9 i- i9 y( ~
.dev = {
8 w) P3 x1 B$ ]0 {0 \& N! C .platform_data = &da850_evm_tl_leds_pdata,0 T# w4 c4 C; Q- A' T; G4 N, v
.release = led_dev_release,
+ u7 @ l; `5 x5 c% u6 z2 Q }
" @9 T0 G" ?, W* [, K, b2 x1 d};" x/ h, }9 D6 G* V* k( C+ {- b
0 }& v+ d0 q, t: {/ `
static int __init led_platform_init(void)
( S5 u8 o; m" K* S: H% C{
9 z5 m) w9 N5 \ int ret;' F& X# b5 `% i/ D. r7 k
#if 0: w9 D' F. w- L8 r1 G( m
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) _3 ], `+ z* c2 `0 W) W" A
if (ret)
2 T3 B) }9 d3 J- {) E: [0 \ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 w/ B8 M. X, l. H' X7 _1 Z2 }4 b: n
"%d\n", ret);' z& J3 n5 _1 R$ ^* j: O
#endif
6 R( d) M0 ~* P3 r0 h ret = platform_device_register(&da850_evm_tl_leds_device);; X6 y; h9 I. i. j
if (ret)
5 E; @# |4 s2 T' G, w c- c pr_warning("Could not register som GPIO expander LEDS");
; m% \/ g# O! m( E9 f) h else
* f1 v' t) n1 _( [ printk(KERN_INFO "LED register sucessful!\n");
- y2 y7 T, \9 c
# L$ V/ L4 W. g I2 L return ret;4 u5 F: L3 H# B5 P$ l: U& J: z( H
}
/ \9 `1 z, W1 i' O5 v( w
: I: C1 u" c2 R) sstatic void __exit led_platform_exit(void)' y. v/ d( j0 M- _
{
6 o% F( o- z9 v: y platform_device_unregister(&da850_evm_tl_leds_device);) J; v [8 M1 _; \" E8 |
- x0 S( j; [' j6 i2 T% ~
printk(KERN_INFO "LED unregister!\n");
( u B4 @9 Z% G5 q/ D7 q}' K$ k9 p+ y3 z t( z
0 J6 ?$ m; r- O8 P
module_init(led_platform_init);" O) C3 B3 U% L$ X
module_exit(led_platform_exit);1 E, D6 C: w0 P, I" U# ?" ]( e8 ~
4 l2 S, a" B. ~& d5 AMODULE_DESCRIPTION("Led platform driver");
6 S& f7 p; g8 j2 x0 t0 \MODULE_AUTHOR("Tronlong");
: f+ `; t0 Y5 N! W# YMODULE_LICENSE("GPL");
" x% r0 j0 Z6 F/ R! Y4 t- g9 B2 e2 F+ k$ b# C) R0 W
|
|