|
|
求大神给下面的程序做注解,请稍详细些,谢谢。$ n$ v0 e! y. ~, O3 J+ f
#include <linux/init.h>
1 h% K m V! P, f, I3 s7 v#include <linux/module.h>
# Y# p5 k+ U' \% F8 G0 S. r#include <linux/kernel.h>
* G, ]0 W0 L7 H2 L' o" b0 N#include <linux/types.h># R/ \0 a1 X# j" T
#include <linux/gpio.h>
6 U( n. R. E( Z; N#include <linux/leds.h>
* ]) [: Z) Q' o' v. k1 e4 Q#include <linux/platform_device.h>
1 R2 d G: O. a6 m2 a# Z) c% {) _2 n4 M
. a5 u% P, {2 P p+ Y7 b! w#include <asm/mach-types.h>: H: E+ d* s; i
#include <asm/mach/arch.h>" A3 N1 `. @. h( B, M
#include <mach/da8xx.h>
' A+ e, e' ? J- ?0 T#include <mach/mux.h>
: g6 o6 \# T h, J- r3 W( R1 i4 Q: [* Z" n" S0 E+ A
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 \5 f# E/ ^" M- D7 ~5 M#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) p* ?8 }" F: X, \+ x
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 l' a/ J6 Z5 C" \- u3 U5 N& z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 j) D9 n' j' b) f6 P8 |7 P
X# b/ k! ]* }$ c3 s1 T/* assign the tl som board LED-GPIOs*/
* b$ @$ @% x# n, |3 |; Z0 wstatic const short da850_evm_tl_user_led_pins[] = {. D# k. `8 O6 z
/* These pins are definition at <mach/mux.h> file */% b6 h I2 z. t8 S
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ X& J& j$ ^: A6 @4 Y
-13 G4 x0 \) [. ~5 X8 P6 y- c
};( L# l1 {) i6 [& f4 ?1 W
6 I. [. m- O5 T" [2 qstatic struct gpio_led da850_evm_tl_leds[] = {
2 u# B1 t7 J5 ^ {
/ X- }# ~8 Z6 d! d- } .active_low = 0, q/ d2 a9 m, Z6 a8 E5 w- W
.gpio = DA850_USER_LED0,* z: |/ h- z0 v
.name = "user_led0",
0 \/ T2 h( T! |" P% T .default_trigger = "default-on",8 c, o) B5 E- `. _9 h- l
},
3 K$ [1 g% m, }0 m4 W9 g9 E {
+ X7 T# @# {, R/ T. B$ ] .active_low = 0,( c2 y2 p8 Q; z( ^: o' r
.gpio = DA850_USER_LED1,
4 b) I4 S; ~- |' X* n; h .name = "user_led1",8 V; `. `2 C+ B0 o8 A
.default_trigger = "default-on",
; k) u0 v7 z/ n. V( I$ m },. C3 l3 j* W0 _" U1 q7 C6 a
{
0 }* s5 J' F0 X5 g* y7 P" a/ E. g .active_low = 0,
T# o3 h. U# j; d+ ^ .gpio = DA850_USER_LED2,
' ?% P4 A: e$ t0 ^! i& A .name = "user_led2",
+ a1 s( n' B2 K2 z0 U .default_trigger = "default-on",) E" r; m; t& c! R9 @$ ^. y
}, c3 a! O+ D2 d8 e9 ?8 U8 F
{: B! Y2 E- Q0 y* T! k! q
.active_low = 0,
- e) k }& J" ~: D H' K .gpio = DA850_USER_LED3,+ d% a5 K, C5 O3 ^: R
.name = "user_led3",
3 \ z0 w* X$ W. p, F .default_trigger = "default-on",* Q6 ^7 S6 ~% }( @+ y
},
+ ^# d# B9 a6 Q) T5 @};' C7 A G' z5 Z( O7 S% `, ~
5 ?. ~- i' Q( x- `" r) A7 mstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 e8 h8 q! p: m3 q8 ^8 `
.leds = da850_evm_tl_leds,
7 e2 f3 n8 [7 I .num_leds = ARRAY_SIZE(da850_evm_tl_leds),! k l1 r% ?# X, N0 Z' m
};! s" E7 s3 `' h: f4 f7 B+ [" W
`" e! i2 V9 y8 X
static void led_dev_release(struct device *dev)
" D M" |- m- y; |$ g9 A{( ]9 a }5 d2 H
};
" `1 n6 G' `( I# Q0 k
4 A. K1 K1 p ?0 _/ w3 Wstatic struct platform_device da850_evm_tl_leds_device = {1 q5 j" x1 @; Q% B8 Z
.name = "leds-gpio",' H4 g$ I& b9 o! N/ j7 t
.id = 1,
5 p& D: T% Q. O .dev = {* X) F2 p8 }8 W& H/ Z- j
.platform_data = &da850_evm_tl_leds_pdata,& g9 y9 K. [; Q4 m" M' C
.release = led_dev_release,: ?# R! X/ S% ^ W+ `
}! S2 f0 M4 [6 x; x' e6 R" i; g
};
2 h9 A! ?9 L7 Y5 u" X+ |; N; g; b1 h ]5 d* I
static int __init led_platform_init(void)
/ s6 y }# |5 j! B/ X5 U: e- F* x+ Z{" I7 I4 X1 F! Z+ N
int ret;3 @" O5 ]+ ?. S/ g% x7 f
#if 04 o. _: h9 x# B4 a
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. P: \* `' L1 K% j
if (ret)7 n7 j& D3 a" Z1 B1 f/ @
pr_warning("da850_evm_tl_leds_init : User LED mux failed :": R7 C* g2 _6 p7 C2 M, n
"%d\n", ret);1 z$ L4 Y2 M. H% h; l( X/ l
#endif
6 r% [9 e, I" \7 F4 g* [ ret = platform_device_register(&da850_evm_tl_leds_device);' x$ O5 i3 S( d2 ~! \# L7 y
if (ret)
. p% w' x! _8 s- ]1 } pr_warning("Could not register som GPIO expander LEDS"); b% j) e. S: X. J- t
else7 H# e6 v" I5 ~ Q8 O
printk(KERN_INFO "LED register sucessful!\n");4 W) a, }: U+ `9 l; _2 C$ r
# z! |- c) i/ H. g, Y
return ret;
; p0 u; ~! b8 h7 }, }: k}: ^4 W) {, o- H9 ]) i& D2 p
, X0 c- K3 d* P* G* V9 h/ ^/ Tstatic void __exit led_platform_exit(void)
" _, G- d- \( y) M) e0 r{
) H+ j' F! e, c" }) U! ^ X# F platform_device_unregister(&da850_evm_tl_leds_device);. V G; s& w& B9 w( g: _
9 S& t- E" ^2 F, u
printk(KERN_INFO "LED unregister!\n");
2 E* {$ p6 U& n. _}
, N# J6 \$ D& \& {! u7 H
5 d7 w$ @3 V& tmodule_init(led_platform_init);8 _1 B# p8 } u/ t. w0 l
module_exit(led_platform_exit);" H6 S7 e, f3 |8 y
`5 F1 k; D" Q9 n. V
MODULE_DESCRIPTION("Led platform driver");
- ^! ]' k% l9 n) F* ZMODULE_AUTHOR("Tronlong");# @4 T( W; W4 `5 l2 W2 V; r
MODULE_LICENSE("GPL"); S$ g' X- I' B' t3 C
0 d) b( `$ F% B- b4 ^. v1 y |
|