|
求大神给下面的程序做注解,请稍详细些,谢谢。9 X/ [: q2 b7 Q" x0 V5 f
#include <linux/init.h>5 _" ^& R$ y+ w0 s( l3 z
#include <linux/module.h>2 } K/ m2 Q. a i
#include <linux/kernel.h>4 A# w: ^& X3 L3 F
#include <linux/types.h>, a' T3 g8 M! J7 J- ]: C/ p' ?% ]
#include <linux/gpio.h>
: A' ^: ~9 i' q$ r6 ]$ b#include <linux/leds.h>. q8 B7 |2 u( S5 B' ~: R
#include <linux/platform_device.h>
8 f f. ]3 R" |* K/ a3 Z p1 \+ s1 X8 i, q. h# g# m6 q
#include <asm/mach-types.h>; }" ]8 O* n- [% W
#include <asm/mach/arch.h>
6 _% P: F9 M2 ]2 M#include <mach/da8xx.h>
+ \ F6 C0 E! U V#include <mach/mux.h>
5 G8 t- I& @* P/ K! |9 I7 [$ ]
! u4 a; H5 P" o: _, n. M5 C0 s, g6 S#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 H' g5 S0 `3 x9 X#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 d Y3 d- @. t: C3 u# {- z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 N7 Z, X5 M+ V6 S, ]/ H. m
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- z- l/ i, k6 P5 S
0 r6 X( {5 I: ^) C' S& _6 `/ O: S/* assign the tl som board LED-GPIOs*/
# [. l6 S9 u7 b4 W. `3 l ~! C% m6 @static const short da850_evm_tl_user_led_pins[] = {* T8 {2 B+ \, |6 }% W0 a4 l: H* C
/* These pins are definition at <mach/mux.h> file */
" W {& a* x" n DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
4 G! ]& U" C3 ` -1. J r) D3 F% ~4 ]$ g" }. {# d5 D
};+ E% z4 K) R9 i% }$ l
1 P5 f3 v8 S6 V4 r
static struct gpio_led da850_evm_tl_leds[] = {6 }* j6 u: ^5 m6 T& `2 b
{ a( T) X' g1 s5 Y& b" \9 n3 ^
.active_low = 0,) U: z5 Z7 I& r' }1 e) L
.gpio = DA850_USER_LED0,: y5 w6 i$ A# }: Z5 }6 c
.name = "user_led0",
: A4 s2 L1 S; S1 Y .default_trigger = "default-on",) ] n; C# r8 R& ?
},
& }6 f N! K6 J1 F; l9 ^ {
) S* s' o. C& R8 f/ t! ~ .active_low = 0,
# B0 f* G# Q* l .gpio = DA850_USER_LED1,$ p) C( f" ^0 o
.name = "user_led1",
7 A2 {2 r8 C/ R' G .default_trigger = "default-on",
% R2 B! i6 l$ S# v/ \# E# k& F },. h' {4 i7 B( Z# |9 _
{
: q, } I4 q* N .active_low = 0,, o( R/ E q7 P( I
.gpio = DA850_USER_LED2,7 R7 V$ s$ Q8 S
.name = "user_led2",7 `" B8 m& z+ [. t! A: m
.default_trigger = "default-on",
( b/ ?3 Q* N- k },9 v: Q3 l% O; J- d
{
/ a" E$ S1 B) L' h$ d .active_low = 0,+ p" U3 v. ]% _3 R; [; k0 f/ @3 B
.gpio = DA850_USER_LED3,2 n2 D# ^; H4 G; q) E# Y
.name = "user_led3",
& y& o ] M' H0 {- a8 _ .default_trigger = "default-on",
7 z& R y' Y1 ^, S: S }," H2 u* i5 y- A/ n J) Y
};
' n5 _7 J# C8 q8 H/ f
/ G9 {/ h& E- g+ Qstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! v" a% h1 Q, k, J j4 p D' Y2 [- J$ }2 I .leds = da850_evm_tl_leds,
* T: V, a* ?8 E% n7 O4 V .num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 j, m1 c# A/ d3 m; k9 C; A
};
) f9 O' f: `7 B- K. s. L
' D% C: n) M# h- `' C! p4 qstatic void led_dev_release(struct device *dev)
! O' J. l4 S: p. E{
& x- i8 X* q5 V @. N3 n};% E3 N/ G: d# K9 N3 n0 h3 B
8 E2 ~4 t9 K" j5 q4 x- P1 Gstatic struct platform_device da850_evm_tl_leds_device = {+ J0 S' w: ^. Y& j6 @1 G7 D
.name = "leds-gpio",# D, o! Y( p# o$ _' x
.id = 1,* Q2 m8 N5 O( G7 \$ o* q
.dev = {- B+ m2 N4 _$ a* v/ G! {
.platform_data = &da850_evm_tl_leds_pdata,: q# Y" @0 D" }' B3 @
.release = led_dev_release,7 [0 _3 A+ B" a) y+ m" A
}
0 g& m2 S1 v: @: C" r- W};
5 g" g: S8 z t. B* @3 \) A% c6 ]. q& y
static int __init led_platform_init(void)
& I1 E% c# t* V4 l{
# g" M# C/ ^4 F9 k6 x& w int ret;( S ^5 ?$ G; b! h; Q5 r* Y! ^0 r' e! k, q
#if 0* H4 D5 b% h$ c
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% q: u2 F1 [& ? Y2 x9 C if (ret)! \% X4 t0 [+ {/ t4 N
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# }7 |1 g& u( i n" O& [, ^. Y& \ "%d\n", ret);
* s: Z' b* i8 t' x1 E" D9 @#endif& T6 T+ A; H9 B( _" C) G# A% L9 @
ret = platform_device_register(&da850_evm_tl_leds_device);
2 j& T8 E, G! v& i$ y6 _ if (ret)
3 u" l$ S( b5 a) N! {/ S, m pr_warning("Could not register som GPIO expander LEDS");
+ O5 g G; b6 o# n else
; p1 _5 F+ @5 y( c/ c+ J printk(KERN_INFO "LED register sucessful!\n");
! `# F' L- K, d7 U. W7 Q
' b) z, ?% b( S, h3 ` K return ret;
. ]% `2 w5 w! Y& n}
% I0 G3 |' E8 X. |1 l, M: n L/ w t, l- ~8 s4 e
static void __exit led_platform_exit(void)
+ `* _! q. W0 v% w/ b1 U; J) }/ @{, v, s6 p l5 w1 i
platform_device_unregister(&da850_evm_tl_leds_device);
5 L c, t d: F
* `/ R0 y4 K8 } printk(KERN_INFO "LED unregister!\n");
f, c5 @' C% d: f6 I9 z/ o- p}, h! q. {$ w S! T; h
) o% I, {* A3 w- Z
module_init(led_platform_init);. A4 |, I3 i( u' c2 J0 w
module_exit(led_platform_exit);% V3 c$ z( j8 s9 d% J \
( E$ ]# _' V' l' VMODULE_DESCRIPTION("Led platform driver");
$ I/ D/ k# ?2 B* C- P! eMODULE_AUTHOR("Tronlong");
# m# ~$ {+ `9 J+ D7 DMODULE_LICENSE("GPL");: ]! D: ]3 l( L' q% \0 p
/ S! X& _2 P H+ w
|
|