|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ f5 B1 n, v1 k4 Y, I3 i#include <linux/init.h>" H6 j# ~- A# }
#include <linux/module.h>9 H; i; P8 g# n( Z: N
#include <linux/kernel.h> d: {8 r2 c1 a- Y
#include <linux/types.h>, ?+ L! g5 m( Q! ~! }+ p% j: m
#include <linux/gpio.h>
1 `7 J* _- i0 s+ ^#include <linux/leds.h>
* |# e% M" T: |#include <linux/platform_device.h>) ~9 T9 r- c% d8 a/ S
$ [2 X: o1 r/ H1 o4 L#include <asm/mach-types.h>
0 j( [5 }. l5 e; |9 Z" `#include <asm/mach/arch.h> ^% m8 d+ E0 E- R2 A
#include <mach/da8xx.h>
; y8 n0 L' @* n#include <mach/mux.h>
" I/ p. d1 f1 s/ j+ ^9 m6 l3 p* I" d7 [" S2 Q; @0 z @" d1 ]
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 x7 P. `6 a% e2 V5 m1 Y2 p" w8 ]
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 W, F) Y+ t- W. U3 _- c4 u
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" ?8 q5 L- @) e" K, `' \#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 c6 @, c/ D0 \) b1 _( o, h8 M) O( W3 P1 b6 v6 a* d
/* assign the tl som board LED-GPIOs*/" {8 z4 Z; m4 n. |: G3 e/ F
static const short da850_evm_tl_user_led_pins[] = {! i/ e6 ^1 C/ t- i4 {) z4 u+ S6 ?
/* These pins are definition at <mach/mux.h> file */7 }; Y' d) A3 N3 f
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, l0 Y1 B; y( W8 i. i) r -1$ s) }6 x' _3 b8 r
}; _$ v& t0 u7 X+ Q; g& R% X
3 Z+ G( o3 Y, i; D2 j5 e" i7 Y1 ]
static struct gpio_led da850_evm_tl_leds[] = {
$ P' i. {8 `( b' s) Z {: |6 Q3 L3 ^1 J( w
.active_low = 0,& G7 G1 [' l# x/ q8 a6 a0 p
.gpio = DA850_USER_LED0,
2 h& [/ Q' B* Q: H' Z .name = "user_led0",
7 H8 A7 A R4 B! [5 d+ l .default_trigger = "default-on",4 E& N1 S# v8 W; M6 P" d
}, J9 M2 d5 f D2 A5 z+ [
{
8 K5 {7 p/ U& Q l) i0 t .active_low = 0,6 r a1 V" L* w
.gpio = DA850_USER_LED1,! h& d# G* d( K3 q/ m6 Z
.name = "user_led1",7 x7 `! q$ z4 ^8 E( e
.default_trigger = "default-on",
" ?3 F( T7 F. f* l4 y) T },
( {+ z+ t, Y0 u! A9 B2 W1 ] {
9 j% o1 X9 I( i .active_low = 0,7 N/ d1 q2 q3 ~
.gpio = DA850_USER_LED2,
$ z1 ?7 I& {9 `0 I' E6 h .name = "user_led2",
- }$ B" I( v7 _7 K .default_trigger = "default-on",) e+ f" ?" k8 } Q0 P# M3 E, h0 I
},
6 d- c" I% U" P/ g! f0 K* o {
. N; C8 F8 h8 H .active_low = 0,
4 J3 a P9 u3 W8 {& ]3 @. J3 \9 ~ .gpio = DA850_USER_LED3,; v! D3 Q, ]" O
.name = "user_led3",
( d$ b* }! ~) I \! c* u9 K# E .default_trigger = "default-on",
1 a3 S! }2 S+ {% z: d$ Q2 O },
( I$ a! b4 }! P5 [9 l- l};
) B2 l. u+ t" v4 ]9 ?" q7 ]5 M8 C; O
/ Q: ^9 f' l$ d4 @static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' }( L2 v' g3 S# t9 c$ E7 c/ N
.leds = da850_evm_tl_leds,
9 _$ ?. X' y/ L( Y& y! D! @ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),* X! i2 j' ?) e/ Q6 Z. L% I* c% n1 \
};
% B) b" ~ N+ j" |3 v
% _! i# [- q0 G6 Rstatic void led_dev_release(struct device *dev)0 s" q3 p# W% k+ j6 @5 S
{% w0 d0 y4 {7 l; G5 h' [( K
};
( r# U+ [# T4 G3 H. W0 S8 g' I+ ^% @ K. m( b" T
static struct platform_device da850_evm_tl_leds_device = {
3 N/ u9 r: _ [8 T8 E2 { .name = "leds-gpio",
4 h6 @. E8 Z# a0 Z6 ~) ~ .id = 1,* g7 B4 @/ c. m( J/ D
.dev = {- J. Y, d0 T. P" ^: K( @
.platform_data = &da850_evm_tl_leds_pdata,6 Y( { c" ?# W; K) y9 ^: `
.release = led_dev_release,7 r$ s9 `# L9 c- W
}
5 B) ]$ ^$ T( Z @% j: n};
( y% @/ k& S0 f. ~
; l- S8 n. m6 ]7 T4 Rstatic int __init led_platform_init(void)2 x( E9 l* K1 Z% ?2 q, l% {
{0 g& X5 r" C( K' Z2 m
int ret;
" [2 v1 T' x+ O4 I. M8 e8 q#if 0
5 n+ ?+ p- y& A3 K$ ^ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 J, L' t6 G2 M$ s: _4 _ if (ret)1 e- H9 X" i$ i t* d" s2 g$ \
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# d+ j @7 g2 b8 o7 N; G6 v' d "%d\n", ret);; D$ T! x3 ]0 v$ L
#endif
0 ~% ~3 n& Z' d% t0 ?- |; y& t% a9 j- q ret = platform_device_register(&da850_evm_tl_leds_device);
# f. J+ U0 q, C, x if (ret)
( C# j& e; q3 `! _& s5 i pr_warning("Could not register som GPIO expander LEDS");
; R. a- E& Q4 H7 X' E$ | else
) x+ x0 x `5 f printk(KERN_INFO "LED register sucessful!\n");
# p0 {' G4 k7 f* I0 v. T6 P _" W/ X a+ \
return ret;* I7 O- H7 t; E9 S
}+ }, v$ E t2 x2 I' F. G- |
2 b+ u" t* b# m$ Hstatic void __exit led_platform_exit(void) }2 x7 {3 f" B7 S! h, |5 m" V
{' S: D# q; R6 D, a! O6 C9 j
platform_device_unregister(&da850_evm_tl_leds_device);
0 t+ s' y, x1 X8 r
: Y1 O" E; s2 r! E$ h7 G& S9 m printk(KERN_INFO "LED unregister!\n");
3 \- q$ f1 Z' D+ Z2 l( I! H0 l}! O2 H2 \, F2 [0 Y
$ v/ p7 g# B, k1 u2 c& N
module_init(led_platform_init);
( R: o, @. d3 O9 h# q9 Omodule_exit(led_platform_exit);: ]# r$ D2 m+ L3 y
! d% K* Z% X& i% @( r% b
MODULE_DESCRIPTION("Led platform driver");& h4 c. y3 E& `4 }' Y: N
MODULE_AUTHOR("Tronlong");: B7 ^" A- F8 F. n+ i
MODULE_LICENSE("GPL");. S8 V$ W' ^# I' X# S3 h/ J
6 O+ N$ A9 S: ]. _/ s; J8 S& O
|
|