|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 v" U* P% d3 A8 n#include <linux/init.h>
& G1 x% D+ L3 r( m4 G#include <linux/module.h># J/ C h3 g4 k; l( U2 R
#include <linux/kernel.h>
* w, X1 R9 }: z1 ^2 v! b. q/ D#include <linux/types.h>
: e$ S, u# f l5 J#include <linux/gpio.h>% V4 b' T+ ~$ A9 ~! S
#include <linux/leds.h>4 {* F' ]* [7 e
#include <linux/platform_device.h>8 O: e) L4 A6 i# k8 V! R. O) A
# m. T1 \3 a9 G! n
#include <asm/mach-types.h>
# V- O5 g( Z# {4 I6 g#include <asm/mach/arch.h>0 G( Z* F- L0 |8 R. N+ T
#include <mach/da8xx.h>0 p3 q* k6 O# B6 [/ _
#include <mach/mux.h>, r1 T" G2 p7 O, f9 w7 b
( b0 s. N, w- s* @- t
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 W* i6 h6 ]+ l: z" p
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 I9 \$ N8 c. N7 R1 n' j#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 l( N* g% e ~: _+ o4 X
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* Q% a% J- @) O* n. W
9 U5 I$ v8 W/ m- I# ?
/* assign the tl som board LED-GPIOs*/
' b1 u y- o" E# q( F1 B6 Cstatic const short da850_evm_tl_user_led_pins[] = {
! D% B, }/ O$ \1 [, L7 Q/ P /* These pins are definition at <mach/mux.h> file */
$ H6 G4 C/ D: u! \3 k6 g DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 \* a+ i& L4 L7 t -1* ?. G# ~# b0 z) ]( s* {
};$ L, ~5 A* X1 B9 T
1 W E; c" N: T/ d- q, p+ N
static struct gpio_led da850_evm_tl_leds[] = {% q1 D7 t, P% Q' g' ?( ?& g# t
{
( q& U; n; ]- Q! R* I .active_low = 0,$ e3 J8 a; a- \# `6 u* e6 S* K( @
.gpio = DA850_USER_LED0,! z- [8 s! x" ?. f6 O& O+ ~) u
.name = "user_led0",
6 ^% k8 e5 N6 R f0 \3 P4 D1 X .default_trigger = "default-on",
) f c& L% z8 \) m },
/ R/ a6 S% t8 x4 x3 X {: W1 I2 G! C. w3 ]% `3 J7 c
.active_low = 0,
" Y& l& `, t8 y( n4 l0 G .gpio = DA850_USER_LED1,1 I& r- V8 g& j0 e$ k
.name = "user_led1",
) b8 |/ u/ ~1 z( D5 } .default_trigger = "default-on",' v+ }: d9 {# m8 [( W8 r" v1 s
},- P7 G. G: W- A3 P' e) n
{1 b7 c4 T! h& k3 [: ~/ }: o9 [
.active_low = 0,& v2 p5 E7 r- [8 E
.gpio = DA850_USER_LED2,
- i$ v# C+ H% D/ T7 z .name = "user_led2",/ j1 a h. `: V; \: g1 |
.default_trigger = "default-on",
2 M" B" c8 s3 {/ T9 D },( i% q- }, ? L) Y, L x6 M
{
1 n" r5 _6 K3 @ .active_low = 0,
0 z9 \. q7 h. c- K* w# h ]# W% h1 A .gpio = DA850_USER_LED3,
9 }3 G! E5 `1 R% v .name = "user_led3",
) D* J* Z0 Y. s' C- i- P5 w .default_trigger = "default-on",
) V( W( y- w3 R6 h/ h" ^ },
9 P! P' a+ P5 b8 {};
1 u% T2 u& s p1 }2 z8 S1 Q2 B4 Z, d: L w& B) \
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' [, ~9 ^; O8 |7 P0 n' j' M0 z$ m7 f .leds = da850_evm_tl_leds,
. k+ E( H3 [. m2 |( E7 U0 p .num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 F# m: X, d+ {- q8 p( c
};
7 {. v3 F6 A' v+ V+ B" B" {5 e( p" ~$ S/ q
static void led_dev_release(struct device *dev) d* Y9 H! q( h' R
{
0 K" o& D0 c2 g. N};/ k5 V2 V* L6 ` R" s
: K \5 Z. W# Z% @2 c1 Y* ~static struct platform_device da850_evm_tl_leds_device = {
0 J; Y$ D) G0 c8 q .name = "leds-gpio",2 A/ J6 f7 F2 L+ z4 T9 [
.id = 1,: ~3 d' P6 W) m# ]0 _, [+ p
.dev = {7 [. G9 X! T/ D0 a+ K8 X- c+ k
.platform_data = &da850_evm_tl_leds_pdata,
& c9 h* J* k& `: j .release = led_dev_release,: _( F. b5 O/ ]! c/ O
}
8 s7 s: g, @; z/ L};! q, P8 ?6 Q2 K7 ^$ ?, S
0 m; W% W/ E% H" m7 |. w
static int __init led_platform_init(void)
- x! y' T: h: t' d{2 {8 \( V6 k1 p9 J0 C+ X) k
int ret;
9 _' @6 h$ `! C# Q$ s#if 0
) R/ i( ?3 n2 k2 R ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 o4 ? d3 `$ P5 M! B3 F if (ret) ?* ^# D4 D& U" q7 ^' E7 K
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% e" s7 [. @- `8 a' \7 d; F
"%d\n", ret);9 s. }6 E5 i' @
#endif
- T; \; U2 O! @) r$ G0 q' r/ g ret = platform_device_register(&da850_evm_tl_leds_device);
' E2 c/ W6 j# O if (ret). V8 F0 E) e8 h; T3 A
pr_warning("Could not register som GPIO expander LEDS");
$ G5 Z) G$ M+ i( X9 P else% P: `1 {+ K9 ~* o
printk(KERN_INFO "LED register sucessful!\n");
, O$ I) L# w' T- ^8 z4 D4 ~7 |0 P$ x6 G6 m! I
return ret;9 b( Y$ ]0 y* I0 c8 Y
}0 T" k& U3 w) G7 Y# |: T! }6 [: G* M
. Z8 s1 N3 c7 P8 T: g
static void __exit led_platform_exit(void)
5 Z- Q' e3 b/ }4 ~9 r9 g* D) E* p{
4 W, ]/ R4 p# @ platform_device_unregister(&da850_evm_tl_leds_device);
- d5 o4 n1 g0 q) y( B- F9 v, \0 e! ^: @( ^5 z' k, W4 j; Z$ l
printk(KERN_INFO "LED unregister!\n");) w& E$ H5 G1 V9 v" D* d( r5 a% Y
}/ \8 I, F$ _& [; B2 j+ B7 ~3 q
8 Z/ ~0 [. N V' q
module_init(led_platform_init);1 C! B$ o K$ b( l( H8 a3 Y
module_exit(led_platform_exit);# d& G! M4 E: C8 f& p8 O' U M$ f6 b
7 x2 s1 h7 g. G' i) R3 }- a% j% q* q
MODULE_DESCRIPTION("Led platform driver");. v) Q! K: C, g" e+ b c" S
MODULE_AUTHOR("Tronlong");, T0 Y! v$ g" u3 j8 f& N
MODULE_LICENSE("GPL");
. ]) O, w$ ~( Y
. r- Y9 Z0 @( M$ }& S/ W |
|