|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 E% |1 D6 T2 C6 w5 i2 D+ K$ z#include <linux/init.h>) J `+ S3 b, b1 [% ]
#include <linux/module.h>
* C6 D: D# k: s' l Q#include <linux/kernel.h>
! d/ a% i5 f# ~+ b, Y9 e+ B#include <linux/types.h>4 X/ @) Z8 B. ?9 P( W/ @
#include <linux/gpio.h>! x; i$ A( ?, ?4 f& {2 d, ?. h& I
#include <linux/leds.h>! S% @) H. Y7 g7 s+ u' G
#include <linux/platform_device.h>/ d# z$ S/ I5 R T2 |
: T. b3 k- m8 L( S) _( G
#include <asm/mach-types.h>1 U: B* X* p8 @2 S. f/ Q( g
#include <asm/mach/arch.h>+ D4 h5 t" i6 U" h! h
#include <mach/da8xx.h>
& D7 M( a5 }+ R8 h9 P: r#include <mach/mux.h>
) ~' T- G5 o$ J0 n1 m" M x' r6 E6 G: R
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ C) D/ g; k' i#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 v6 K# a e% A8 N1 G5 R
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) B% B6 ^, @# F( G
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ \4 ]2 t. F7 K9 m- R2 J
k ~( ]" ^1 T0 F& F% L* [
/* assign the tl som board LED-GPIOs*/
( w3 X2 O8 O- V: Y9 E5 }static const short da850_evm_tl_user_led_pins[] = {
7 w: E7 J5 r% o2 P+ B! X) ^ /* These pins are definition at <mach/mux.h> file */; @1 ~& H. g4 f5 U* z! E
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ x! e& T! P4 m6 S) I
-1. L9 G, {# M4 s& Z- _
};" r( q) H9 A6 B+ l% {( s5 j
7 A2 \1 \; [' b4 N- W3 z0 rstatic struct gpio_led da850_evm_tl_leds[] = {3 | L" C N3 u4 r
{2 R, Y6 } W9 X
.active_low = 0,0 v$ f9 D3 K, t
.gpio = DA850_USER_LED0,
9 H" h9 Y8 Y: j. Z5 v .name = "user_led0",
7 T0 ?- J7 M% W* } .default_trigger = "default-on",' V0 z8 A& z) Z1 u, D
},
8 C) j' V e, a6 s# p' d0 a! d$ z {
t; W- f2 F' I9 E5 J6 Z4 H .active_low = 0,
# b6 q; n; \1 m5 k P2 { .gpio = DA850_USER_LED1,
& I u( N; ?2 [ .name = "user_led1",- {0 q0 F4 i) s, g# n2 { w5 N
.default_trigger = "default-on",
6 X) k# i. `2 G# v },5 C( z. Q) H+ l/ C+ h: C$ ^
{$ |! I' x6 e% y
.active_low = 0,
6 W9 V7 V- ^" S: h .gpio = DA850_USER_LED2,
+ H& ~! p/ ^; N p# c3 v .name = "user_led2",
; X% q, c# [ s2 A' O2 E( U .default_trigger = "default-on",8 X3 W( D& }8 k4 x9 w" C
},
$ u9 S( o7 }: c- r {) Y) O' N1 r$ _* t1 s& `
.active_low = 0,
" r$ G/ R/ }* h0 x, t; F .gpio = DA850_USER_LED3,6 P+ X5 y- Y4 H: K$ D* e! t5 _# c1 Z
.name = "user_led3",
8 w8 C; s/ T# i8 V( j .default_trigger = "default-on",$ j% t5 c+ v2 Z8 Y
},
% U; _" O4 c; c2 B9 S};
( a; \ d- l6 y7 L% Q
+ u, l) Q4 g$ Tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" ~) T0 I+ U" e0 ~. y
.leds = da850_evm_tl_leds,# I, T. w. V+ D U) v! K- f4 T
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),. h+ u$ @1 V3 M: K1 o6 c$ F
};: @2 ?' L% J1 [2 A
8 S! h1 [) i3 d a& E. ^- istatic void led_dev_release(struct device *dev)! u/ c( N w4 I. o
{4 w+ R7 j" O3 j/ P$ _; K$ R
};' U, f. c8 n4 H, c( t
. |- t2 S6 H& M% U3 j. ?static struct platform_device da850_evm_tl_leds_device = {
; v( }) ^/ A+ z .name = "leds-gpio",
$ G* k9 J7 s5 K7 X .id = 1,
1 n% N5 r2 b* ?5 A- g .dev = {/ M$ b1 |* h9 y3 U Z1 H% d
.platform_data = &da850_evm_tl_leds_pdata,1 ~$ p$ A4 R( _9 r3 _- ]
.release = led_dev_release,
- i/ E, n- |* m) v) m. |/ G }8 C& N# g6 u/ j* ^( S, y
};: s" g3 J6 l+ R+ n# [" i
8 l% ^4 k `' P. cstatic int __init led_platform_init(void)
. b) P0 S4 j# H) c( s& e2 l: y{
- v$ O/ s# c+ T' z int ret;) i8 @: ?6 @# C* D
#if 0# d. U6 S5 X- \. H
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);+ x3 a" w" V, {: @0 j
if (ret)4 B/ L z* \6 @8 \" z) L
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ u4 o$ |. F0 H, i5 [# d "%d\n", ret);
2 k+ V1 [0 d! S! K1 w5 k#endif
4 }5 e5 x! K; E& m ret = platform_device_register(&da850_evm_tl_leds_device);: Q4 A7 ?; K( g5 z7 m+ O" X8 S$ s0 a
if (ret)6 n% W6 s$ h5 I) g
pr_warning("Could not register som GPIO expander LEDS");
; p! _/ W4 o8 w5 l0 g2 P" j& d8 \( b else/ C2 \! y' x, x( P- c2 i F3 x# S
printk(KERN_INFO "LED register sucessful!\n");
/ P) w4 U; Q+ v0 b
' f6 h. W$ h4 z. U9 n return ret;/ q6 z% a _7 _- V- E+ c ~" h
}
$ V, m b1 K+ Y3 N! N0 e
( I9 {6 _6 s \( Bstatic void __exit led_platform_exit(void)- \4 f5 s9 K4 c- Y& z; g' s1 p
{
6 S2 |! `6 T% A; w# W' W platform_device_unregister(&da850_evm_tl_leds_device);8 Y6 F2 D7 i; x0 K, p6 ]& Z
+ }$ N8 M/ L5 E- W3 F6 m% \: P6 X
printk(KERN_INFO "LED unregister!\n");$ n" C9 U' ]/ E. K: c
}9 g/ b/ K' ~. u0 t4 U& F1 ~% c
4 K& q% y) g1 ]6 }( M: G6 f% F
module_init(led_platform_init);2 {" |3 B/ A8 ?" d9 o3 _
module_exit(led_platform_exit);
% V6 V/ W6 T, S' W5 c$ \$ E3 p9 Q# X8 N
MODULE_DESCRIPTION("Led platform driver");0 Z; w" `3 |0 D* p
MODULE_AUTHOR("Tronlong");2 G% H" A* V* F; h% H) u
MODULE_LICENSE("GPL");
3 p8 f9 N& f' m3 B3 m* A& ^
3 y* W. d9 c' g3 p }- R# P |
|