|
求大神给下面的程序做注解,请稍详细些,谢谢。2 o! u* s% \3 c6 z! @
#include <linux/init.h>2 n( h0 q! R5 [& ^# D6 z3 z
#include <linux/module.h>: D$ Z# p. h% @ e) l, e0 t& Y
#include <linux/kernel.h>1 W, } \4 }- W% C) v+ X$ R
#include <linux/types.h>. Q4 I4 ]! v! O. U
#include <linux/gpio.h>: w# y$ U3 n! g% {! t9 @
#include <linux/leds.h>" Z7 K6 j8 E3 J
#include <linux/platform_device.h>
) m, B; w0 c) r, I1 y* v5 \' l
' h( l' v/ M; v9 P+ r#include <asm/mach-types.h>2 G* i- F; i: F+ a2 B2 e+ i
#include <asm/mach/arch.h>
2 y: }( m- C/ W. U* e#include <mach/da8xx.h>% }( i6 e6 P+ \3 c
#include <mach/mux.h>
4 S8 m+ ~( p- N; B. V& Q- a+ B' R0 b% H! v! B2 h
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 J, b8 i. W! N. m' _: n#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ h E, F" C& B) y- J3 V
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; I+ X) _9 v! b) V- |0 Y; ~#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* I# ^% i# m9 X6 j" \* n, a1 `& p+ h+ S# u- t, n: Q0 w
/* assign the tl som board LED-GPIOs*/
7 l- |; X2 `" V: ?1 K3 f7 u I. m5 gstatic const short da850_evm_tl_user_led_pins[] = {
* B3 [; P6 b# J0 t /* These pins are definition at <mach/mux.h> file */ q$ a# d6 \/ H; U9 ` k
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* M4 L$ H: r7 m0 e7 C
-14 ~* k [' C& Y. h
};
3 ^! y1 D" {$ O
: R- q2 E% M, R. ostatic struct gpio_led da850_evm_tl_leds[] = {
* o8 A( @' n# `: j2 m {0 v5 t: B" B4 n" a5 _3 ?/ ~
.active_low = 0,
: p# U1 ^# T! U3 X+ b .gpio = DA850_USER_LED0,
1 D0 g' |! u( b4 d .name = "user_led0",
1 U, L6 M2 _+ p/ S& R .default_trigger = "default-on",
4 f# {! m2 r3 Y# M* S9 u& G- y' S },
& u; J0 L6 o! ]+ y/ v5 Y) o {
' O8 v7 K& d. d5 G6 j" K .active_low = 0,; ^% W H l2 o1 U# F
.gpio = DA850_USER_LED1,
7 K2 K8 |; y* _ .name = "user_led1",7 p) Q& n6 `. `/ G& D
.default_trigger = "default-on",$ l; W+ g' p e
},
& n% p! Q Z# b- y {5 w( [6 p8 q4 w0 X& b1 I
.active_low = 0,6 ^: E8 X# R. ^ O& Y& W0 Y, s! m
.gpio = DA850_USER_LED2,
) p% h+ B" X u! y; o1 S .name = "user_led2",, X" i D8 _' o# C/ q9 o7 ~
.default_trigger = "default-on",) F5 v! _+ I3 X! a u
},
+ x- K" Q/ f, @9 l/ A. d0 t* Z+ U9 @ {; }0 a/ N$ e2 |4 F0 W
.active_low = 0,
! }* k6 x. K: s" a* F' R" l .gpio = DA850_USER_LED3,
9 L( T2 `9 L' b .name = "user_led3",8 V9 f) w; r4 O/ M
.default_trigger = "default-on",
6 B, \6 g+ n: N) {" y$ N0 H },* d$ j$ d3 J. D% p! N* \
};
4 |& ?' @8 G f3 E8 r* \8 W0 w& u5 o' E9 H" X0 g n) J
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ W) l# T/ A0 P4 e
.leds = da850_evm_tl_leds,8 z2 X2 f6 `7 ?+ `' o- D- m. E/ O* Y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 H1 S9 u0 M8 [ ~
};& A* w$ w) T$ E' q) |
8 K C, U. c( M$ _static void led_dev_release(struct device *dev)) H3 a8 w. E+ S& a/ x- k
{) w" c9 ~% S3 W+ a, g
};0 d+ C/ [) M. ]5 s; ?) j
' v2 U9 b( ~, ]: _
static struct platform_device da850_evm_tl_leds_device = {7 S& f* \- G* _+ g) d: D. G2 ~1 U. p3 c
.name = "leds-gpio",: b3 C3 \& C& @0 D$ W
.id = 1,
' j/ I ]7 }) x* L .dev = {
& O/ q* ]! r$ }6 w3 f .platform_data = &da850_evm_tl_leds_pdata,5 i: W7 O8 a( `: o6 g( t; D% Z# l" R
.release = led_dev_release,7 y0 e/ w$ ~( _5 L. J& o( N. v3 d
}
1 K0 H6 x- {& [8 L1 K, W$ N+ {};
6 s4 J2 ^3 c- C: A0 b$ F
/ s, @; \3 N1 ]0 D1 T, D* m, v0 Dstatic int __init led_platform_init(void), N8 j( o( m+ c1 y, g8 R
{
2 O& ]8 E# q" d+ F) @/ `) w3 f& q int ret;& K0 k( W1 [+ ^# G9 E. U# m
#if 09 P H3 B5 q) t/ X
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( q5 @" q k* p% _
if (ret)
% X; \9 b% \% @# g9 i! a' y pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 i' J1 @3 A$ D' z" { "%d\n", ret);
6 O4 _: ]; Q8 e9 X& X6 F7 @3 y#endif
9 Z; D: R& B3 D+ r: q: d3 o ret = platform_device_register(&da850_evm_tl_leds_device);
@5 M# [/ ^- Z- S# v( z( X if (ret)2 L$ O7 T# j8 z) A" W+ [# D
pr_warning("Could not register som GPIO expander LEDS");
0 g" L# W1 ?7 C; H/ @1 [ else
/ l7 `, r) X' s6 a. W$ u& x9 A5 x! @ printk(KERN_INFO "LED register sucessful!\n");0 N" h9 ^7 V! U
2 h7 c; A1 |: y5 p* m! L return ret;; |& E W/ z E# L
}
2 I9 O' M( ?6 `# ]7 a/ Y& r# u4 M7 V! N4 K' W
static void __exit led_platform_exit(void)2 z+ B0 t% P' d+ K
{
: @/ q! X7 S- d: U! \# V platform_device_unregister(&da850_evm_tl_leds_device);8 R" t1 ]/ g; M, m" }1 l$ M5 e
5 n4 \0 A! H. |; ]
printk(KERN_INFO "LED unregister!\n");& ]+ x0 C7 }& u, F$ E& P
}' @- p3 T) A E* N7 u8 g
6 s9 v+ Y. {% |8 n E) t0 k5 R* |
module_init(led_platform_init);
8 N6 J+ k" y% w0 @- r! Rmodule_exit(led_platform_exit);
5 s+ `5 |* N4 K3 c; F, {) o/ L1 _& D4 \0 O2 @% k' j
MODULE_DESCRIPTION("Led platform driver");; l6 Z0 G2 g8 R. x& p
MODULE_AUTHOR("Tronlong");
9 c! U8 Y- l1 L, I3 W. o# r3 OMODULE_LICENSE("GPL");
. j" d' \" G* K# y1 N- W/ q' ^7 k/ `& J7 ^2 @4 c
|
|