|
|
求大神给下面的程序做注解,请稍详细些,谢谢。7 J5 K: c; E$ Q5 P5 D
#include <linux/init.h>
/ C. {* {3 @1 n+ R; [#include <linux/module.h>
1 }: K5 z o+ \& X9 ] v. p#include <linux/kernel.h>
. h" e" b \( R9 `; @#include <linux/types.h>
! D f2 `0 H. C' F; r# J4 |#include <linux/gpio.h>1 X* D/ ~! T; u/ A1 w4 o
#include <linux/leds.h>: l$ K7 C! w$ ^ M9 S j( ^9 I
#include <linux/platform_device.h>, i4 i6 j: ?0 j# X' Y. @' I
2 x" _% u1 U) s1 {5 S! e" f" g#include <asm/mach-types.h>
5 `( e! N# K; F$ G#include <asm/mach/arch.h>2 g9 ^+ V2 G5 C
#include <mach/da8xx.h># c7 ?: M* X) [6 G5 m# Y9 G
#include <mach/mux.h>
2 U# m3 A2 N) h, A3 ~" u2 F
5 ~( D' t" \( v! u#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ W/ `( k' p3 Q. [3 B; w#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 W! l. ^ k! b* p#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 ^0 o3 C2 |' n7 a( l) {$ Y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ _: n0 M7 h- Y2 i5 W+ X! g
! x% l( b, Y" L
/* assign the tl som board LED-GPIOs*/* {4 j! Q$ q' h) o% {" E
static const short da850_evm_tl_user_led_pins[] = {
0 A j* N+ T% R. T) h# x. \* P7 k0 Y /* These pins are definition at <mach/mux.h> file */" Z0 h: V) Q' j6 J4 Z% c9 c
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 F c+ [. n5 h# o$ g
-1
. o5 L! b/ n( k0 z6 K# l5 h; V" V/ u};: I5 P+ ~ n6 M) V
% n- i4 K V: r, c+ |- O- a0 U9 S- W
static struct gpio_led da850_evm_tl_leds[] = {
( P g( M) C! ^( E {
& O) r( `5 Y, c: p8 X0 N .active_low = 0,1 {% _( D# e4 T8 r; a2 Q3 C
.gpio = DA850_USER_LED0,' [+ g' G6 C: |! ?
.name = "user_led0",
* v) s) j K6 u8 Q; S) j0 a* U .default_trigger = "default-on",6 X! L" }- m* k; F
},
( |& j! ?, o2 `( W6 v {( r; x2 {; z' i8 E9 {
.active_low = 0,/ @, _* a5 S* w: E1 E: ~7 E
.gpio = DA850_USER_LED1,
4 f% G$ h0 C3 [4 B& j3 Y8 i; `' O$ L .name = "user_led1",& H" i3 d- b/ J$ p3 I% u+ p
.default_trigger = "default-on",! f9 \6 h0 L6 c7 K* B- K! ?8 k! I
},
! W9 F( s3 { I! i4 Z { }' k% W- |2 q' S' w6 |
.active_low = 0,$ b8 H/ ^ C! G
.gpio = DA850_USER_LED2,
) J. d' M8 C) u. Y .name = "user_led2",3 ~. [4 z' v( d4 ^
.default_trigger = "default-on",& ^5 _$ X" q8 x5 G5 N- `* @
},
* v- B' o" O* z P$ ~3 S {
3 f) [! U2 N7 s" U6 y9 W% P* W .active_low = 0,
& N/ K7 J) X4 {# W. M# Q .gpio = DA850_USER_LED3,
: h2 x* a( ?& k .name = "user_led3",# p4 @$ w$ `9 K: e2 m4 Y. I: n& ^$ \/ U
.default_trigger = "default-on",
- H6 B9 ]/ o' K- `. o9 h" b },4 _6 \0 v7 g0 q, t/ v9 ~5 x9 A, n
};5 k7 M* w7 m1 q/ p3 v# c( e% L
+ l" f1 g, Y) ?/ E
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
0 m$ t+ Q9 i7 G+ _6 ^ .leds = da850_evm_tl_leds,
l6 y& W: I- t' G' A .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 V# `( N H( H! w};+ @# b) U6 r% g8 n$ k
/ n5 \: D2 X+ c4 h' x, C* {static void led_dev_release(struct device *dev)
7 ?$ |& D4 d0 c1 y; f{% `9 k/ W3 O" h. i# Q8 A
};
! x6 Z% f% g0 ?+ m
5 A# O8 z8 v7 R1 q+ ~. Rstatic struct platform_device da850_evm_tl_leds_device = {
. x5 ?; M. r: w$ f( i# r .name = "leds-gpio",
! [8 X9 I" \, j s1 F .id = 1,
% V; Z+ ]4 E2 D- e, S% H* S .dev = {. D: R: i, D- v
.platform_data = &da850_evm_tl_leds_pdata,; b3 M& n1 j% f' H
.release = led_dev_release,8 k4 _1 q: F& V
}/ u/ I- w: ~, m/ o6 i" @5 e0 a
};) c; ^, N" V5 V. |* S8 }
% I/ J( M) F. u, ?. k1 _
static int __init led_platform_init(void)
1 R6 P3 g. l' G" i% x9 \; ~4 R{
6 p, U. w2 [6 v2 `2 C/ r int ret;
9 w$ q( H1 S+ ^% k" \1 H#if 0
/ n" U5 X; Y4 V0 Z& V ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# {! H) s* }1 J3 e& P; A
if (ret)/ R2 V7 l* R+ a( Y% r( m
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 S5 P7 a: } B i1 b' g
"%d\n", ret);2 N. d: V/ c0 a7 j- K/ B
#endif7 u# R9 [0 x) i5 x" A5 B& A& n
ret = platform_device_register(&da850_evm_tl_leds_device);7 h2 p8 } {& W/ y
if (ret)6 \: R# A. X7 T. _3 p
pr_warning("Could not register som GPIO expander LEDS");
2 K/ L; b( I6 z G) l else% B+ L) U8 g9 n w" C
printk(KERN_INFO "LED register sucessful!\n");
9 _, m- T- i2 y& g$ k$ N
; B3 I8 {# D1 V. F return ret;
9 u4 r9 K* w3 X9 R}) X8 [' A# Z# C( H* _6 z, V# w1 s
; G0 L4 f+ t4 T0 I" ~static void __exit led_platform_exit(void)
( Q2 m! c0 g- _) ]# {( G9 Y) N' C{
, Z; @) L- V8 H! m! ]# n platform_device_unregister(&da850_evm_tl_leds_device);
+ {$ {( W! V8 V* d7 j8 L) c
: v( Z* s. s- `9 Q% N printk(KERN_INFO "LED unregister!\n");' z+ s7 F) G1 L2 P n7 K
}
, ?: u9 v, b' \: _/ r. F1 e Z0 J
5 e! Q, `. {& ?2 k) _module_init(led_platform_init);9 [# k* F9 H- b( T" R
module_exit(led_platform_exit);! r, y# m, B( Q0 f. J
# {' E. h6 G# L) Z# l
MODULE_DESCRIPTION("Led platform driver");5 b* {7 S0 G3 J1 ^
MODULE_AUTHOR("Tronlong");+ H! b. _, b2 m
MODULE_LICENSE("GPL");
, w F* C( `! j: k9 k7 p6 s- t9 Y8 p, R6 I
|
|