|
|
求大神给下面的程序做注解,请稍详细些,谢谢。: O x7 [7 [! a" `
#include <linux/init.h>
( ~7 W4 g( `8 M5 |#include <linux/module.h>) o' W3 h8 M! i2 o5 H7 K
#include <linux/kernel.h>
4 X: ]1 X; e+ K0 J; ]0 \0 Q9 \#include <linux/types.h>: T- a6 D4 V- H. @ q' [6 C
#include <linux/gpio.h>& J* f* R- g# x& b6 {7 q. D
#include <linux/leds.h>
* b& A9 n" r& W9 a2 N#include <linux/platform_device.h>
# S& ]( |/ a7 Z/ f8 H( {9 t- r0 J6 f' {7 O: q' p
#include <asm/mach-types.h>
. d, z1 R6 |% C8 b: W8 b5 w% Y#include <asm/mach/arch.h>. y9 W% K& B3 u
#include <mach/da8xx.h>
$ X- y( G/ q) C: ^- i#include <mach/mux.h>8 m. Y4 ?3 A# F- p. N
; v9 M# ~% r+ X2 Q9 D- F: E#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ u; }. V6 H( M* E
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- ?* r+ L) s; Q/ D#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)7 m: i" S( v4 ^; H. {+ k& Z4 I6 Z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" R! Y+ D* W6 ~- Z1 z& Q
/ ?& Z# |/ L: b8 p0 [5 L6 t
/* assign the tl som board LED-GPIOs*/9 ~, q a* g6 M3 F$ r+ y$ m
static const short da850_evm_tl_user_led_pins[] = {* G+ F, {! h/ v
/* These pins are definition at <mach/mux.h> file */' m+ E( \0 n) K( N" K& [6 j+ f' w. T
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: O# F& A, F) W6 G. r" u
-17 ]" |6 ?* a6 q0 ?# d! W) p
};0 S2 { F, w: ]/ e
( P* i/ d6 V S, O* O! z; _
static struct gpio_led da850_evm_tl_leds[] = {4 R9 R: w) N2 I5 g% J
{1 v( n! |6 n0 C! M/ S- \! s2 k
.active_low = 0,
4 @0 {/ J. C& G* t' V .gpio = DA850_USER_LED0,4 O$ Q/ m9 j8 C/ B# g/ z9 O
.name = "user_led0",
4 {- N1 f* w' d2 A' s+ v( Z7 P3 W .default_trigger = "default-on",
) @+ V0 a; G" l& [+ D },
! \/ v$ S f; V( T$ E W2 k4 h {
# I L1 W* u2 ? b) B3 e' ^) i4 ] .active_low = 0,
O& Q r& y/ G% _( W1 v/ v .gpio = DA850_USER_LED1,/ p& s9 i8 v" }/ W. l
.name = "user_led1",
7 L) |0 N& a3 d. A, T$ W2 l .default_trigger = "default-on",: ~+ @4 g4 `' w1 [1 W4 J: M( o
},
Q9 T. o' @% N i) l( @ {
" g- Y# ~9 m% c% c' x0 ^4 b .active_low = 0,
! y O* i d4 C9 N0 l; i+ R .gpio = DA850_USER_LED2,( F5 N7 w4 l* z7 R# N* w+ _" J
.name = "user_led2",, P/ x1 l4 |8 P( ?. a
.default_trigger = "default-on",5 @! f$ A- l9 `# E$ ]
},$ c5 Y; V7 {! J. H# k& R3 ?
{3 J: l j6 \& q$ s3 e5 z- e O& |
.active_low = 0,
/ f% x$ W! W* i' l" x .gpio = DA850_USER_LED3,! I, Y/ F# P2 o T% Y
.name = "user_led3",
! x5 `( v* Z4 N2 y3 J) Q+ Q .default_trigger = "default-on",
1 p- a+ \; S- l/ ^6 i$ H },
3 B8 H: k) R3 c$ n4 u1 c# d/ q};
9 A$ S H, B6 ^/ \! k d* L5 K! Y: Y* H. C l( p
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 r( R* v. E* c; `( V. R3 w
.leds = da850_evm_tl_leds,
. b" ?9 n# a8 j# |2 r1 z9 M& |/ b .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
5 C! u8 f2 ~( c2 ~8 F};
0 D) y7 |( L1 y8 ]9 G! J. |7 H( G" k7 u9 l4 Y1 A* |. j" K
static void led_dev_release(struct device *dev)# q. P' U- H, O
{
f* g8 L% }" A& @};
# s& ~5 i' d/ `2 I1 @* X4 i& k8 T" C) D
static struct platform_device da850_evm_tl_leds_device = {! Z) r+ C7 F8 i3 v4 t
.name = "leds-gpio",7 f+ D5 \! S. I A) k$ D- z
.id = 1,
. w- T6 z& i: D5 _4 m& e .dev = {
4 U& H' P9 k R3 Q5 S! W .platform_data = &da850_evm_tl_leds_pdata,
2 Z: ^7 H- }" U .release = led_dev_release,
* r- w( i8 @; t7 ~+ K* g }
+ m4 x9 @9 n2 c% S }5 Y};0 ~; w2 s$ z' v" h
# x* X" q8 L' ?% [9 x: w9 d
static int __init led_platform_init(void)
9 `& g5 r g) {& s* D{9 ]( Y4 W: e8 `
int ret;
& ^/ P: c# u( L6 L3 X+ ]$ H#if 00 e/ |, [& [7 M' F" l
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ i3 U- O) o! `" Z+ C7 Z6 z1 U
if (ret)( o% G A+ Q; B' H* p. u
pr_warning("da850_evm_tl_leds_init : User LED mux failed :") l3 q* H; r& `3 H# w1 E! J
"%d\n", ret);
2 q8 w# i+ ?! F( s, x. H0 k#endif
7 J ?4 l+ \. c6 Q$ P- W7 m ret = platform_device_register(&da850_evm_tl_leds_device);
6 I; y: X+ z- |5 I4 S+ V4 u. ?/ r if (ret)
8 W" A+ V% s* ^* \8 N' v pr_warning("Could not register som GPIO expander LEDS");; `0 X: e" F% m) [, V5 ~5 J
else8 Q2 a! Z5 T6 n- S r4 K |
printk(KERN_INFO "LED register sucessful!\n");' T" C+ i& l9 g* U, B b# H
: X$ L/ x+ S5 M+ {. f @; q
return ret;0 H; P8 ^5 ~2 b
}0 s, d6 e/ S4 O
* P3 j, ?& ]7 O- \* u
static void __exit led_platform_exit(void)6 X0 n9 Z; \% g5 L2 C! m* M0 q* |
{6 M! ]6 f4 L! Z" m3 w& D: j
platform_device_unregister(&da850_evm_tl_leds_device);$ d0 `8 g4 e! X( o* u. |
/ d$ l, {/ A2 K. g4 `; E
printk(KERN_INFO "LED unregister!\n");' i \$ E. R. l9 D$ s
}
0 a+ h1 S1 M8 Q& [1 d
+ m3 g+ S ^2 `( y2 j) Y0 Bmodule_init(led_platform_init);
+ \' C! V. Z0 n* Omodule_exit(led_platform_exit);
: c: Q) E4 p# e9 M4 J; K5 d U+ l n1 v( {- s
MODULE_DESCRIPTION("Led platform driver");, g! Y) P& Y0 R6 z; }
MODULE_AUTHOR("Tronlong");/ J/ Z+ |+ n" \ \' D& M
MODULE_LICENSE("GPL");& b( Z7 g# Q* i4 ^5 y3 d5 r# `
6 u+ k6 H7 _3 b4 d& z3 V5 \, u# v3 ^
|
|