|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* q8 X, G+ ? P& k#include <linux/init.h>) ^( b( n& P" n3 x( C& k/ n% q9 k& }6 |
#include <linux/module.h>1 q J' F# r8 M
#include <linux/kernel.h>/ ^2 F& O0 Q' @& [# W
#include <linux/types.h> [: t+ h+ q8 u1 X' x$ s
#include <linux/gpio.h>
( X" W) G5 Y1 V, P- ?1 l#include <linux/leds.h>
. W2 T& `; Y+ r$ o( W#include <linux/platform_device.h>$ c" e" O0 s+ Z
0 m* j2 d+ Y( |#include <asm/mach-types.h> j$ H0 t5 t3 t1 G% w* C9 C! `9 L
#include <asm/mach/arch.h>$ [, x% a0 K5 N+ l# c/ m3 ? y2 w: n6 b
#include <mach/da8xx.h>
4 |- }. ^6 |$ R$ Z3 Z* @, u#include <mach/mux.h>% s. q0 b" B( _0 n# j
~9 m; f0 ` W. P" C" W' I8 O: ]#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 ?, w$ z {: N& w- d0 `
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): R6 l/ [, x4 T/ U7 z5 }2 \/ C3 D- j
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
1 k' T7 M2 d% C P1 h#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ p* ~% n! s8 h! S! w. [# u
/ M9 X! G2 k* {- y) c/* assign the tl som board LED-GPIOs*/
1 L4 P6 w& p; `2 |: i4 L" istatic const short da850_evm_tl_user_led_pins[] = {
+ R& }& y. N! K; I /* These pins are definition at <mach/mux.h> file */1 I D" c: M; B( `! D" u! C! g
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- Y0 L) Q5 E; |+ g
-1
8 c( F# G. d* u};
9 h% t. o, P9 ?
! N' W5 p+ q$ P: {; M. Estatic struct gpio_led da850_evm_tl_leds[] = {
! W4 y# Y$ f% ]: e {
, u" T7 a g+ B! v; Z4 `! o .active_low = 0,+ u& R7 j, B2 D4 g
.gpio = DA850_USER_LED0,2 G6 L O# P. e$ g7 N. x
.name = "user_led0",9 _8 M6 n3 b y+ b/ W: M
.default_trigger = "default-on",4 S' X; ?7 Z; T
},
8 p8 R/ B' h2 ^ c* R! m5 U3 x {
3 Y& v! Q U k7 Q .active_low = 0,5 ] o- D: D/ Q
.gpio = DA850_USER_LED1,/ S0 |/ C, f2 E, c" n3 X% s
.name = "user_led1",
2 i8 U, Y* X' U s6 k .default_trigger = "default-on",. M( t/ Z u; ~( y5 f# t% Z
},6 a- s) j" u- S3 R+ X
{
; F- ^: O" K& [" e" W; R .active_low = 0,% w$ h% }7 p1 G7 S# t& |
.gpio = DA850_USER_LED2, r2 `0 t, @/ E4 O+ }4 r2 [
.name = "user_led2",( X# ]+ [: ^: I& a" j
.default_trigger = "default-on",
L+ ~% B: H7 ]+ a. v% M },
$ \- x8 y- E& u0 y {4 c9 W. n; q- l( W7 ^8 T U4 E* ^
.active_low = 0,6 A; R1 e5 ~6 k& @) w
.gpio = DA850_USER_LED3,7 U1 @6 L8 c" o( |
.name = "user_led3",: s. _$ x3 @: d; m B
.default_trigger = "default-on",
. B7 I5 v& d+ b/ j9 C8 i },
s1 O& V, D; ~( M0 F" K1 J};* }% V% t4 W4 k3 W1 ~
: F# m% q/ K4 }+ b* M% O e
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# n( s! ?9 B$ m/ f+ W4 E& P5 j
.leds = da850_evm_tl_leds,. Y4 v6 R' V. L
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),. ]4 k" j* E% `& h1 a: J
};" ~/ b% j; @% ~; Z: l8 l
9 _8 l: f3 s# l8 g2 \' xstatic void led_dev_release(struct device *dev)
9 \/ W& E H) {{1 ~0 |7 C* ?7 |& }# x3 G" ~
};4 k/ l3 v" ]$ r6 \' |7 g! `
$ [9 Y, B* }' ]6 D7 Bstatic struct platform_device da850_evm_tl_leds_device = {: X* T) v$ y8 A; c3 e, [
.name = "leds-gpio",! H8 f- X% c6 A
.id = 1, x" l$ S g) K" J# Z7 e# t
.dev = {
; t w1 Q# K& t- n4 ` .platform_data = &da850_evm_tl_leds_pdata,' L- }7 [# y8 ?
.release = led_dev_release,
) I4 ?2 u4 n/ V$ A" d }
3 D2 N* S7 E- j* v0 Y- _5 z};* R3 J/ T6 A- L& ^2 u
( k, c6 L& a. wstatic int __init led_platform_init(void)
& J" O' E4 s# g4 Q1 {8 ^{
) \" U$ |" Q7 L) [) a$ o int ret;
, |% y+ X5 O2 U0 j' d8 F#if 0
2 w1 R. C) [9 F1 Q6 r0 x( C, L ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
e+ \3 o9 E& h9 z+ x' [! U4 V m7 Z if (ret)
3 r! R0 V$ C( o8 \* S- B8 }4 \ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. Y# D3 F9 X5 b7 D5 h) ~0 x "%d\n", ret);
p' D: Z7 V" L2 a z1 ~; `#endif
; k" y& v' a* r1 G: _0 \, o" a5 P ret = platform_device_register(&da850_evm_tl_leds_device);' `/ L) M# b8 W/ d# l" W3 T$ S% J
if (ret)
: v/ C4 p' O/ s+ r3 F0 n( |/ s* g pr_warning("Could not register som GPIO expander LEDS");" k1 @0 P6 e* U2 T) J/ S* [
else4 h6 V9 I5 O5 _' X3 X0 U; f
printk(KERN_INFO "LED register sucessful!\n");$ {& f4 }- d( z, Q% Q
6 C# W. v9 |) C8 d0 |, e return ret; U9 C8 D9 Z+ G: s5 U3 d7 g+ H6 [
}
- `) o$ o/ X0 D7 R6 J/ D* m/ f* i" M
static void __exit led_platform_exit(void)- m( X1 V4 Q) [; H4 C
{" [/ i$ E6 \% o2 E3 f
platform_device_unregister(&da850_evm_tl_leds_device);
' ^$ ^8 Z3 D! J# Q7 P9 d( k
0 ^1 @" G* N2 G6 q/ C& F. Z, i printk(KERN_INFO "LED unregister!\n");
0 [) ?( g, ~ X/ x- c3 H U}2 t3 L/ O( J k+ T
9 d9 t9 c1 F+ Q" O' I" pmodule_init(led_platform_init);! d5 \) L$ T9 C4 c1 J; d
module_exit(led_platform_exit);
# a# P( s. M; a* q8 H" p0 u; ^+ D3 R0 o2 X; H& Z0 o
MODULE_DESCRIPTION("Led platform driver");
, u& y, Y1 T/ uMODULE_AUTHOR("Tronlong"); t+ }) U+ c6 ]! |- J1 f
MODULE_LICENSE("GPL");
9 P5 e" B$ _+ M, w6 m; s) Y$ o' |$ [& Z
|
|