|
|
求大神给下面的程序做注解,请稍详细些,谢谢。- i% Y8 |! ~* \9 b5 B7 I
#include <linux/init.h>
% Q H( E3 ~# n. r2 Y2 d#include <linux/module.h>4 ~! b) N6 h [+ S
#include <linux/kernel.h>
5 s9 ?8 J+ D6 }! P#include <linux/types.h>
& f: N+ s, [9 o8 _#include <linux/gpio.h>
2 e K1 S- g% x# z9 }#include <linux/leds.h>/ u- N: h0 O# |0 Q+ |! U: f
#include <linux/platform_device.h>
, E3 o% g8 M5 H- Y1 L2 @ L5 k4 Q
8 x( n! p" m& S3 A1 y( D: Q( E#include <asm/mach-types.h>! V" l" F1 {8 h6 F% z7 Y
#include <asm/mach/arch.h>* J; v( w% p. F3 S
#include <mach/da8xx.h>
. d8 P& G" ?. ~) [#include <mach/mux.h>
9 W5 d, h3 V+ p2 A& ^9 N3 H( R) w, u1 @* `6 M# d, Z; L
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ C5 ^# e8 U& ]1 P1 _#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" K. A' T4 \+ Z( ?3 b, i* N, e#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 j& \9 @7 S! q+ \; h#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): j' m, i; o) c* K0 U& E! y
1 v9 u* f9 G6 m: R& b/* assign the tl som board LED-GPIOs*/
1 P% @/ h0 X) G( R. i' S3 c, wstatic const short da850_evm_tl_user_led_pins[] = {9 j- P" s2 @1 g
/* These pins are definition at <mach/mux.h> file */9 D# G+ Y* f$ H0 l) t
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ V m+ P' W0 x5 v
-1
& \6 @. ?6 x0 o. v& J};3 V6 K* Z3 l" a% Z6 @1 q. z! C' o
" h" F' a( u5 _) |
static struct gpio_led da850_evm_tl_leds[] = {- z# K9 y" S* m
{$ k5 W/ }: f9 L
.active_low = 0,7 M, N/ _( t) h+ e0 n- k r5 Y
.gpio = DA850_USER_LED0,! Z$ Q B" v8 D7 R, D/ A: h
.name = "user_led0",; G- P, f- m2 g5 p9 u
.default_trigger = "default-on",
+ f: ^/ z1 G( W& { h/ h },
1 I. ~5 L5 \/ h {" E) _9 [8 H7 C1 h O" N9 t
.active_low = 0,
! {9 T6 X- z; e* p! q+ n/ ` .gpio = DA850_USER_LED1,
) W5 O7 a" ]- I# k2 o ?; k .name = "user_led1",
7 y4 p. W) z0 i .default_trigger = "default-on",# q% I% l) V- e, ^8 T& x* i# L
},
O" t+ p: r+ Y8 F {* c( S) a1 n, q. m& `1 e) t2 Y
.active_low = 0,7 J+ J8 f9 Y8 T# \0 {6 L
.gpio = DA850_USER_LED2,4 f2 M6 ~0 H$ c- T! T! g) r. d9 p9 Y
.name = "user_led2",
* C; I8 ^# Y( s2 I- U- U1 | .default_trigger = "default-on",! \% o) g ^+ P0 A5 W
},' R" a7 M6 r" o# F4 u# p! v
{$ \/ N+ ~; `7 i3 k1 S9 c& L
.active_low = 0,
; x* Y8 _0 C6 W4 K .gpio = DA850_USER_LED3,
/ e7 p/ Y: _ k% { .name = "user_led3",% Y( Z% C" ]6 l
.default_trigger = "default-on"," c% c Q8 B; r
},
% o6 Y1 s a7 y* r) b2 L* j: A};. r! r0 G' ^& X8 d; Q8 |3 G
( @: L' R+ i; \ V& F% O& xstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
) z) ?) y" R. C6 [# `' x .leds = da850_evm_tl_leds,
4 _9 @( {; B. k4 W .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
- m3 n1 m: Z8 B};
. j8 |: q! V1 q! A% @9 v
: p- J6 |/ O6 Astatic void led_dev_release(struct device *dev)
* q+ C4 J9 G$ D4 e! |3 {' m7 {{3 w0 Z# j+ o2 j5 Q
};# Y( W N' X/ G! w8 l9 J. b; A# y
: A9 k; |2 Q( f# D/ U
static struct platform_device da850_evm_tl_leds_device = {. m+ V! q. X; V' I3 H
.name = "leds-gpio",
' O1 c' p( p7 v5 ?- ~ .id = 1,( n5 {- ^" c8 |/ K8 _* {
.dev = {
* _3 l7 o2 g, q9 }& s .platform_data = &da850_evm_tl_leds_pdata,
# _7 K: j7 b& w* ^ .release = led_dev_release,; l5 w4 L' Z: S) }
}
; Y3 x L% a' c4 i: D7 Q9 b8 t};
/ p) \5 u+ m! G: H
6 U# j7 B0 E) k$ `: n- P% U" rstatic int __init led_platform_init(void)+ ?& R) g% |- T5 v$ q
{
) {4 Q1 e A3 H+ N) l int ret;4 [& ~: h6 y: L
#if 0
+ ~! q: j# \0 a3 |" I ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& N1 i2 ]0 f _; r if (ret)
1 [+ p% m& ^3 o pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 r& r* u9 C+ S, y ~7 j- N g "%d\n", ret);
) [8 v# i T7 l4 o# v9 K#endif) |+ R3 L/ l$ k# y8 b% W
ret = platform_device_register(&da850_evm_tl_leds_device);
9 q0 h' K: o2 |* N1 V if (ret)
+ v0 ~2 V0 V' P& t) z pr_warning("Could not register som GPIO expander LEDS");3 {1 w$ E. B7 P( J! B. F5 b; N
else1 _3 Q* e( S5 k; @
printk(KERN_INFO "LED register sucessful!\n");" j4 H! l x$ j, J9 R2 @
! c; k7 a2 o6 a! Q7 N
return ret;0 W9 S) D" C) _; T% N
}
9 m" d! B7 w. y1 `% N4 v# r
) s, Z2 V' w: b# h+ Xstatic void __exit led_platform_exit(void)
1 h& c/ Z x& a8 t6 D2 P8 G/ |/ ]{
0 }5 |" x$ i% l2 r. n7 l7 o# t platform_device_unregister(&da850_evm_tl_leds_device);8 O8 d8 J5 V% `# E$ i. \
z( M# Y- [/ V" c3 E5 h, g' }1 b6 v
printk(KERN_INFO "LED unregister!\n");3 T+ m, t$ e" O! @% I, F
}
( v' k' N) m, i, B6 Q% g1 v" N0 k: M3 k O( w( A7 M. D
module_init(led_platform_init);
/ b6 c6 B2 ^/ qmodule_exit(led_platform_exit);: [' @/ [- U. P$ _/ V' e) M; @
. @: I. C4 J8 XMODULE_DESCRIPTION("Led platform driver");
. F$ O7 z, e8 P/ i2 `; y3 v. G# p* F. W( oMODULE_AUTHOR("Tronlong");2 f5 h; F. a/ ~2 u) F
MODULE_LICENSE("GPL");( p: i& M" V7 H; }9 H7 J6 U
4 E3 |) I& ~1 I! w0 z- r& n |
|