|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 M- l0 \% M( e
#include <linux/init.h>
. y6 m# i f- d+ m3 p, |) C#include <linux/module.h>
; a- b% n R) C" A$ R: k#include <linux/kernel.h>8 o3 N c8 }; h4 t$ {6 C% {4 U
#include <linux/types.h>
1 n8 @- m7 v$ O2 Z$ w' j2 G6 w#include <linux/gpio.h> O, |7 O% b1 ]5 K) c
#include <linux/leds.h>
. k9 u3 {; O! L5 h. J#include <linux/platform_device.h>
: S$ J; d' e, ~5 y
- X+ h6 x- @7 K9 e( B#include <asm/mach-types.h>
8 t9 _7 F" V( f" \! h, H#include <asm/mach/arch.h>
- L' J7 N; t3 y: J#include <mach/da8xx.h># |7 V5 a5 `) k
#include <mach/mux.h>
# Q" S& c# }2 I$ J7 J6 N5 X$ a! M
. W; i/ [6 j: ^7 L#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
3 e% ?- y: r9 ~3 \/ o, n#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 Q, X$ @4 @) \" i9 n4 x7 g$ c
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
: x v' X2 p& y+ y- }" n#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' R6 S3 Q5 T" i3 l4 S# T
8 Q* N# b3 F6 h4 |) q/* assign the tl som board LED-GPIOs*/1 g3 y/ k- E- {- {" U" V
static const short da850_evm_tl_user_led_pins[] = {7 x, n M0 I( F' o, C0 `' `) v9 }
/* These pins are definition at <mach/mux.h> file */
1 w/ B+ U' i: @( H$ b9 \ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 A) ~* I4 o. I% T6 Z) K. v" ^ -1
: |- P6 X* M. a};9 C& ]) Q5 C6 G0 d( z; ^
$ J& l5 k9 n0 a- s1 Kstatic struct gpio_led da850_evm_tl_leds[] = { V/ W! ?/ F5 n5 K. c
{! Q' o6 S1 B0 }9 K# E& f: C
.active_low = 0,9 V) @! l( G0 ~7 r6 t
.gpio = DA850_USER_LED0,$ M2 [7 h& O5 P
.name = "user_led0",
4 h- f' p0 i' H' F .default_trigger = "default-on",
! v) M7 U' m* e9 N( a7 H3 j },
; T6 d( }7 D* C# O$ ` {
, ^+ d" F# D( @9 b- h .active_low = 0,) C% {% T$ x" ~
.gpio = DA850_USER_LED1, j0 C6 H, K! h S4 @6 Z$ z
.name = "user_led1",
8 B" P: }& Y8 X) j6 R+ l .default_trigger = "default-on",2 N* I, Q! R: r/ m2 |5 I
},
0 k8 g1 u' H2 k' g {
' Q3 z1 r2 L/ B1 \; [ .active_low = 0,. ?7 a- t# @9 r p: L: M
.gpio = DA850_USER_LED2,
" \) M& m* @; O- D .name = "user_led2",8 ?+ O, \- e$ L' y6 p
.default_trigger = "default-on",
% J( x8 F P/ P4 I; P/ p% | },
: J1 D" S, e+ l {
9 ?& r) `' K s7 C ?$ v .active_low = 0,( @$ j( d7 \" w8 P: K6 F# Q
.gpio = DA850_USER_LED3,) L; G0 }# a0 |2 f& y3 N0 D
.name = "user_led3",
9 [/ A4 x, ~+ |. [3 R .default_trigger = "default-on",
3 k" e; C" p6 O+ n$ l) y },( S% b! O* s7 P/ t( s
};, W$ G' u& W! c. h! s) o6 r( ^
* L/ F5 T, U, P) Ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( h, k6 t+ E5 }. }8 a
.leds = da850_evm_tl_leds,
* \4 F1 _; o2 Z5 j* Q: q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# v) ] e j. Q- G+ m- `1 U};3 d( Y/ E+ g, }1 K. }# o
7 n$ {/ {- _6 M5 Q' q8 a
static void led_dev_release(struct device *dev)5 G. I( Q- E; }2 o
{! o2 Z& g7 r# r ~
};
9 u& V2 ~( Y8 c ?9 n0 X' O7 z2 F6 G; J9 j2 h5 j% W# |
static struct platform_device da850_evm_tl_leds_device = {
- p2 R; ]+ @" f w .name = "leds-gpio",
$ q ?# M( f0 X6 b+ c6 Z .id = 1,
# S& S$ {. W! i& _: l) {+ T9 v0 k .dev = { |5 y8 Z' Y0 K, I
.platform_data = &da850_evm_tl_leds_pdata, t- j0 w9 f' I9 _, ]* M* g* {
.release = led_dev_release,
' q: V* a* K& J6 y7 T2 t# p }
! Y) Z+ O' F' J+ E7 l' f};
9 I; O) _( }; c8 n
! ?% D/ G! r5 E5 n" U+ V, }$ dstatic int __init led_platform_init(void)
6 Z/ ?% J1 s& B{2 [' c! C$ w7 C; z
int ret;
: l* g: o& O K; f; L- b3 z#if 0/ h g$ M$ F' Q" v
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ G& h( k3 L. g9 E k: m if (ret)& r$ b8 ~7 L5 l+ k2 u% D! W
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
" x: n3 U4 Y* {5 G( I: K0 l R "%d\n", ret);
- Y' S) o" t* Y3 Q; ~4 {#endif
) x r: ~0 N) ~+ ?3 y& O ret = platform_device_register(&da850_evm_tl_leds_device);6 g4 m8 t/ c( m4 e: s P5 d
if (ret)4 T# q' S9 b2 j; u3 `% u
pr_warning("Could not register som GPIO expander LEDS");
- K1 l8 U6 @5 C( I# S7 {8 [ else
+ P& g1 i# }7 P/ m; _- G printk(KERN_INFO "LED register sucessful!\n");
# f1 c% O* _' Q- Y3 I$ x& [$ C( f& {* J
return ret;
u8 M9 }) |5 Q# |6 _+ B}
3 k c& z( q; h: B" t* z5 D( m) {* Q) B f, ^# j) j, C, Z+ C9 x
static void __exit led_platform_exit(void)
$ R' K+ C% J( I8 h b1 }* k e{
) ^6 |+ S6 n' F5 s, H% z; b platform_device_unregister(&da850_evm_tl_leds_device);
& A3 h4 A+ d, [+ v+ d. d* m) V6 C
' t; j8 d" i+ x3 ^0 p printk(KERN_INFO "LED unregister!\n");3 H5 k4 Z) ~+ t" S9 V
}7 @. q+ H# L! M4 r
* m# m, @# z7 u
module_init(led_platform_init);2 V/ k1 l+ e* l2 x
module_exit(led_platform_exit);; T6 K1 c; Y( S" h
c- h; N1 P" p' e Q$ b0 Q2 y
MODULE_DESCRIPTION("Led platform driver");
) H3 }5 y9 P+ E1 sMODULE_AUTHOR("Tronlong");
7 x; H ]& q* M# ^9 EMODULE_LICENSE("GPL");# F3 E7 Z/ p; ^- l
# v" _) q4 \( p8 G; P1 [, |8 U
|
|