|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 P1 v. f0 E t/ v#include <linux/init.h>: U, o" b: {, R3 B( j% p
#include <linux/module.h>
% F8 ^- Y& a7 u: }' h8 I7 e#include <linux/kernel.h>: {; \# h0 F! ~
#include <linux/types.h># Y+ `; N) a( E% a+ d
#include <linux/gpio.h>3 u& d1 L* D3 _! f
#include <linux/leds.h>. l4 r ~: a# B: g0 r2 J* q
#include <linux/platform_device.h>! [5 J: b6 ^- } p! r, x
2 K1 q9 A% d6 R, C( z#include <asm/mach-types.h>" Y Z8 J1 n3 Y! u$ O8 d; K
#include <asm/mach/arch.h>
' s1 l* i' V% m. \" T#include <mach/da8xx.h>
# U6 }/ j$ P, I/ V6 C6 U#include <mach/mux.h>
X9 P/ G) }" `' f2 f' [$ k# z5 p* p+ F7 X
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 A5 j+ `# Y8 t5 I" O; J- w- I0 M0 ^#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): r8 _( e' G3 B# ~ Y$ C
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! i7 f6 D$ `0 i+ @) n: t0 [, _#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 C! |1 v. U; W; K5 }
' U. B0 Q. u' f
/* assign the tl som board LED-GPIOs*/% F# B$ l, @. M
static const short da850_evm_tl_user_led_pins[] = {
) c- E6 r c4 V& Y1 [ /* These pins are definition at <mach/mux.h> file */+ @' A2 i: @5 l8 E3 @- y& F3 v
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, ?0 b7 P n# a8 | -1& g( }. Z9 C7 Y% @* f! _, V
};3 k' [; T. @ f. Y4 O
# b; `/ t/ X z- W# u7 o
static struct gpio_led da850_evm_tl_leds[] = {1 X& {7 g/ Y) }
{
0 N& @7 D5 X8 }8 e# ?2 g0 {, X .active_low = 0,
- d* h& |8 A( k( @5 {: v .gpio = DA850_USER_LED0,
+ A7 ~- B& o" Z .name = "user_led0",
! U9 X U. O& L! u. t .default_trigger = "default-on",
0 i* W Q0 Q) l' O' E) ` },
3 S2 d! g. G; K1 ^' P$ Y5 g( W {
2 A% E/ t: n7 G; O .active_low = 0,+ |! i: e/ i( ^( ` g
.gpio = DA850_USER_LED1,
* _6 D" a! b5 }% `. s& \ V2 Z4 L .name = "user_led1",
( j+ ?4 b* y- S- i .default_trigger = "default-on",/ X2 v5 |' M' c; c/ z k+ l& b
},
, X0 M8 a1 B: T3 S, W8 k. @ {4 x, v! W2 I7 o
.active_low = 0,
+ B, r8 H' F% w .gpio = DA850_USER_LED2,
. X, D# D3 V( m4 l) L+ K .name = "user_led2",
- E/ t5 Y6 p c) x. j5 d. I6 \8 I7 U .default_trigger = "default-on",7 {# V% a3 e6 j/ c
},
6 o& O0 ~3 N3 O9 ~( i ^+ y. `2 x {# ^' U7 Y( F- p* [! Q, M) ^
.active_low = 0,# ?& E- V& X: B7 i& B& j+ I6 ~, z
.gpio = DA850_USER_LED3,
6 c' [& t! G9 v1 v) ]3 q9 P" @ .name = "user_led3",
: e* w5 p% k- z9 y! ] .default_trigger = "default-on", p, T1 V+ z$ @( P& ]2 y
},
! x1 X# ^/ l0 X9 x}; {: r, D4 p8 Y' k1 u* V4 |0 D
: k7 _2 J; I; x
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 r! `3 K! _" _3 u0 j: b5 U5 l
.leds = da850_evm_tl_leds,
! v& J1 X1 W! ]" P7 ~2 U9 ] .num_leds = ARRAY_SIZE(da850_evm_tl_leds),. r3 Z9 D0 o. E H
};
. `; |5 t U$ X" `0 Y5 a6 e+ V3 ?9 k4 N1 L9 L
static void led_dev_release(struct device *dev)
( k2 L4 E7 B& {# Y+ K l$ V{
@( c2 j* O+ q4 W2 q9 R& t};
: v9 J$ R( c2 c, p6 \8 w
. L2 ~3 R4 w" Nstatic struct platform_device da850_evm_tl_leds_device = {: B5 g0 M _. L/ D
.name = "leds-gpio",
9 D1 V2 ?& L7 u9 D1 ~/ |3 O .id = 1,. G) A4 R3 H1 v7 f# j2 k% R
.dev = {# @+ h0 P; R1 e
.platform_data = &da850_evm_tl_leds_pdata,
+ j7 L' w7 K" c$ w$ ? .release = led_dev_release,. h' Y7 ^; {6 z9 C6 D3 w. i3 J
}
( V. {) J- A- T* O% j- W};
* Y: {0 }4 L4 K4 p( D0 C3 V1 k4 f7 p+ |5 ?
static int __init led_platform_init(void)
7 C- n9 z% I$ n) b. a( I{
5 ]6 P7 }& g- S int ret;5 {- ^6 H. K/ V; S
#if 0
1 n8 m9 u8 N$ x. a ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ y5 p: U/ J3 M- t' s( d4 F- T/ ]
if (ret)" T) ~/ z$ Z7 Z n* I- N& l
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) U& W+ C8 c7 @, z, U; ] "%d\n", ret);
9 N6 q$ b# b/ d! M. ?7 I#endif
) K v8 v/ L& i# R- F# @ ret = platform_device_register(&da850_evm_tl_leds_device);) A/ [+ C+ ]5 A2 F6 E3 {: k4 X
if (ret)3 \+ {/ D! {" M4 ]/ i y3 d, z
pr_warning("Could not register som GPIO expander LEDS");: T z) N, T4 t
else
; f X, {+ k1 l printk(KERN_INFO "LED register sucessful!\n");5 O3 I' i' l" H9 f
. S, q/ ]/ ] Y& J. f( o: x return ret;
: j6 F+ w0 K6 t}
5 p0 i0 `4 ?* [, @$ v+ _2 @9 a
1 P+ K- w4 \ T1 Z3 mstatic void __exit led_platform_exit(void)4 E6 _/ Z# B' U, p5 i# I( e
{+ z/ _5 z6 t( q/ h+ o
platform_device_unregister(&da850_evm_tl_leds_device);* K: A6 o! S. ^; z; u3 L1 i9 g
0 e( W% k: M( p) c6 a: k& \! x printk(KERN_INFO "LED unregister!\n");; l. t! h. X% ^5 F) u: E
}
$ W) M/ q% q' w c6 B: {5 D" m6 t8 n+ T% y# n! R) J
module_init(led_platform_init);
$ V" S2 x3 K- t: jmodule_exit(led_platform_exit);
* V3 r2 x- t7 j5 I/ ?; q5 }! C0 \ j) ^
9 [9 E9 N' A% l: ]$ `0 o' vMODULE_DESCRIPTION("Led platform driver");9 b v( C2 E: d0 l
MODULE_AUTHOR("Tronlong");/ w5 s7 W2 N/ q: F$ r; d% V
MODULE_LICENSE("GPL");
9 j. Y8 N4 P# e0 t7 _8 | S2 T2 }2 S! M; f2 G' J
|
|