|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
$ S9 [( N; o& |% M* r#include <linux/init.h> I! @2 t! |# j/ E
#include <linux/module.h>+ B' t: z" Z9 Q2 a1 c; k
#include <linux/kernel.h>& N5 p/ O; f: v; k3 V0 O7 D
#include <linux/types.h>. R& d+ A* M! B r a9 ^
#include <linux/gpio.h>
1 D Q2 M+ Y E0 _& D, u#include <linux/leds.h>
% W/ f) T) _. J% \7 k' {3 _2 p5 X. L#include <linux/platform_device.h>
1 Y. _' n2 N; D. _7 u' [+ _2 }; R {3 N G# l, ?5 Q3 D
#include <asm/mach-types.h>
% S Q- c- }2 r8 c; h. Q8 y) P#include <asm/mach/arch.h>4 P: t, n# R# Z4 b
#include <mach/da8xx.h>1 P" K& Q) o( v+ r! M. R
#include <mach/mux.h>4 N6 o/ a$ T* n% ]
; o, {2 t/ H0 Q9 Y: M, I1 Z. @% S#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- x' M) q9 J U3 t/ E% V#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 f2 W" x8 G/ `6 Z3 P#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
' R! [' ]! O1 D% n#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ u% {4 h# B: j
* S$ g H1 j# X$ n' P/* assign the tl som board LED-GPIOs*/0 H% \- j# N4 |% h: o# o3 r6 Q) r( G( F
static const short da850_evm_tl_user_led_pins[] = {/ k( g- E" p- u" ^8 h
/* These pins are definition at <mach/mux.h> file */+ w0 _! w) c; V5 c7 Z" j* `
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" P3 ~& v0 N# ]. m -1
2 I' ?" J+ d: D! E' E, d};
7 a" O, f/ U( H& v8 H" a7 i/ n' E
3 O t$ {: Q& N/ t$ Kstatic struct gpio_led da850_evm_tl_leds[] = {
1 h6 F" n/ l1 Y% B% L* x {
* R% I3 H4 S% k8 A9 c$ k .active_low = 0,
4 m' T9 t7 X3 ^2 F .gpio = DA850_USER_LED0,
/ Y0 [/ a% N) L7 N .name = "user_led0",
) S! I0 S. X3 d7 J! ]6 @. Z .default_trigger = "default-on",
( O2 E5 W+ L: v; Y& B x3 b( F },3 X% r9 ?; H4 Q
{* i- p4 }7 L0 @! w1 [7 b% r. T
.active_low = 0,
' ]" k$ |, `: q0 A# a% |+ _ .gpio = DA850_USER_LED1,
r- N# M7 p) Q8 x4 b/ b. a .name = "user_led1",
% O5 M1 h& ^ V- }: D0 p# m .default_trigger = "default-on",
' a7 x; s& Y: U7 u" x8 m z# A }," f7 d9 Z4 p1 X2 R" P0 q- Z
{. S- b9 g/ w- p$ }
.active_low = 0,1 }) T# C2 y: G7 p: W) T
.gpio = DA850_USER_LED2,% f) E( b, Z/ W1 M6 k9 w/ t2 }
.name = "user_led2",1 M( Y+ u8 g6 d$ Y
.default_trigger = "default-on",9 n; C: v6 M0 d: I* m* x
},. _! E7 `- j' G: N* X8 @/ d
{
0 ~6 B. x5 @8 n" d2 j" ` .active_low = 0,# R% b- P- y; z- b% n* d8 x
.gpio = DA850_USER_LED3,
' a/ B5 t" W- ~: d1 C .name = "user_led3",
1 d) [* M$ E' X* @4 d .default_trigger = "default-on",
! H% W3 O% `1 {" U% L K* i }," e) p3 `3 R( O( X
};4 U3 C, e0 |: J1 u. u
$ H. _5 I) d7 n* e
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
5 F3 \# v4 B; ]$ [ .leds = da850_evm_tl_leds,# R4 g1 v9 _& K+ C
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 z: o. `) t1 ~ O
};
' I% X7 w6 _6 U! Q; u' L) W9 e/ L* k3 ~7 e6 d, L
static void led_dev_release(struct device *dev)+ O& y, K- {8 s! T6 h5 u9 o
{( _8 W0 H* N- Q/ s: `/ o* m1 c$ j- o
};6 V6 l% Q) A. t8 |; O
) ?) h& D$ i( K Z
static struct platform_device da850_evm_tl_leds_device = {
' O& @4 F, i8 T4 O* u .name = "leds-gpio",
. D& h6 `, E, m9 W) f8 h .id = 1,
- r! k/ r* y# M! ~# j .dev = {
5 T" k5 v$ R: ~$ e9 d8 Y( y# t .platform_data = &da850_evm_tl_leds_pdata,
* n. p# g+ I- g2 B3 e .release = led_dev_release,+ K! x0 j9 a9 D7 D# E0 e
}/ d \7 n' c! k1 b
};9 d* K" D( c) ]0 Q. O9 I
/ r# B1 p* `/ t) k2 U2 E. ]
static int __init led_platform_init(void)' C) e) o8 m4 P" m, M
{
# \4 \; i- m: \/ a int ret;
8 O" [, ~, ?% d/ e0 I+ B#if 0
5 D7 }& n3 F- h8 a3 i ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 C0 W1 ~( X4 v7 Y# o# j) E
if (ret)
7 Y) p5 p8 m2 z) W pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
( L/ V6 b) i- \/ e5 l4 C! p U "%d\n", ret);) A: K8 F- M0 ?; u. q
#endif
& `( }' Y8 E5 y9 R: a E% C5 M ret = platform_device_register(&da850_evm_tl_leds_device);0 j% Q8 {+ u: o
if (ret)7 R* O" K# Z) { k
pr_warning("Could not register som GPIO expander LEDS");; E+ l, i: T; K/ c( C/ `' p! c
else7 S/ b+ F6 ?! D) |2 v
printk(KERN_INFO "LED register sucessful!\n");
$ q# W3 \- u( z
6 |5 y% B' W5 y return ret;
$ x7 [" b: |. }% E3 y}
2 ~* z. j7 X+ u2 [5 g& u! t
, ^8 W$ E' e: f: Pstatic void __exit led_platform_exit(void)
, [7 w" P. |# J- w2 G{/ ?+ _1 e, o$ X6 r+ }
platform_device_unregister(&da850_evm_tl_leds_device);! @" z# b0 d7 P2 M) o9 o
3 o6 ?6 ~5 [3 l3 d5 e6 d/ b printk(KERN_INFO "LED unregister!\n");
* W' {: M* z! z9 v; f9 m; X0 y}/ D7 B- A. `4 j5 q
. B& `. z+ w8 Z' T3 @5 q: G
module_init(led_platform_init);3 `+ E0 M. O3 e( j
module_exit(led_platform_exit);
' [9 I+ D4 F' Z3 E% d. v1 R' \ z% v: T5 \5 B! f
MODULE_DESCRIPTION("Led platform driver");. q2 l4 |8 p9 V
MODULE_AUTHOR("Tronlong");( M3 h' y8 |% B/ F8 s( B
MODULE_LICENSE("GPL");
9 _" s3 s" a- {4 @+ e" B0 f0 c) ?& `! o( ?& D
|
|