|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. s% p+ D1 D- @- p
#include <linux/init.h>% y# C% \' c' K5 L* N% Z
#include <linux/module.h>
5 b7 ]' }0 L, E( X- Q$ k4 R#include <linux/kernel.h>
; r5 I$ @& o4 l+ h#include <linux/types.h>
+ ]0 Z2 B) }, j: y! f7 z* D#include <linux/gpio.h>
0 ^! u# g9 R d( a#include <linux/leds.h>& w. N9 _5 C- |+ a: P' d
#include <linux/platform_device.h>4 y6 P( X( W5 \! S, T
. G: e4 r8 ?: A9 z: S
#include <asm/mach-types.h>
* s* Z" ?& A2 c1 [# ^7 v+ h#include <asm/mach/arch.h>
+ x5 B0 G/ F: Y1 r2 e. \( B Y#include <mach/da8xx.h>
' f$ ?: x$ B$ q6 E0 B#include <mach/mux.h>) z& K1 V$ ? ?, Z+ k
- _3 x7 }* ^6 |6 b3 X#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; v, Z2 c1 `& \/ u# X& ~#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 Q3 ]$ @# a2 W3 \2 v! c+ a; M
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)! ^; b9 y0 Q" V- t6 E+ P
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); y8 z; ] W3 G* q, O
, R* @7 k% |2 n$ F$ f& [6 N/* assign the tl som board LED-GPIOs*/
6 A; \3 Y2 ^2 I% ]$ W) ]( Tstatic const short da850_evm_tl_user_led_pins[] = {2 o1 N8 S: c2 l+ T" ]3 e8 N: \ G2 b
/* These pins are definition at <mach/mux.h> file */: e! C- M: Q) ~. ?
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' R+ j. v: `) a' W( e5 M) Q
-1
' }5 U3 P8 @ P/ W6 ]) i. N3 F5 [$ |};
: H) ~% O9 ~2 d8 W8 ^/ D# s* S' V! @
/ d; B3 R; [* \' V, gstatic struct gpio_led da850_evm_tl_leds[] = {
/ {# C _% m" k) V5 ^ {
* P3 G' T r: A$ d" W& Z .active_low = 0,
% l7 D1 z4 G' l# P: Y .gpio = DA850_USER_LED0,* G( i, R) J& ^, @! ^) s
.name = "user_led0",% W1 [6 }+ o5 N# z: g- M0 W
.default_trigger = "default-on",
. ]; V6 P5 D8 _" v9 f },
9 R7 C+ h. J3 ?: u4 J {8 t- ^' S% U8 P2 a- {$ C) h: k
.active_low = 0,
4 \+ \0 H/ X9 [$ W6 `, d' s .gpio = DA850_USER_LED1,+ z+ Y# s( N, I# W. j
.name = "user_led1",9 g4 Y! F8 P: g- m( r' d; o8 \0 Z
.default_trigger = "default-on",
+ X; S( \' a/ Z6 [2 k. w },
/ K' P6 r% r: o. Q- R9 | {
( U4 N m) S( O) N, f .active_low = 0, |. j% u) ]9 ~$ t+ `9 {
.gpio = DA850_USER_LED2,6 k7 v6 a& m5 C# H1 \: ~
.name = "user_led2",8 P, z2 s2 m V! n
.default_trigger = "default-on",
! B2 p6 r* \- v [2 o0 l },8 p$ s$ W+ O# |1 N# t; C9 a/ q
{
{" O0 X& F6 P" O. D8 |3 _ .active_low = 0,! E$ p/ D( n) f0 W) \3 y
.gpio = DA850_USER_LED3,
2 w+ f- l( I4 @" K( D m .name = "user_led3",
0 p/ F6 L8 q p+ `- b( u- w+ g. T6 E .default_trigger = "default-on",
) U$ T( ]( X5 R1 l( k },
+ u+ p, a ^, p};
6 y2 H5 B+ i) y' x0 X0 n% z6 c$ B. O% ^' |
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% x$ p3 I* W4 }6 b .leds = da850_evm_tl_leds,
, O6 h. l5 }. Q6 Q3 P7 @- }5 b9 } .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
: E% X1 V) \# i7 g) q' q4 M. Z% B};: Y- y6 ]3 \1 n
0 _% @ g6 q2 [* v" a, r& Ystatic void led_dev_release(struct device *dev)
' `; d, W/ B/ @+ J+ X. k% E{9 D" b5 `/ V) W, P# l0 q$ n+ [) g, H
};
6 ]( E2 L& ^3 [% S% O2 R! U7 p$ Y3 n0 ]$ R1 m
static struct platform_device da850_evm_tl_leds_device = {- Q7 V T2 \. ~$ Z; l9 x
.name = "leds-gpio",
+ H0 G$ D' K" p6 e! g I# {! y .id = 1,
3 w' n+ J5 v5 r+ v .dev = {
9 Z- B0 ]5 }6 u* j9 l7 S .platform_data = &da850_evm_tl_leds_pdata,
' l! B; V) m, [ Y' f; A .release = led_dev_release,
: c# }' v! }4 R5 _ }
. `' I' }3 b: W0 n};
2 P- c& b' r2 o% r1 o$ i7 A& ?; y7 l9 o9 S
static int __init led_platform_init(void): d. b' c7 K" ~* b, x
{" L4 {4 H4 @* U+ z( Q" i! Y
int ret;
- m$ H" `! r- ^4 a#if 0
/ R9 O2 d P# [6 z! `" v ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( @/ S9 z2 s2 q, [
if (ret)
6 ?2 W ^0 ^) X, D# c pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 n C9 k# j3 F" F' ~# C7 F8 k0 b
"%d\n", ret);
2 K! K/ z8 H! ~6 x* w2 D; [#endif: G6 ?* Z! u2 q& k
ret = platform_device_register(&da850_evm_tl_leds_device);
2 d+ ?; m8 E- d7 s0 H if (ret)
) D2 C' Z1 s8 ~% i( M pr_warning("Could not register som GPIO expander LEDS");
% e3 _4 G3 s4 z6 g' p else5 J, Q ?% L! H( D9 E8 N
printk(KERN_INFO "LED register sucessful!\n");
, j/ c& a7 y+ }9 X P+ N" l; s; v" Y8 d+ g2 ^" { Q; d
return ret;
& u1 |" @ `. p: O$ R' P}
1 q4 G2 ~1 Z! u/ X
$ G' s, d; j2 }: ostatic void __exit led_platform_exit(void)
$ Q( d9 X( @3 G8 ~{6 S: i0 f* v1 X" v( l; h! `3 F! J
platform_device_unregister(&da850_evm_tl_leds_device);! w1 j* S1 K; W3 s2 N2 p
% s/ G' h6 w/ C2 U2 ]- S' }
printk(KERN_INFO "LED unregister!\n");$ f: e' u- u8 ^* c* K
}
0 l3 z4 C! B, i, R t4 r+ w# C+ U
module_init(led_platform_init);2 V- @9 [# b& N+ L
module_exit(led_platform_exit);% n( o2 T) A C o0 }6 ?
4 }$ n( w# c+ p1 Z! O0 m) _
MODULE_DESCRIPTION("Led platform driver");+ f V" }) L& J& h
MODULE_AUTHOR("Tronlong");9 x. d+ X/ ]' L
MODULE_LICENSE("GPL");" K/ R" y! _) h+ b: g5 c& l6 w/ X
4 \0 |7 f+ K2 _5 t |
|