|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
0 E& K. P3 U$ o2 V) x$ F8 J A#include <linux/init.h>
$ {( G: A* U2 ]/ v5 Z$ L: Q: a- H#include <linux/module.h>
9 k& ?! j6 D8 J1 k/ Y8 [$ w#include <linux/kernel.h>
$ |$ _3 ?+ A, [- t3 @#include <linux/types.h>. J) }3 @5 G( ^+ `, }
#include <linux/gpio.h> X8 f3 v# q* r0 g1 t
#include <linux/leds.h>
7 ^( [- M5 ~. `- P#include <linux/platform_device.h>
. r) N( t. G6 C' o) u
7 c% i$ b4 m3 G#include <asm/mach-types.h>: d" r# A9 J* e; E
#include <asm/mach/arch.h>) C9 Y) M6 F( k% b
#include <mach/da8xx.h>
) a1 k b5 \" \& @2 |0 _#include <mach/mux.h>8 B' x4 J% e. n$ u, \
: V1 y, k3 G1 K( M#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- I5 z c( F4 q/ j, j
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
% }( Q/ j. \( B/ r: I8 G7 Y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 a J" m8 d' f t, u8 Y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! y! v6 \& \3 h$ L3 d: r; ~1 w* e$ I1 _( C5 _: N5 ^2 o
/* assign the tl som board LED-GPIOs*/& K- ~; G7 ?8 Z- p: B9 P0 p
static const short da850_evm_tl_user_led_pins[] = {- |- \6 U# u% Z: o2 s# r0 j8 T" C
/* These pins are definition at <mach/mux.h> file */
4 a: M( a, M) I0 |2 x DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,3 m. z) o$ c+ p5 C" Z) }
-1( S, D' @, M. H6 E
};
+ y! t/ U; u! J3 {! w9 K# j1 t! ~- b( M. x$ ]" \! G0 X
static struct gpio_led da850_evm_tl_leds[] = {
; N% x: G2 B8 d9 O6 i; _( b {' ^9 f2 u1 c X4 S7 U0 d- G% v/ ~
.active_low = 0,
- A9 {9 g" g0 z- Y& G2 j8 B5 w1 w! E% E% a .gpio = DA850_USER_LED0,
- Q* v8 b5 s- c: F .name = "user_led0",
- { X! m# R0 E/ Z .default_trigger = "default-on",+ I l3 D& j6 }+ B/ @ c$ I5 i7 ^5 a
},2 i9 x) ^0 W! ?, w1 j! w3 M
{3 u, k9 {: ]$ ` y
.active_low = 0,& z2 D) y: }7 ^0 a( |- n
.gpio = DA850_USER_LED1,! p3 U. a& L `
.name = "user_led1",0 ^( Q7 ^/ b4 }
.default_trigger = "default-on",
8 B0 V3 _& t' p+ V9 ^. T },+ ^% b& ]. ^8 y2 }0 ^) T& G
{
G1 u; s5 b8 V, D0 y* { .active_low = 0,; x- \* D9 Y' b, ?3 }% e
.gpio = DA850_USER_LED2,' K; _5 Q% J) Y1 p& N
.name = "user_led2",
3 W# @- V& J8 Y, d .default_trigger = "default-on",7 I& ?- C8 [5 ~( U% \" M
},9 V: G9 ]; _/ q7 K
{( D3 I0 N/ }8 \. r: v: t t
.active_low = 0,! m/ t9 n9 y( U! l$ r& h
.gpio = DA850_USER_LED3,
( b1 a- f" h: P: D/ w6 d .name = "user_led3",
0 k3 b. \8 }" [& u .default_trigger = "default-on",( E1 w8 J7 p" _: m; }
},
% |0 a/ X1 a* Z0 }( M};
4 f* W+ B' z0 N4 D: Q1 v9 [+ ~% u" Z$ n! V' m
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. y* _ h/ d3 H" ^9 L- ~ .leds = da850_evm_tl_leds,
h- E: c8 P, H$ P2 E3 I .num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 c' Q" b$ a% X. t
};& [, o1 v+ ?- u. o/ b! S9 K
" z0 y$ E+ z9 m
static void led_dev_release(struct device *dev)
/ E7 e4 t- S! x( S{+ i- }$ g- J4 T) \. n: f
};
. v# }5 M* I$ Q4 H; [/ Z# k: q$ P: ?$ d& T6 A0 ?
static struct platform_device da850_evm_tl_leds_device = {" k0 g' Q, v) Q
.name = "leds-gpio",
! ^& G# g* e( J$ _ l .id = 1,
* ~2 Y# Z6 H7 W: _- r0 s .dev = {* R& g7 p; h! s( a- G0 s0 D
.platform_data = &da850_evm_tl_leds_pdata,! x3 F% p) t' {9 G
.release = led_dev_release,: }. B0 q3 B$ W$ b
}+ o' g; t* H3 H* i4 X! L
};
+ N% X' X6 Q' `9 I
5 v$ r# c C! n! H& }static int __init led_platform_init(void). B9 n) N3 T+ v2 u2 Z' f
{) a$ |. l8 l6 I
int ret;
% v' \; ~* f/ @* F: e! N9 `#if 0
( E: G6 N; P/ y5 K ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# Z7 }! Y. C( s- h' v# o
if (ret). O, j# s) ~/ E+ i( W1 j' ]
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# e, ?' {0 |& |" W/ K* Y3 {4 e. ~
"%d\n", ret);
% I4 h" w- Z' N' v2 R6 M5 b#endif! i' F, \9 d4 [+ h6 x7 X. A8 [
ret = platform_device_register(&da850_evm_tl_leds_device);
* p% [+ u9 w7 U% ?6 d if (ret)
( t: f0 u* L* S( O6 C pr_warning("Could not register som GPIO expander LEDS");
3 I! r" V; k: ?% C' M+ n/ B. U else
5 u% L7 V3 n: {1 V printk(KERN_INFO "LED register sucessful!\n");, ^/ k) S' {% L$ y w) _
6 ]+ ^ n) x3 e6 m9 q# R) Z return ret;( R+ l% F) o& ]) t$ Y4 y
}) M2 n m( N. z$ L6 l" k" o
& n$ [ n# H9 z! u3 w1 e' cstatic void __exit led_platform_exit(void)
8 r- Q3 e# B8 ]{6 p" d, q2 i- p3 c
platform_device_unregister(&da850_evm_tl_leds_device);1 U3 w. ?# x9 s: b0 C- ]: G
/ M4 z/ y0 N K/ F9 b: [" I& d
printk(KERN_INFO "LED unregister!\n");7 h$ M+ Y: ?# E/ h, q$ [6 n
}) Q9 ^& u$ ?- {5 ^" D: e/ Z1 h
4 \* ?+ f! A, t3 @7 M( _: }
module_init(led_platform_init);3 H0 S6 x+ y+ n# D
module_exit(led_platform_exit);
, S7 g4 U# u8 E
) A+ q& A6 ?7 VMODULE_DESCRIPTION("Led platform driver");
' z2 G: j( }0 |7 v PMODULE_AUTHOR("Tronlong");
! q/ Q+ r8 a4 k, V/ c6 b6 ?MODULE_LICENSE("GPL");7 O8 Z8 N4 c, W0 d9 ]' L: W9 R3 e
$ i* S5 L' Q% L- {4 R) |& t |
|