|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 ~9 P6 k: I* Y0 k#include <linux/init.h>; d3 y. i, |1 T ]2 R- ?8 q# [4 j8 o
#include <linux/module.h>+ i; E9 r4 h6 ~
#include <linux/kernel.h>4 m6 L; D9 D& d& c4 |+ c% i: x9 C
#include <linux/types.h>9 v' U7 P, }$ I& r) n6 s
#include <linux/gpio.h># p1 |. e5 y) ?, W3 X; I
#include <linux/leds.h>
E3 p4 Z. X% Q# z#include <linux/platform_device.h>
! u% x8 \9 R% \9 |( k8 q+ V
/ ]. _2 T5 E0 ]! M/ k' w#include <asm/mach-types.h>* g. y# L0 }9 `
#include <asm/mach/arch.h>$ g9 P7 `/ r- g/ X0 n
#include <mach/da8xx.h>
, A- P9 ^) A2 t" d7 r$ p8 O#include <mach/mux.h>+ A: \1 ]$ }* b+ o" A$ p6 X
( M. t1 J4 k& n0 d# o z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 T0 j: C$ i' j3 g
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)- b4 {! R, I& t* C- ~5 N5 m( k
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1). ` A" f$ p5 V2 F7 J
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)& S# X" w: i9 l, x# f8 M" X) G% x
9 A6 X8 {5 g" C! Y2 k1 J( N+ I- K& e
/* assign the tl som board LED-GPIOs*/2 L+ {/ H% x% D2 O- b; [
static const short da850_evm_tl_user_led_pins[] = {6 d$ C3 k6 G: ~0 M1 O) k
/* These pins are definition at <mach/mux.h> file */
& _" N: F! C- r0 ^ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. i- }+ l5 M- g: V" k- `; q
-1& G; M/ i2 U ]6 v; h+ t
};
8 M" j& i; i8 t% `. k" V5 l- ^ H: \1 }; g
static struct gpio_led da850_evm_tl_leds[] = {0 J0 ^2 E2 ^1 D1 H1 b% N
{6 A+ s; e$ T. e9 H: L
.active_low = 0,
2 n" N: E' t: o5 }5 u4 e7 L .gpio = DA850_USER_LED0,1 C* a; @4 _; T9 k: t5 L
.name = "user_led0",
# R8 ^9 d+ |' J; z( I .default_trigger = "default-on",: D2 y. N3 F' p; c0 k- x
},
9 ]' N' h/ K: B2 X7 ]0 y7 a5 }/ Q {. ^: k* G# V+ H2 h& t: ?6 C: H7 F) ]2 A
.active_low = 0,
" K) Q+ t4 `4 `( a# W5 O .gpio = DA850_USER_LED1,
* L9 |4 f2 K9 S7 Y+ e .name = "user_led1",2 ~" H, C7 j5 d/ ?4 l) o7 i
.default_trigger = "default-on",
. }: w) `: i3 [3 \8 m },
/ N x7 K# m9 Q. P7 e+ L( A {
" j; v ?; `9 b* W k .active_low = 0,% K( ~) G6 A8 }) F+ r8 e, M1 W
.gpio = DA850_USER_LED2,% a$ \& A, \6 {" r/ V4 T
.name = "user_led2",9 I. z* C" L+ b/ J
.default_trigger = "default-on",
. X* P4 ]& J' l" k; o2 u },
2 Z& j" Y. v ]: c' |. U {
- J& @; q& I+ q5 I$ e .active_low = 0,7 k) N' ]% G; E, a* h" Y; O. e
.gpio = DA850_USER_LED3,# }% ~. h7 l' W; B$ W' d
.name = "user_led3",# c( v" K; M' Z; b( V' i5 e: L
.default_trigger = "default-on",2 }7 P: b4 e8 `4 l* C' I( {' ?
}," @+ y! ]. |& H. C& i
};
7 K0 x4 A5 J- B4 H H$ w: j0 k* W- S" D k' h+ n
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& E7 ^ I; o4 [1 h/ s" J6 G* u( _
.leds = da850_evm_tl_leds,2 C. H! i! D6 a9 Y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 q. h4 p! f: r/ b6 |};
. W1 M" t/ t& l% T+ B! X D t
7 x( ^5 H9 H+ `static void led_dev_release(struct device *dev)+ B0 x( ?4 i+ l+ j
{
& p" L. x" L; A" }- m- t};
& a0 k% u, P, h# X1 z8 s" p/ u' T- A5 q3 e" |) v
static struct platform_device da850_evm_tl_leds_device = {
: m! B( v4 V5 y5 o3 [ .name = "leds-gpio",8 P) I5 q. O" c
.id = 1,1 k' j" [1 \$ S7 S
.dev = {
- q/ \0 r' D3 v. ~6 I .platform_data = &da850_evm_tl_leds_pdata,' v- V; X* k0 c1 d+ e
.release = led_dev_release,5 ^. Z7 z# s E6 v" T- `
}
" ?& E, \6 N. W9 J) r. S" X};, k( n- f+ A. U4 y/ J7 o3 k) R. z9 x
- S: E8 o, c! Y* `) W& J4 b- V, S! vstatic int __init led_platform_init(void), I& y( ~! f" g4 S' o+ [
{( ~: p3 y0 C. m" H, {: {1 a
int ret;, G1 p* K8 p+ @! v
#if 05 ?1 t$ w, B. a. C1 f7 t
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
4 S' J6 K6 B% r* _4 _ if (ret)* z" Y K/ e1 {% W" K! u' u
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 E" ?7 p! i, s* w" G( J5 y
"%d\n", ret);
: X3 g: _+ H' o9 ?2 z2 T0 u* C) W#endif1 t. R5 _/ u2 s! i4 M1 {
ret = platform_device_register(&da850_evm_tl_leds_device);
+ H% a* p* S S. p1 h0 S if (ret)( D* s" i5 Y. e4 @% s7 }: s
pr_warning("Could not register som GPIO expander LEDS");
& b+ I8 J. Z2 o' W7 Y0 d% J) s% T9 N else
5 n$ ]; N9 M- L* f0 E5 r printk(KERN_INFO "LED register sucessful!\n");
, b0 L: A; O2 i2 F* B( \
1 D# S9 i' k- ~ z- @( h return ret;* C$ ]: d f5 I S
}
+ h. g, v0 I. m5 u2 b" T
) d* q; G' [& Y% ^% P& H$ ^static void __exit led_platform_exit(void). Z0 O/ O0 ]0 G
{( s( t5 x4 r R8 u2 N2 Y
platform_device_unregister(&da850_evm_tl_leds_device);
7 l# o( {% b3 s2 c1 _3 J8 P7 p; E, W/ k% I: S5 F4 A$ A+ f
printk(KERN_INFO "LED unregister!\n");$ m: n0 a2 O. Q" {+ I
}
, A4 Q0 W4 q; X3 C" ?/ ^5 e6 c! { O& H5 A: l2 x5 L: g, d) K
module_init(led_platform_init);3 x1 c8 ?+ e2 v, K6 @' t
module_exit(led_platform_exit);
$ a1 ~- P5 E* m! n( f1 M
7 C. J( U% B& F; FMODULE_DESCRIPTION("Led platform driver");+ L0 q) Q5 ?( `3 O% Z! d- e
MODULE_AUTHOR("Tronlong");9 x @" W2 l7 B" W' T% A, o7 @3 T
MODULE_LICENSE("GPL");
/ \5 x' W: E2 M% T0 E4 X' f- n) q1 U2 _* I8 K
|
|