|
|
求大神给下面的程序做注解,请稍详细些,谢谢。1 l8 L$ G i8 c, N1 ^0 d. r
#include <linux/init.h>
, p' f8 |' ]; _; q# n C# ^#include <linux/module.h>
?. o) V) K, E3 a% [ n" |#include <linux/kernel.h>& f8 r+ B- e; m2 y% o
#include <linux/types.h>- {+ z+ d$ S, ~; W4 S* K
#include <linux/gpio.h>
5 _' X6 N5 Y4 L2 V! X# K9 m( Q7 _#include <linux/leds.h>
3 V t! m' L( L) L: \9 Q$ q#include <linux/platform_device.h>
8 ~* H: a* r; T8 Z+ q
* k1 @& {$ i1 p( a# }" s$ `( M#include <asm/mach-types.h>
i. ]) V9 O& Q- \; m3 @1 b#include <asm/mach/arch.h>, V3 e6 W* E5 @9 k. {
#include <mach/da8xx.h>
4 X: m/ }, f v {& \0 k#include <mach/mux.h>
3 R5 g7 H0 s0 H4 X4 J# C4 V9 x' K
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 I" m3 o6 Q3 y% h+ n) o# S1 n- T
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 K& r z( M- I$ b. J+ A#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# C% b- [2 w1 Y; I9 A3 ^
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( A3 I I" R4 d
3 M& \# v( ^/ x/ E$ f/* assign the tl som board LED-GPIOs*/
4 w! N: ]% n0 ~0 Ostatic const short da850_evm_tl_user_led_pins[] = {
0 ?( W3 S! d2 z2 p5 D& h /* These pins are definition at <mach/mux.h> file */
, [: f& }, k, C- H" R DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 ^( }2 Z+ x2 v- B1 v -1
3 a& N8 z/ k6 E* e8 Z};) ~$ s$ }6 Q. v3 P
6 Q1 g. h- u8 J' S' X; O( k% c
static struct gpio_led da850_evm_tl_leds[] = {9 J& }* f) o( c Y
{) }0 \) V. J/ b. b4 p1 S
.active_low = 0,
/ {4 r G% A* _6 y; _. |. @4 t .gpio = DA850_USER_LED0,& I# x+ m: h8 V- o' f" ~5 b* \
.name = "user_led0",
7 e2 }$ p( Y7 s# R+ b4 m .default_trigger = "default-on",
' L4 u) Y8 C) i! u },
v$ \& ~) b% k+ @9 L' j$ m! z; M {& C, Z5 z. l% T }# ]4 L h+ U
.active_low = 0,5 e' k3 s% W8 A5 g4 D2 S* R; B) E
.gpio = DA850_USER_LED1,) |. h+ G! D1 J' u
.name = "user_led1",4 O7 Q% p( p8 Q) w9 e
.default_trigger = "default-on",/ A: b! v- S0 @0 [3 X0 {
},2 l# }* e: W; g
{: ~ a3 D4 ]9 d& i+ ]: B
.active_low = 0,4 f# n: k& ?& ^9 m
.gpio = DA850_USER_LED2,
- R k2 x+ {# }. ^6 w* ` .name = "user_led2",
9 Q- W. o& A" t .default_trigger = "default-on",. f6 B Z2 q! ?% N
},) J$ k! u* |( A8 ]
{
- A0 M8 `0 u3 i/ |* } .active_low = 0,( M. g* K, Z/ B' H$ t( f2 ]6 ?
.gpio = DA850_USER_LED3,
- M* M+ d# Q. I" Z% d: t .name = "user_led3",
/ q& L/ U( _8 H4 o+ _% j3 p; N" v- j .default_trigger = "default-on",
$ K6 l. H: R4 s6 P1 t: S" ~ },/ u& l2 {$ X) |, h
};
$ K( f {4 I c, X5 H9 H) y- L; A0 R0 M8 l. S" V3 e
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 ~$ i6 |; n- w) x% U. O' g& E; |( i h
.leds = da850_evm_tl_leds,3 ^ K( f) ]' K# A# n p$ c) B% W/ m
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),: `, O b" ?' j7 q8 @
};9 @8 x( k9 S! e8 g# N
) T6 H; ^% W1 i- }7 n- i; Dstatic void led_dev_release(struct device *dev)
* O5 g( \. d, J/ X% `; v& f8 ?{& X3 Z6 w( d* A a
};
) \% y% t0 @) `# P2 i
/ s0 J* W9 ^3 z+ g3 Sstatic struct platform_device da850_evm_tl_leds_device = {
' W8 y0 y- {8 J- [2 t8 b .name = "leds-gpio",
2 ?9 H% q- X6 B+ e% J$ M! z .id = 1,9 r1 |8 M. a/ _) [2 P
.dev = {& `9 n8 O6 h% c
.platform_data = &da850_evm_tl_leds_pdata,* ]1 s; {5 J; W4 p9 T4 }
.release = led_dev_release,' x2 L9 K. q" s, i- D& p
}+ ^2 T) m6 b5 R1 a
};
, }6 _' |' j4 T6 J* o' g& Y/ E) r8 p, v
static int __init led_platform_init(void)
5 O- z5 k, m! m) j* a+ c% I& N9 o{$ X( M4 W/ ?6 [( A8 Y
int ret;
2 J3 P l" }% E X* T0 V% W5 ^#if 0
: j9 ~% w$ b& o! f$ a/ W% a ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* e0 j+ b/ q& ]; u if (ret)+ Y* x$ Y4 m" I' w6 e2 V
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( R8 u* [& s9 J+ {2 l" ~3 Y4 s, o
"%d\n", ret);8 B/ y. }* D. X3 I, l1 x
#endif4 \! v t' ]) @. L
ret = platform_device_register(&da850_evm_tl_leds_device);- q: ]6 B7 _& i
if (ret)6 `9 y. t4 x$ Y; a: e. [: n# f
pr_warning("Could not register som GPIO expander LEDS");
( Y+ v# P4 |; P Q7 z) ] else
+ @( r9 w/ }9 o& w7 J printk(KERN_INFO "LED register sucessful!\n");
5 w+ `; ~ Y7 Y3 ?& x
6 P+ y, V8 P9 s return ret;% n' w9 o% H( Q E
}* m; ~! [9 C$ l* s
# Y7 p8 V+ V" _% U) _: _ dstatic void __exit led_platform_exit(void)1 |) M. n' X- e5 e$ J
{+ o& n, P3 ^8 e/ A
platform_device_unregister(&da850_evm_tl_leds_device);1 L5 `$ l2 L- u
/ m' ~' g, }2 Y& N0 L+ ^2 C printk(KERN_INFO "LED unregister!\n");, D1 h& H& A/ N! S& e! @. `- ^2 X, z( D
}
% Z1 E* m+ Y# G9 f3 [
4 ~7 }# `* K* B/ ?2 V8 i3 Hmodule_init(led_platform_init);
; D" z* n5 h/ g' @" omodule_exit(led_platform_exit);
, L. Y v+ n: o6 V I9 |8 ?" s' A" v% f1 ~
MODULE_DESCRIPTION("Led platform driver");; A# u0 P9 I2 u0 l2 c
MODULE_AUTHOR("Tronlong");
7 s: `4 }7 F3 d/ H( v! TMODULE_LICENSE("GPL");5 G2 n+ b# i9 g# n! ?" K
9 P4 v5 l8 X. o! ?2 r0 i0 Y$ _
|
|