|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 [" D) ?$ P! e# e
#include <linux/init.h>
3 C+ W$ e8 W' \2 S, X$ B#include <linux/module.h>
% T8 Z( W: r$ Z$ j: T. m7 c4 X, @% A* Q#include <linux/kernel.h>3 t! H3 o9 C) d+ A
#include <linux/types.h>
) A, k8 R, f/ u) A9 x( M#include <linux/gpio.h>" g( w. t1 ?" [% h' z! W
#include <linux/leds.h>& ^% }. V9 k+ N& G/ {" l* `
#include <linux/platform_device.h>3 B. T# t4 B# E+ n8 _, a- X: f
7 h, y% E; j3 W5 T v$ m#include <asm/mach-types.h>
" N: z8 B/ Q" G#include <asm/mach/arch.h>/ k- [( ^! ^+ a# k0 y
#include <mach/da8xx.h>
) K/ B M5 P! C% d' K- S8 S! e#include <mach/mux.h>
! S2 s3 ^! R! J' e- i- z- A1 u- F; P% u9 e! C8 Y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0): S4 q. `* j, M- J3 N
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ z; k+ X# M; ~) s8 W Y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 A" {: k& }; v2 g K% |% A, Q+ }#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 o! q6 X/ ]# ^9 [; W
9 k3 r+ H0 _) h& q2 I
/* assign the tl som board LED-GPIOs*/1 F- N+ m) d3 H) J" p M
static const short da850_evm_tl_user_led_pins[] = {) ^: n: D- j3 Y; F
/* These pins are definition at <mach/mux.h> file */- a) r) f% }% r1 P; j r& |' Q+ x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ i1 j5 f$ {$ l( p8 K: t# F -1, k4 p @) z& G
};
J1 P$ {) [+ ^9 U
1 ? @$ G' m; d$ G$ F' N4 s# Wstatic struct gpio_led da850_evm_tl_leds[] = {
; h+ u1 c+ c( S: } {! V" \: E% `; v* Y
.active_low = 0,
Y! i, [% g1 U! B8 A0 O .gpio = DA850_USER_LED0,( r* j% C) T- ~& O7 K) C/ }
.name = "user_led0",
& T" L& ~# B" q" D .default_trigger = "default-on",4 M: K. N3 ^" h: L7 A
},
6 Y8 h! g; I- `- J7 k {
) J; }7 q2 t9 q, [4 }0 s+ C .active_low = 0,
0 Z* B: p; i h# k" V8 V: q# R .gpio = DA850_USER_LED1,' L0 k4 h* H+ c& N Q9 q3 f
.name = "user_led1",
+ l5 ]( [$ D9 `7 G$ u- S& E3 O .default_trigger = "default-on",
M2 P. }$ X% ~" c8 h },
0 M" f _" v% p. F1 V {. b7 |& ~5 L9 [, u, R" F
.active_low = 0,7 j- ]) o0 T+ ~$ ~
.gpio = DA850_USER_LED2,
" U# U, `2 G) h( n" V$ p .name = "user_led2"," q6 n' m' y- ^) U$ ~
.default_trigger = "default-on",
3 M/ O4 `4 t+ Q3 ~4 {" f },
& ?" o$ Z" B. B4 l {" i2 ~( `! ^6 r8 A- {
.active_low = 0,
( `6 d" e6 ]" {# f! }+ _ .gpio = DA850_USER_LED3,
5 a( ]) Z) i n/ t" Q: _$ I .name = "user_led3",# j9 D1 d$ | b( k
.default_trigger = "default-on",. T/ {5 H3 {# I1 n1 N& K" l
},, K7 ?9 n# W; a- m
};
. C+ ~: t% S7 C l7 I
, G# T" t7 A( v9 r; Q9 Cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' u, v" o) c1 b+ N9 Z
.leds = da850_evm_tl_leds,
4 b F- g9 j" F" ~ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# b! t {+ w" z3 ~. d};
4 U m; Q% T' V3 K; W" D& `: }6 r7 ^
static void led_dev_release(struct device *dev)& L7 D6 \ k) r6 `
{ Q! \. i. X4 o# J' L. W1 R, K
};
, S1 M9 c+ F8 H8 F/ X- E/ C0 g
Q( J3 Q4 ]2 `static struct platform_device da850_evm_tl_leds_device = {9 q* K5 J" w& B3 K' m
.name = "leds-gpio",! Y9 v. c! v/ @3 k) Y
.id = 1,
9 y8 n' a/ K9 a: \) R .dev = { z( u ?$ t& S/ E0 ]
.platform_data = &da850_evm_tl_leds_pdata,
$ k1 _% q6 }# v P- V9 a% X .release = led_dev_release,
) n2 F5 q) j% q7 Q }) Q9 M& H& `7 B. n- l* G5 H, ^
};
& g; [: l3 H1 S4 z
7 G y/ ]! }* j4 O8 Y: }- ?static int __init led_platform_init(void)
5 G/ l8 L3 U# _7 A- N! j{
4 ~. f" X) i8 Z) M8 \$ V$ m$ _ int ret;
$ k* j* \1 T: ~' a" ]* Y( N$ T#if 0
' k0 F; T& Q+ u) q( H; g! ~6 l" G ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 H8 K# t6 n4 `# C6 v
if (ret)
7 {' z5 m1 M* I; k pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
3 L9 }% ]& B4 r* s; Y& M8 v "%d\n", ret);
0 t1 f0 t: i1 `#endif: l R- j0 @8 `* D. e
ret = platform_device_register(&da850_evm_tl_leds_device);
w1 v) M; I: b- p4 K if (ret)/ _ `6 P. [$ e+ W$ T5 y
pr_warning("Could not register som GPIO expander LEDS");- h$ y! f2 s) Z* k
else7 l' u1 \9 V2 C E9 q
printk(KERN_INFO "LED register sucessful!\n");6 G* T1 j! N1 X3 M- I& z/ C5 o
- O$ B/ ] M# ?7 N" [- P/ N return ret;6 C& ?% ]/ d- P2 \. f: \
}) R: G' ^8 O# C1 ~' \/ w
9 R' g7 f1 M8 Z4 r: j; r. F
static void __exit led_platform_exit(void)" V% Y3 K) u* \2 R
{6 y9 d) D6 @4 G- r; \
platform_device_unregister(&da850_evm_tl_leds_device);
! H. X& x5 V" C/ T+ G. l) ^. R6 e$ M0 i
printk(KERN_INFO "LED unregister!\n");/ P: {) ?7 ~# U2 V$ ?
}
) ~( L" |. x$ O, |# X1 s% i# ~- N
module_init(led_platform_init);
- t% D4 q) Q s& w. E smodule_exit(led_platform_exit);+ Z. w1 m( k' u7 d' `: x' t
" D8 j" u3 ^! V% V3 |( h
MODULE_DESCRIPTION("Led platform driver");
7 K9 H2 Y8 q$ k* `1 SMODULE_AUTHOR("Tronlong");
! U% k/ g+ }% q6 W+ \7 fMODULE_LICENSE("GPL");& u" t3 Q N7 c3 x+ V8 u; @$ s" P
7 u% N& Y+ I6 s, N, j/ k
|
|