|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ t6 v* u, O5 D- [0 T9 T8 Y' S; W
#include <linux/init.h>
4 @: K, v! I# I2 p- v, J#include <linux/module.h>
7 s t: z1 ] E5 _* I#include <linux/kernel.h>
) e/ t8 S4 M9 \8 c) x#include <linux/types.h>9 _! X6 O& S4 D' e+ `4 {' N
#include <linux/gpio.h>' _! f1 K j* d' b& r T
#include <linux/leds.h>9 H4 l2 C* f0 X/ g& K$ \
#include <linux/platform_device.h>$ m- T* n: J O. a4 C7 t! a
0 z+ q I z, ? g. }! o#include <asm/mach-types.h>* C9 `9 Z$ A0 t
#include <asm/mach/arch.h>- j% |" ^9 G2 l1 R5 E
#include <mach/da8xx.h>
1 C/ l) H2 i0 }, c) S7 r#include <mach/mux.h>
/ P( A% T. a$ w9 B6 W' z* g. I" b: x- k/ }. x3 f8 ~
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
( ~4 i8 V0 r( }1 d5 t7 J#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)# H0 C* A; G& V+ @1 E) C/ Q. q' e
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)! r" \! G: h7 S* F9 F( `
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
`+ N1 _( h% X' j- Y3 F& H6 I) r# f5 j2 d% W
/* assign the tl som board LED-GPIOs*/' l; n1 I& Z/ E( D! c8 V$ J& [
static const short da850_evm_tl_user_led_pins[] = {
' O: g4 N1 V! l1 }- u3 W2 k /* These pins are definition at <mach/mux.h> file */( j3 Q. C* p" s* c4 x" i, f
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 } L) G! d1 ]: ?' B" `4 _
-15 D6 H# F* }" g5 n3 d0 p; L8 Y
};
+ V. |4 a" L, k" q" G! }# S7 X3 v( t; ?* x) w
static struct gpio_led da850_evm_tl_leds[] = {$ @. k& N) ]: ~+ w; v/ p
{
6 T6 \8 Z" ?0 x6 v! J .active_low = 0,
) K0 U9 ]' j) o9 s .gpio = DA850_USER_LED0,
) v" o! p7 W5 G$ w" E; y .name = "user_led0",
% b! e1 i9 {8 o! E1 b2 U .default_trigger = "default-on",
2 s* D* P! p2 b% Z9 _$ P/ v },
: E6 x* r, @& M H' w) l- N {: S$ J0 z( E* G8 y- M6 [
.active_low = 0,* q0 H; i: [2 L* a4 T
.gpio = DA850_USER_LED1,
- f- k, @" B! a" i' J O4 L .name = "user_led1",' R2 e% q% j. n! j& V- }+ C
.default_trigger = "default-on",
4 T" E! I* Q+ Y* w },2 j' a% B& N% I/ W7 Z
{ E/ C- K2 S2 V2 g5 t) U. ~
.active_low = 0,' o z8 ?, k* A+ X
.gpio = DA850_USER_LED2,
z- r6 g R p7 o .name = "user_led2",
- j. C' w) Q- p# `) K# O .default_trigger = "default-on",
& h7 J5 k) n0 K( a; V0 v1 e },
6 L1 G Q. u7 q) s; l {% u% ?; I4 F+ V0 \; E# ? F1 |( g
.active_low = 0,+ D! t M- U# U2 E: }* r
.gpio = DA850_USER_LED3,
; n% l! L, j! x8 U .name = "user_led3",$ P% c5 L+ S$ j' k' Q! s
.default_trigger = "default-on",
M( m `1 [2 l },
; C+ D+ T! M& [' y0 r};! `! B8 s4 S. L! y
1 `, F) t) |! o) Q6 z5 D
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& y0 |+ o4 w% ^( T .leds = da850_evm_tl_leds,, p( P; ~' B7 {; t) j
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
: w- K3 C; q2 V& l};
8 @. r- N3 u3 w4 J) ]8 A, L K; j7 v1 {- `+ D
static void led_dev_release(struct device *dev)
- J) b( K1 V: ^% \4 L) ^{" z6 @4 V; G( Y7 q) p* r+ q. {
};
& j7 J+ L k$ y: }' W+ Q' Z7 z0 C5 M; g! @, R& _, S- t3 o& g+ {
static struct platform_device da850_evm_tl_leds_device = {% y' c6 |: G; q. b% a
.name = "leds-gpio",1 O+ W7 P) F3 ]7 g+ [* ?$ X1 i( B
.id = 1,. _( O: w' c/ r
.dev = {
4 L# Z" @5 \% E/ y/ X, M( r9 r .platform_data = &da850_evm_tl_leds_pdata,# ^7 P5 m( s1 I& q2 ~3 R
.release = led_dev_release,5 R- [4 b( _( D0 d/ B
}
' C5 B$ @- ]: y& r7 g};
+ O7 E! p7 P+ S: d# Q
2 l0 L* T% y) ]static int __init led_platform_init(void)
: W/ \3 v6 C/ L) g4 p# w4 T# t% B{
) |: _4 b8 H& |9 v' H0 b int ret;' C7 E6 G, o) A# N* ^7 v
#if 0- a, Q: P- [! ~8 T1 N! j
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ z/ w$ g( z% S; h9 s) m6 m$ h if (ret)/ p: Q& [4 a: P
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& M0 ?+ F6 _- @, r4 J5 ~0 ] "%d\n", ret);& t# \- r8 r& X( M9 u! h
#endif
1 G( h/ ^$ H [; n! n ret = platform_device_register(&da850_evm_tl_leds_device);0 a y' @6 v7 W' f3 Y, l
if (ret)5 n- n. e/ F: g7 F
pr_warning("Could not register som GPIO expander LEDS"); B, \% ?+ H: X: o$ @+ O
else7 }+ H/ \1 u" C' H. w$ E7 c3 [. k
printk(KERN_INFO "LED register sucessful!\n");5 H% N s3 R2 g# O5 z
; t! A* e6 l# c* |& j/ |7 M" ?
return ret;. |) s8 g k7 e
}
6 f3 ?; N. ` q
+ V0 ~, p9 X& m' z: C! Tstatic void __exit led_platform_exit(void)
. C2 l/ G' @8 P{
( U B" y! E& B, Q. v( E4 `, @ platform_device_unregister(&da850_evm_tl_leds_device);) I* U" O$ k4 [0 h" B9 e# v @0 |
3 N3 X3 B- @. z. N* }, F printk(KERN_INFO "LED unregister!\n");7 {+ F( m( {4 W
}
$ x/ }1 S, N5 X: `& D6 \
7 I2 s: c- K- C. _ a1 F- G" Q ymodule_init(led_platform_init);
' K8 b+ A* S _+ B; V6 u: |1 Rmodule_exit(led_platform_exit);
, V% G: {# d# `, R5 g3 @2 A A8 V+ `3 F9 [) x3 G: J( I
MODULE_DESCRIPTION("Led platform driver");4 Q" [+ S# t9 J$ i5 @
MODULE_AUTHOR("Tronlong");
* M% `6 o! [; A! j! @2 ^MODULE_LICENSE("GPL");
, F- w9 V1 {2 @$ p7 Z. l& R) B8 g+ w, B1 Q- S' g: c! y
|
|