|
|
求大神给下面的程序做注解,请稍详细些,谢谢。! X4 j4 o! _5 O `- { [
#include <linux/init.h>8 R. f# p) P" l! @& k- k; y
#include <linux/module.h>
+ D B3 @. S, @- o. m( t0 f% C#include <linux/kernel.h>
9 `, a0 Y* K9 X; H#include <linux/types.h>
3 N: W- V0 P; @) `1 H d#include <linux/gpio.h>8 l z) q# y1 L s! h2 P z, b
#include <linux/leds.h>) o) |; f: X2 ]4 O2 D
#include <linux/platform_device.h>
* S8 p+ W& {' w1 A& ^3 c& ~3 ~$ c7 I* a2 k3 G
#include <asm/mach-types.h>* T' F* S; P, r
#include <asm/mach/arch.h>" q! X7 { ^* a3 T
#include <mach/da8xx.h>9 T0 w* O8 f0 w
#include <mach/mux.h>7 f3 h# a) l" f& Y h
- u- m* x6 d: Q/ w. C
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' _3 s8 v# K9 ?
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 Z; I( p* @$ p% |3 q
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( r; B0 M& E( y2 l' t* b#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: X. T9 A& p% Q, r$ @- V: E. M
k" t9 A3 d! H9 x- S( u9 |, z3 r/* assign the tl som board LED-GPIOs*/- b& M% g$ f4 k2 q
static const short da850_evm_tl_user_led_pins[] = {2 v4 f0 `) N, R' p' p) _
/* These pins are definition at <mach/mux.h> file */
* K$ w3 Y. I) T' t& |" \5 L DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( J2 q/ x; e' q) S -17 S" A; K) y. T4 T, D# Y% D$ p
};7 a* O. ?* {) {. x0 L2 f9 s
; |$ t1 x; l+ A' S' Z* W3 ?* e, b, M- Gstatic struct gpio_led da850_evm_tl_leds[] = { B# K* o+ q# ^. g4 `6 p: B3 h
{0 l! o' t! _2 D9 |7 i) I. n( S3 P
.active_low = 0,9 Y1 g) O2 e9 t. q. p2 p7 r" |
.gpio = DA850_USER_LED0,+ _' q; M, C+ N! I, Q2 ^) z& w
.name = "user_led0",
% _) b) Z" Z, i8 U* ~ .default_trigger = "default-on",
' z M" L% J( v; b1 s _' J: z },
. o" O- o2 a& }9 M9 x {! I& h) X4 v+ P8 R
.active_low = 0,
+ m2 o' i$ X8 f2 ^6 a .gpio = DA850_USER_LED1,
) z6 |3 `# l! Q8 s .name = "user_led1",3 u' ^& q9 v, h9 ^5 i
.default_trigger = "default-on",! l" x& Y4 B/ k
},
+ i3 } M; z; E U. u' w2 j# T {; N2 c: K# d S6 x
.active_low = 0,6 ?/ _$ J$ H* i H+ C
.gpio = DA850_USER_LED2,
/ [1 s1 ]- Z& b) b .name = "user_led2",2 q% ]6 {, Z" X* T4 N' f& j
.default_trigger = "default-on",
7 W4 [; s+ s# a0 {9 k },
2 R2 Z+ H- ]2 g1 o* W( l {
. R2 T" b0 p% F/ \ .active_low = 0,1 K$ ^8 a1 L% l1 c, }( D
.gpio = DA850_USER_LED3,
3 F ]0 S* {3 O4 @0 F .name = "user_led3",
" k( z# R4 n) x/ [* G6 `$ h .default_trigger = "default-on",
& n; M e" m# z },* R6 E4 B/ e/ k% ]1 `3 A. i
};
- b, e) n4 q. F s6 M' x, _( y$ ~% n& G# w
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ q$ S$ E& R. b1 n& R
.leds = da850_evm_tl_leds,
f' L9 W9 O0 T2 f: {- u) l .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" L+ Q: b5 @# b( M};5 s6 s- v! Y! v( r! C4 ?, G' u3 B, \6 i
1 {4 C+ b1 _& a( I6 estatic void led_dev_release(struct device *dev)
% y# N2 x( P9 {{7 E3 D% r* J5 Q6 @9 G: R+ ^
};
$ `) e. x7 l) s% a
5 y5 Q' I0 p2 ^, q7 a7 u7 {static struct platform_device da850_evm_tl_leds_device = {5 v+ g* j% A" r4 l0 k4 ^
.name = "leds-gpio",8 v- [# [# }+ {3 P4 O7 |; w8 _
.id = 1,
1 i3 T5 J7 L/ N .dev = {
& l2 v9 `" M9 I+ u .platform_data = &da850_evm_tl_leds_pdata,; j: G" X( W4 u
.release = led_dev_release,/ E& _8 u9 q5 {0 [ v {8 f1 z
}
( i" I' ~( A1 Z, J};' t( U) H; Q' P! ~- D% F) I0 y
% k p6 t& P) c2 z5 W/ T; {" _4 t
static int __init led_platform_init(void)9 E1 Y1 F* @ J* V4 \% v( d0 A
{+ P6 N6 T0 F$ Y6 e0 {
int ret;
& k/ M0 h3 B& X7 f#if 0 M% b# J+ x0 [
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 @, P6 r8 j: {( h" O: M if (ret)
( k1 [8 i! O: f- t2 Y pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! y9 ^( y) ^; T* a
"%d\n", ret);
5 J: R1 n1 a! i#endif
- _! \% d7 w7 k4 H ret = platform_device_register(&da850_evm_tl_leds_device);
" j/ d' g9 r8 M# j8 i( O if (ret)
3 m( H# t9 S" G8 q pr_warning("Could not register som GPIO expander LEDS");
& e5 F7 a8 }7 q5 W else& f- T* _& S5 d' f: s* B# Q, B' D7 ]
printk(KERN_INFO "LED register sucessful!\n");
" `/ }) o. b- t/ |
9 ]0 T+ T7 J$ [% L } X. _ return ret;0 o/ x7 U4 d0 Y X4 b
}+ [# s! L7 T; V3 m1 g
6 x/ r+ B) g7 C9 f- G; kstatic void __exit led_platform_exit(void)
$ b4 m# L# ^) o* G/ h+ Z# D& u7 F2 M{
* e' Z! k3 j( i# Y8 e, Z platform_device_unregister(&da850_evm_tl_leds_device);
- K$ }7 Y) J& S. i" {7 m
% r; }9 q8 o* `3 t printk(KERN_INFO "LED unregister!\n");, H" L0 J" H, ?
}
6 }$ W3 r) S! n, e/ e C+ W8 r, G/ T9 z: F8 m3 v, T% B
module_init(led_platform_init);) v; D6 _2 Z8 D4 N' ? e1 E
module_exit(led_platform_exit);. l! f8 g+ c0 y
8 H0 C. X' F: Y( C% cMODULE_DESCRIPTION("Led platform driver");% k; q% H( X1 t
MODULE_AUTHOR("Tronlong");. K5 v6 P1 d% c v
MODULE_LICENSE("GPL");
6 v0 t9 H9 _/ y3 D
! I" ^6 w t5 O6 r7 E& j( m s |
|