|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ b0 G( `0 u" J1 r+ H
#include <linux/init.h>0 l* R2 T8 t6 A& K4 W& j+ r* r: @
#include <linux/module.h>
- L n4 l5 G* [# W) h#include <linux/kernel.h>+ n6 v6 c+ E2 V
#include <linux/types.h>
; N2 A( {( @% q7 W$ t# V) C#include <linux/gpio.h>' W0 l7 A- a- m- d) u. ^; o& M
#include <linux/leds.h>- c2 d# z" j% A$ a, A3 c' j
#include <linux/platform_device.h>2 u. V* y( S- E5 q# |
- V$ D. ?6 n Z8 p1 l9 X#include <asm/mach-types.h>' W2 f2 q P4 R) p! W$ O) f* x/ y1 {
#include <asm/mach/arch.h>
2 `8 |9 e& O8 l* D0 H- [/ W#include <mach/da8xx.h>9 e+ l+ `! R4 F& V& `6 G. a
#include <mach/mux.h>5 J6 J6 o1 ]3 `. i
1 s. n6 j0 w! q3 Z/ t#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 d1 Z) s" K* ^- x8 P4 \: [
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* v/ P8 [6 x, q4 [ S! Z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); ~9 d- ]" Q5 O' u3 t% u
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 B( M5 C! u" d" q
! k' o$ H/ k# D( c/ c _! z
/* assign the tl som board LED-GPIOs*/
: W( M" Y: a4 `; O% C' bstatic const short da850_evm_tl_user_led_pins[] = {. |2 K0 @. S P5 S" K
/* These pins are definition at <mach/mux.h> file */+ f. {& _5 v" H# b( i- u
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( l9 x* E4 ]' R( E
-1
8 u" x+ f# E# d* c};! i8 {" `8 p# v) U+ G
\: |5 J' S2 }" E7 Q# N
static struct gpio_led da850_evm_tl_leds[] = {
, |" J' w) _! l+ M {! @8 w6 M+ _+ V7 L( p& b4 y
.active_low = 0,& ~# C \9 D' L' M
.gpio = DA850_USER_LED0,
& J w, ^" v l4 U .name = "user_led0",
- M: \; q6 j" @3 r; t .default_trigger = "default-on"," z% N! z. N1 ?$ o3 ~ Y3 d
},1 } ?1 A! x0 }
{0 a' S* J0 Y9 B2 D, `3 |
.active_low = 0,1 W$ b/ W- N' q9 b
.gpio = DA850_USER_LED1,
4 ?% _8 c$ v0 A6 @ .name = "user_led1"," F- ]: Y/ ~" J+ d
.default_trigger = "default-on",/ U" k: l2 l- E, k/ F, T, v
},
. A. _' S' L& p8 w {
Q( F$ L' |( Z- [5 c4 W .active_low = 0,+ c# U5 t! R( c2 w: m2 R. h
.gpio = DA850_USER_LED2,( f/ r4 S9 y4 N Q. \. E4 |
.name = "user_led2",7 D3 e) F& L0 D8 [ S( ^3 `3 R
.default_trigger = "default-on",
5 `: z/ D- [$ \1 B },
_6 o5 L+ j/ w: i% T+ C {
1 } e3 ~& t- ~. W4 h v8 t .active_low = 0,
+ H) |2 W- h( D9 ^( S .gpio = DA850_USER_LED3,
7 W* O+ a3 E" p! K# |! [ .name = "user_led3",; @- u* M: l- t* }
.default_trigger = "default-on",5 z( M" h t0 c
},
# h5 f+ L& G) V, \: z. V};
/ K- a7 E3 @4 t) p! p) E
1 \7 G; T" g9 n" N5 jstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* y( j7 |0 p# J, {+ c
.leds = da850_evm_tl_leds,
9 r3 s. H A ^: Q, t .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 A$ l4 y' z+ D6 p};
6 g6 \% g8 Q& x( U) P1 ^9 N$ L6 n. `; s; {
static void led_dev_release(struct device *dev)
7 t6 s$ {) L6 l! }* V{
, K f( [. B$ V* N5 k7 P};
' z A, @- v0 C+ L S& A$ y/ n8 \+ L+ b5 e
static struct platform_device da850_evm_tl_leds_device = {% J& g U6 H. ~
.name = "leds-gpio",
- z m! i7 G$ I7 ]! r* a. k7 C | .id = 1,$ R* Y& c2 N0 F. H& X
.dev = {: h% [5 n) `' {2 g# o
.platform_data = &da850_evm_tl_leds_pdata,
9 a; z6 W7 l8 o' ]! B1 u! \ .release = led_dev_release,2 [ Z: U7 h) D U! W
}
2 N3 q% ]- v! L: u};
0 M; G" k4 k1 @3 R% W5 m0 @0 r1 e! g" C" T
static int __init led_platform_init(void) F- @& O3 |9 l0 }( C; v1 T
{! Y3 `' m9 z1 b- {
int ret;/ @: I! u( z. f5 e3 Z
#if 0
' }% l* W- c0 G/ |' e" L8 a+ Z4 |4 @ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);9 t# v. F k& ?' s' i+ B9 g: x, \
if (ret)$ @0 o! v, j+ b
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 n- Q# d. s- h* Y' r' N5 _" U* _
"%d\n", ret);; c! G+ h' A- I' J
#endif$ [; _- m7 B( k6 H4 z/ @ E" ?0 q H
ret = platform_device_register(&da850_evm_tl_leds_device);: y9 g* V3 I- r2 f1 V# |
if (ret)
8 D+ D: X# {* I3 o s. e pr_warning("Could not register som GPIO expander LEDS");
: V L8 z8 ~) E8 S) | else) z# X O8 W8 D0 K! ?$ t1 X+ X
printk(KERN_INFO "LED register sucessful!\n");
9 F5 R1 o0 q5 [3 G6 |& W7 K( T# E: R% |
4 \1 F- W) [, c" m3 O( }3 ~* F return ret;
5 w1 E5 I+ [6 d+ P8 h}
1 B {# G- d4 f8 O8 U' w/ x% N5 K' s4 ^6 Y9 w# m, d, W6 x
static void __exit led_platform_exit(void)
, b1 h6 B ^, W7 u* W6 l{7 H1 F0 m: p* b) K6 p/ E( _
platform_device_unregister(&da850_evm_tl_leds_device);+ A- Z# y% F' n7 S
/ C2 Y) G" o' }! \/ b printk(KERN_INFO "LED unregister!\n");: d( a9 v3 K3 p5 O
}
& l9 B! ^# y' V) J. Z& k2 b4 M6 k6 d G7 I- K5 f) y! E+ S9 r
module_init(led_platform_init);$ k# l9 H3 C6 ^9 I% v2 H
module_exit(led_platform_exit);" l, a, X; I4 O1 B O, o+ U
/ y( W0 Y2 f8 h2 E ^3 C7 @
MODULE_DESCRIPTION("Led platform driver");$ L2 | [% i r% A
MODULE_AUTHOR("Tronlong");+ A5 o. | B, [3 J* Z6 G) g
MODULE_LICENSE("GPL");
# L# `+ @( [% D$ L- \, m& ^
1 C5 M' ~# H! Y2 w, V' a |
|