|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& Q8 _8 a% a: q$ J {
#include <linux/init.h>8 Y+ ^- N# L8 ]- y
#include <linux/module.h>
- C( B; M. i$ F; {#include <linux/kernel.h>& j+ m/ e% @0 d
#include <linux/types.h>
" Q4 q* i4 L) y6 a6 }! Z E#include <linux/gpio.h>4 M7 M0 T+ z9 v5 c. k f
#include <linux/leds.h>
* t2 F {; l6 V1 n; I6 \#include <linux/platform_device.h>7 {" S3 i% c) {4 |
% p9 y6 ^( i/ g0 V#include <asm/mach-types.h> X9 y& [6 ~, G/ E
#include <asm/mach/arch.h>7 R+ U& n) r+ y3 [6 B
#include <mach/da8xx.h>
4 P" v$ f1 ~! ~#include <mach/mux.h>5 V& P& g9 ], H0 c0 n) I3 A4 U" ^: @3 s& P
& O6 f2 e( ^4 a u* \2 H#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% j5 Q, c2 f/ [/ `- X# b# [7 W8 s. `) l#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 |8 U0 I6 X: v L# |+ J
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
* x1 _: p" J6 K k a5 l P#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 R+ Y' l3 E3 j. q3 c- n
0 h" o% n& H6 F% I3 B: `/* assign the tl som board LED-GPIOs*/( `5 z0 }5 Q4 F4 e1 r$ ^3 k
static const short da850_evm_tl_user_led_pins[] = {
: m' g3 \+ x" ]: S- _ /* These pins are definition at <mach/mux.h> file */
: `* W h/ H4 \: k& ?' a E DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* i4 q! X; Y. B8 t9 r! f -13 Z6 `# f5 o+ ?) J7 ~
};2 d W. v2 n; W n4 t. o) N0 l( b
+ d) ?4 g7 ^$ Z- F6 V
static struct gpio_led da850_evm_tl_leds[] = {0 g3 n; h1 G7 H4 Z- l; Y$ K& A; D- \
{' F5 r2 m- h. f
.active_low = 0,7 a3 o/ x; T" E* W
.gpio = DA850_USER_LED0,
& K Z" M V/ C+ l" c% G .name = "user_led0",
! N/ U5 C/ i1 d; ~* h+ J4 K6 J& { .default_trigger = "default-on",5 O0 O' j* Y0 Y; X+ }
},6 ^# s1 z! W7 b; k" }# b
{2 E4 B" M u9 C5 \3 L
.active_low = 0,
% n: }3 \% E+ N5 d }5 u .gpio = DA850_USER_LED1,: H* }1 E& ~! K$ m8 g
.name = "user_led1",0 m, K+ K7 V5 \2 |; ?1 K
.default_trigger = "default-on",: a! W% i e% C' ]! s/ ~
},
7 ^8 S! |$ }- U& J% Y0 k {( L$ L9 c" H, e. @: ^1 N
.active_low = 0,
0 @& s2 r2 P: T- `2 h7 { .gpio = DA850_USER_LED2,* C" B9 v2 m& U, H2 L) r
.name = "user_led2",
0 w( D$ M9 Z* n: Y; d3 S$ W) A .default_trigger = "default-on",1 i' ?6 s+ }9 W& Y; W8 h
},% ?! t( b, K# {: Q/ l& o! }
{
* W# }/ i1 P1 {' p, Q+ {* B .active_low = 0,; h4 a, t) Q8 P+ V' H; R/ h2 O, ]
.gpio = DA850_USER_LED3,+ J4 N8 w* E- L
.name = "user_led3",. g `- r x/ {* D
.default_trigger = "default-on",
8 [+ i+ B/ O. t3 b9 j },
; |- q+ M7 K+ b( \};, j* a1 _$ b' M$ L0 T5 P
! ^* Z6 s* u! p! T/ _+ Y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) l4 `3 J/ B u/ _$ J% Y9 f7 X
.leds = da850_evm_tl_leds,
1 t7 M0 k- r! ^! R/ c$ ^- m# x7 M, p: z .num_leds = ARRAY_SIZE(da850_evm_tl_leds),, ?% s$ P$ x9 }7 P3 N. l4 E" O
};
6 j/ _( h$ q" g0 N$ C5 Y7 a" L: y$ |+ P* Q9 M4 d6 k4 W0 g8 \
static void led_dev_release(struct device *dev)
( S6 {5 {- |. _{: Y6 G7 M+ L! E! A6 N
};
; p3 I* v' o& `) X% ?6 D j+ F. m! }
! e5 W$ W( |7 j, i3 Zstatic struct platform_device da850_evm_tl_leds_device = {" A. ?# Q5 {8 D
.name = "leds-gpio",9 K* @1 L' r6 h8 L5 l0 I' a* r
.id = 1,4 D$ Z* S! u: R5 \
.dev = {
. L `0 b0 g# P, T .platform_data = &da850_evm_tl_leds_pdata,
0 S5 i- U" v/ ^) @5 p .release = led_dev_release,/ ]6 w. A9 x7 ^8 A1 v8 H
}! u }" d" {& z& x/ Y/ t+ z
};% Q- u7 t& B$ r( B( s# _# I+ z
. f9 D6 t$ B2 Istatic int __init led_platform_init(void)
0 R+ ?7 e: N Y/ u{
# a: j$ z$ |2 C' q int ret;
* h8 s. m# L% n6 w#if 0# w* m8 @' L' v: ^" l
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 }3 F* O; n' d& j) v if (ret)
/ w, B% g. _/ l7 W6 Q- ]4 V4 Z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ R f* L! A, N Q) b8 y" b "%d\n", ret);
% V+ M5 ^" n6 ^) p# K% n#endif
% z4 ?8 f+ @2 o+ e ret = platform_device_register(&da850_evm_tl_leds_device);% u3 y$ x) m* c
if (ret)
, @0 P6 S& S( Y1 h; y pr_warning("Could not register som GPIO expander LEDS");, @# H! G* _! X2 w% w) r& A8 O3 m/ l4 W
else
; c; M0 R; r: r' \8 @- [! U+ W! e printk(KERN_INFO "LED register sucessful!\n");
- n, N8 E( U4 u- K, C
# _) H& S& L/ Q; ?6 m( n return ret;
9 E. H3 o+ U, x6 v; i}
: d' A6 b+ v4 q+ a9 C2 H; L/ x" J
static void __exit led_platform_exit(void)
1 I6 q4 o; D) z# B' ~+ Q+ n3 T" _{, {" E' [- \$ i8 X
platform_device_unregister(&da850_evm_tl_leds_device);5 R' y* ^/ k4 C" e# U
0 K8 m- s* F# i8 e" L9 i printk(KERN_INFO "LED unregister!\n");* T$ l/ n1 w* F+ D0 T( j
}4 |2 ]! ] }( U) Y2 j$ G7 j, _2 |
$ q4 Y. [0 i1 |: p4 A' @/ n
module_init(led_platform_init);/ ]' g9 y4 ?8 z
module_exit(led_platform_exit);
$ D. M8 H r6 z
6 v( L$ O5 c0 @' l' c2 w: C8 A) aMODULE_DESCRIPTION("Led platform driver");& s; I% ^7 X8 ?8 m, |
MODULE_AUTHOR("Tronlong");
7 U& t. \+ @ }MODULE_LICENSE("GPL");
6 ^5 |1 J2 M+ F( q* {5 c
2 y, A) m3 ?- c( x5 q7 | |
|