|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 d' k; }5 D( Z9 _#include <linux/init.h>% z* Z- G$ _3 c, k
#include <linux/module.h>
( p; @# p1 {, R# B2 [+ I+ m& k! j#include <linux/kernel.h>- V4 s" @" @: M. g5 C
#include <linux/types.h>+ J. r( w. y/ n
#include <linux/gpio.h>
& R5 x4 [) B( j6 J" [#include <linux/leds.h>
3 x" ?6 U) z- q- f4 Z! g#include <linux/platform_device.h>! j* A2 [& }- p# z
. B0 ]# c2 v( t/ F' m1 O#include <asm/mach-types.h>
! h- W. L3 _, [) A2 b#include <asm/mach/arch.h>3 N4 J# m; p- a, O$ Z6 O
#include <mach/da8xx.h>" _ A4 X3 F; o, a
#include <mach/mux.h>' E/ B1 m' @1 F2 d2 k9 b/ z/ V
6 C3 J9 q6 r# p# P& F% X* ?
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ H0 q$ n5 D* y$ \3 J1 M( A
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: Z3 E5 c& k: B5 }& V#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
0 a3 w+ E7 \2 n$ H. |2 f$ X. L#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): Y! w, E! O$ m+ @1 B( I9 _( S% ?; D9 Z
( N: F4 T4 n# `) S4 v
/* assign the tl som board LED-GPIOs*/& L% b7 l; h5 d- `& H
static const short da850_evm_tl_user_led_pins[] = {+ H% m3 y7 J# f1 b$ E% r: _/ S
/* These pins are definition at <mach/mux.h> file */, r& c' }1 X, L% x" D$ S
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," ~& w) j4 ~& [8 {7 Y" h% v8 F: B
-1
$ l5 @3 p7 W& X1 o};6 g# d* X$ O' S3 n4 `( [3 j
[, M+ q5 U! k e; estatic struct gpio_led da850_evm_tl_leds[] = {3 D6 F. `* x* x# O$ j9 U
{% O4 b& ?1 l6 q: _. _7 ?
.active_low = 0,
6 a4 Q* D+ Q1 @6 o: N .gpio = DA850_USER_LED0,
' n! I, X6 j! t( w9 y$ @1 F/ w .name = "user_led0",0 C0 D: }6 V) _
.default_trigger = "default-on",
5 J7 R- t; j* q2 C! b },
' I2 }; Q9 I. A0 p8 R0 w {' y" o2 j3 ~' F, p& @
.active_low = 0,
9 B* C% i! d2 B3 A' _ .gpio = DA850_USER_LED1,
4 s0 a6 `* _$ }" I" d3 @ .name = "user_led1",+ C) u; a- K! \! C
.default_trigger = "default-on",9 w: O* w& @! `
},5 e3 z. z1 U, `5 ^0 `% j
{/ i7 _8 Q' H2 q! j; M
.active_low = 0,$ v _ a, ~: ?: a/ J. O+ C( E) V! P
.gpio = DA850_USER_LED2,/ Q1 H( h3 i) o8 @3 w% t/ i* Q
.name = "user_led2",
! j; ?' T7 G- o .default_trigger = "default-on",, R- X" B! U( ~+ D# z. M* Z
},
5 K: m# B( g- q+ H8 | {4 s1 M- @1 A8 e2 [# f6 r5 M- `6 [
.active_low = 0,
" N) d1 {" A4 C% S2 l0 d .gpio = DA850_USER_LED3,
; r3 e& I! [/ {$ O .name = "user_led3",
0 O& H5 Q' _/ _5 H .default_trigger = "default-on",
" w: d' P/ Z, f0 z7 P% ]6 @ },
4 R* ~! l* A1 r- ?6 c, C m- ?6 ^};) w5 E' S$ w$ A0 t1 x6 a2 ]6 E
t- ~ [/ a5 z3 ]: o/ M
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 a# u) G3 g) p7 s e2 b) z% y
.leds = da850_evm_tl_leds,
+ I* k0 l' O( {% \) b% m5 \ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& S2 V" K2 j) w6 @. c};" `) a6 ~3 X0 Q$ H$ t
- ^7 Y- @. K f0 ~! C4 e! e4 x
static void led_dev_release(struct device *dev)" O% I( ~4 e9 @! L5 H
{6 e3 P* {& } k9 x
};
$ |7 Z. L, Y) D
) n$ H; R' p2 L( I; ^ q( ^" Lstatic struct platform_device da850_evm_tl_leds_device = {3 F) _% A( ^. y8 P0 w* ^3 T
.name = "leds-gpio",
9 i1 q* S7 u3 F, ]" K. q .id = 1,
" i) w+ o: Y! e: q3 R .dev = {! W+ `# W8 m3 k8 |5 V7 U7 V' m9 F+ F
.platform_data = &da850_evm_tl_leds_pdata,
& ^ p' \; ?; v! s: N& | .release = led_dev_release,6 F; O; m- p l: C! h- g G
}, J+ ~8 A3 k1 ^8 L
};# i+ s q. J* d, y
! P7 } T0 x/ M) f, Mstatic int __init led_platform_init(void)1 `+ j, [8 W3 U: }$ Q- {- v d( p
{' X h+ S; e F' y+ K
int ret;; ]* P: G; @& c' I! H
#if 0
1 Z# u! {+ ]1 o# |# y9 Z, X: N ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! d* q6 d) L6 H
if (ret). }: L( M5 `7 j8 {% |
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) l1 E" d/ p3 ] @1 G% F% N "%d\n", ret);
+ |! G- t6 a3 ?. k#endif
1 l+ _8 l; c- e B& M) u, d ret = platform_device_register(&da850_evm_tl_leds_device);: q+ [, p4 V; z+ m5 q( S
if (ret)0 h$ X+ m4 @. E- u4 d0 p
pr_warning("Could not register som GPIO expander LEDS");+ a& J3 O& u: J' z5 }$ B
else8 E( d: O/ A. b: [2 N5 e
printk(KERN_INFO "LED register sucessful!\n");1 J/ G* z$ r; k
3 M( p: W7 p& g0 Y T$ k
return ret;: e* ~: c4 g* C! H9 g
}
3 \! O5 G3 [1 N' M+ @% H" y( W% l; G8 x8 b' X" s! V! U s i4 d
static void __exit led_platform_exit(void)5 n& Y; e% Q& R" w' S; ]
{
' G2 ? N2 w o2 X4 q platform_device_unregister(&da850_evm_tl_leds_device);7 G$ |& k4 M# V0 S& L% {
7 F/ u4 {4 g8 l2 y7 e printk(KERN_INFO "LED unregister!\n");8 h1 F0 j2 B' H' J! ?" q% R
}
- ] ~! R ?; U; C
N9 q0 b) l9 l2 k1 n3 ymodule_init(led_platform_init);
" c- S3 E5 O" {. b4 fmodule_exit(led_platform_exit);
, d1 W' z' s/ |) }2 K, I
R3 L0 J6 }3 g& T1 U3 b9 k- }# j8 {/ cMODULE_DESCRIPTION("Led platform driver");
4 f: H \2 y! S: H$ c9 s2 hMODULE_AUTHOR("Tronlong");5 d2 e0 e e) E' ?
MODULE_LICENSE("GPL");
# ^$ N+ q* I; c: h' N1 j' U# P
|
|