|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 T' R- x- x: ?#include <linux/init.h>" E# q0 Q; }" G* k
#include <linux/module.h>
9 e4 t( T8 i' J# | O6 z5 x#include <linux/kernel.h>1 y& F3 E) c5 m- W5 {
#include <linux/types.h>
, H$ y- u7 M% n7 U4 ]- [#include <linux/gpio.h>
3 Y; y$ s* D- |# V& E#include <linux/leds.h>
+ y1 {* K; O/ j9 T: Y3 s1 \! L! ~#include <linux/platform_device.h>2 E$ t+ n& e# @, ^* }0 K+ x" B1 o) E
7 ^7 {- p4 B& ?) M! O2 i& k
#include <asm/mach-types.h>
5 }5 z+ x& c0 E3 ~/ r9 Z7 q- X#include <asm/mach/arch.h>) u. X6 u9 @3 ]7 }
#include <mach/da8xx.h>4 H4 z& H- T; Q! H6 m
#include <mach/mux.h>
! J; E; R3 M( g, Y3 Y3 n' D3 [2 ^6 U9 c0 H! Y2 L B( ]
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); W3 k( T6 i2 R+ H* ?
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 D( d1 t0 l1 \# U* T) x#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
* w h) K& f" m% ]. M: @#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* {- ?$ v# J% s9 Q7 r7 y
1 a. x: h9 d% o' F2 H7 R5 q/* assign the tl som board LED-GPIOs*/
! I4 l/ N, |+ f3 Vstatic const short da850_evm_tl_user_led_pins[] = {5 @" u& ?7 q6 w! x- v3 m
/* These pins are definition at <mach/mux.h> file */- B: M7 t L: G' k0 R
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 t- n. l' G& L3 \, E -17 N0 Q$ q. o6 j8 T. Z) j
};
4 {0 k- F4 C7 X0 S8 p, ]' p8 }
. v3 q6 z3 ]& h; M9 Pstatic struct gpio_led da850_evm_tl_leds[] = {
# {3 h1 h/ C: T$ V, y# k' O {. Y& ?5 y# o* v; |- q* B: U) L. ^
.active_low = 0,/ W; T" H; ^* J) M- h# a
.gpio = DA850_USER_LED0,
+ I c5 ?- W1 ` .name = "user_led0",; {0 v- ?* F r6 Z$ o
.default_trigger = "default-on",, Q7 v+ j' X- N
},
1 h+ Z6 `4 M7 u1 V& r( ? {' E4 A1 M3 L+ C3 x- d/ l0 P
.active_low = 0,! y9 B* `5 l1 a+ j
.gpio = DA850_USER_LED1,
* w( |- |, |' P- x) \- M! ? .name = "user_led1",
7 S$ ?9 S. F/ W* W .default_trigger = "default-on",
1 |4 P- t Q \# H: ?, C+ m },
3 G& v0 g2 i! b" N3 \" |" R {
2 j/ T! s+ u0 R( k* \6 V .active_low = 0,) R6 T1 V- q% T1 W, n4 _8 q
.gpio = DA850_USER_LED2,# _; c: i7 w: z- d h- n
.name = "user_led2",& d" w& c% _3 o9 \2 B
.default_trigger = "default-on",+ ?, I" E1 w' F& Z! ]
},: v2 G- C3 D' R' U" u1 f
{. X/ j2 U& y1 _& G" y. g3 m
.active_low = 0,
& J3 L# K- b- J, y# \0 I- l' t* u6 ` .gpio = DA850_USER_LED3,
5 k6 R# v+ m: [: f# V9 R7 Z$ h .name = "user_led3",! h( n; g, s$ r x3 I3 V8 C" N% P
.default_trigger = "default-on",6 z9 Z3 N4 ?; K: q
},4 K0 e3 [! r4 p, U
};
! G4 U& Q6 a. F) V9 Y" C C4 s7 \2 m# L2 Q9 N
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' k' H% n2 c1 p8 Q
.leds = da850_evm_tl_leds,4 q: l4 s0 f. ^6 |" V# d
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) i( N: O5 [8 Y) G) @5 e6 @: @4 E};/ s6 M& ?# d( m/ M1 ?6 U
0 w) e6 r0 X9 i4 g* K5 Fstatic void led_dev_release(struct device *dev): J: ^/ z2 D! q0 q
{ o& W4 U1 x& q& X8 X x9 h0 f
};
' Y5 M+ I3 K Z1 p0 r7 Y7 K
5 ^( L# K! H P2 b. p+ K! l& Istatic struct platform_device da850_evm_tl_leds_device = {* ~# Y! k. v2 R1 V
.name = "leds-gpio",
6 X G5 l5 W4 M6 j0 n .id = 1,3 ^( R# }# q. z h
.dev = {
. a; E- H( ~" O4 o7 e- q .platform_data = &da850_evm_tl_leds_pdata,
0 i* y4 G8 _- d W* y .release = led_dev_release,7 W' M, @6 H. e% i
}9 e4 h. h9 U5 G1 L2 J: P. E5 W6 }
};
b' \" {3 Z* Y4 m! u% H
: [8 L6 c" v; h% y7 k8 Bstatic int __init led_platform_init(void)" S, ~+ K5 e+ ^6 V" H, q* ^
{; v9 Z/ |8 f1 Y! U# Z" I( {
int ret;# G% C% Y$ a" S R- g1 g3 |) v
#if 04 I+ I# z. ^2 n* p3 G; S
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. P, u! n7 [/ N1 w5 K5 K
if (ret)) }5 u) f: T1 J$ d, v
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! S) ~9 w5 h! E$ d# @/ h
"%d\n", ret); C; x) p+ X9 p1 h; D
#endif
! ?( w* l% m6 @. ]7 T ret = platform_device_register(&da850_evm_tl_leds_device);
& s& U$ v) {1 [. p; S if (ret)
2 [, x3 \2 a7 |" O pr_warning("Could not register som GPIO expander LEDS");
2 V/ R1 X& F* p' L' R. n$ r. m else
. P V& B4 L! E- P) b printk(KERN_INFO "LED register sucessful!\n");
5 \; [/ j& y( B+ T# e7 i- n
4 n, R {3 C4 A- y/ R( x return ret;
( r6 x, P" f3 S; z1 J; r}
* C! W+ N7 t, |0 O- W/ C- \
, T7 k' K9 U; s5 h: u& z) R/ Pstatic void __exit led_platform_exit(void) i3 m3 { L* ?. X- p* Y+ {" V" K* D
{
- ~8 L7 v4 `; e- x# G; z+ J" } platform_device_unregister(&da850_evm_tl_leds_device);
' a/ j3 k+ P0 |6 `# K B) C5 F7 N; k
printk(KERN_INFO "LED unregister!\n");8 |1 ]0 `3 @# P! @! c
}, v% B9 a& T* @) n8 f
- D7 k8 j4 x9 G2 z! V' Mmodule_init(led_platform_init);
. p" h( H% D2 ^6 {, @module_exit(led_platform_exit);! B9 Z. d7 d- _
c& f2 P& W( O1 ?+ E
MODULE_DESCRIPTION("Led platform driver");
7 j; W- v3 L1 FMODULE_AUTHOR("Tronlong");% B) N; J T* q9 R. D. N- C3 A
MODULE_LICENSE("GPL");
( @7 l) H o# q9 E. k' {" \6 E" V" [! J0 v6 a' F! z
|
|