|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ ?, N3 \4 f' C" E, c1 k/ x
#include <linux/init.h>9 C# C" K$ u! \& [
#include <linux/module.h>9 p* v8 f6 h$ {
#include <linux/kernel.h>+ \2 @ v- Y; j' a
#include <linux/types.h>8 [0 z Y1 p$ p% I$ k7 N; z; C
#include <linux/gpio.h>' u# w2 X7 f# Y, q9 O& \
#include <linux/leds.h>. J3 J% g+ A9 ~4 L& E) q" c
#include <linux/platform_device.h>7 l' n {; g, A0 S, b# ]: s
+ q0 j& o2 N( N1 s- U$ ~#include <asm/mach-types.h>1 W0 H6 w) H$ f$ K# u3 k
#include <asm/mach/arch.h># A" {( F! w0 O8 A
#include <mach/da8xx.h>
3 q/ F5 t" w; R1 v h* O#include <mach/mux.h>! g0 p. W7 z/ P: H( D
9 {5 K* r" P3 ?% i4 f
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0). m ], P" }' d4 N; B
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)" x b& ]2 ^' ^. j3 t
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)! ]3 x% Y2 v! m# y' W
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" i+ ?0 a. m8 r L1 |3 I4 b
3 Z/ J m: x m3 c4 X2 ]4 {/* assign the tl som board LED-GPIOs*/
% o H' ?* l/ Z( x8 ^& qstatic const short da850_evm_tl_user_led_pins[] = { Z; y2 I1 t+ L& b
/* These pins are definition at <mach/mux.h> file */. h9 X$ R- C! U% o
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( q% B: i: Z' j6 W" @& G% y -1
: b5 `1 c) M) T) N};
3 O) {2 O4 h2 U$ c& B
% w9 j+ y6 T5 Q& bstatic struct gpio_led da850_evm_tl_leds[] = {
7 v0 w2 J5 }. L+ x' m J0 o {
- R9 i, |0 P4 V* D) t7 f .active_low = 0," t. {2 i( O& X8 g% z
.gpio = DA850_USER_LED0,0 q [6 ~( C. k8 ?* j
.name = "user_led0",6 E! G) |, l$ C) S
.default_trigger = "default-on",9 g! c- c/ m1 i: k& o9 F1 H9 L
},& }- |$ x/ [* |3 Q8 |; _; ^
{7 q2 t; P# T, O+ T2 h
.active_low = 0,- W# ~# s+ h" l
.gpio = DA850_USER_LED1,9 m, ?) d1 u9 ?# d. g/ Q; ^. U
.name = "user_led1",( Y8 r/ g% O' y4 K7 H" P
.default_trigger = "default-on",
, X0 C+ N! Y) Q4 E },
- x% i& [: M- [3 d% l! ~6 T9 Q; k6 f {% q, l; r$ k# q* s5 k( E# A
.active_low = 0,
- {4 o$ ` Y* D9 C- D .gpio = DA850_USER_LED2,6 w( Q) a( \, B) i+ Q/ \
.name = "user_led2",2 J5 t- n; Z. e1 X9 n
.default_trigger = "default-on",# }6 i3 A' m3 S, y& {
},! i+ d& x {, r3 ~5 j( h
{
% p2 q j$ Z$ g: J& [9 ] .active_low = 0,! |; \5 d- t. b( }
.gpio = DA850_USER_LED3, u' U4 S! q: D
.name = "user_led3",
7 B4 r! u+ s0 g: ^ .default_trigger = "default-on",% R5 H7 j, A& D5 ^+ q5 t" M t
},% r& J( Z1 L7 c3 R, b8 _) F8 A2 v
};
4 s1 h$ M2 |7 V6 I
, W( T. J0 _9 Lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ I9 d4 Q3 b" b; j0 K% B .leds = da850_evm_tl_leds,. J7 p' F# g8 B
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! d! H' \& I2 d};
3 B% p0 }' U$ e, O m5 Y: x% A8 k3 d" U# R( R8 J( z/ U$ a9 J% P/ q
static void led_dev_release(struct device *dev)
$ _. _% G6 o/ J) U" z( _7 C{
" e+ m- r/ Y& ~6 |# a# T4 W5 v: ?};
" G2 c7 m5 X8 g* p. u& m& E r# o
static struct platform_device da850_evm_tl_leds_device = {/ Q9 P* S0 ^# B1 u5 K- S+ A" b
.name = "leds-gpio",
( C* M0 @2 i4 o0 }+ `* X .id = 1,5 ~* l. w% ?) c* u( W! `
.dev = {- r* _3 J$ [6 D- E
.platform_data = &da850_evm_tl_leds_pdata,
* T: }, Y. S @: x1 ~& o .release = led_dev_release,
o, G0 m' \& l3 K7 G. D }3 h6 ]2 }/ k3 O: o; T' |
};
2 F8 N, t* W; {: C5 b
$ p2 ?' y8 \ A% K& c6 vstatic int __init led_platform_init(void)( q z; r1 ~* p& @- X w/ y
{
. u7 I) P- w7 t. T( ~5 e0 j int ret;
9 z/ s: u8 e- Q, }#if 0
# j# i) R$ Y. q" D, ]0 b/ _! q ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" {1 c, _6 {2 F
if (ret)# e- j0 Q7 l- P: N. f- F1 T
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
m- q$ H# f- a$ b8 P "%d\n", ret);- f7 A. a* c1 t( m
#endif5 K0 `7 @! P) {* r$ Q5 g
ret = platform_device_register(&da850_evm_tl_leds_device);1 [" o, e' g U
if (ret): K/ p7 B& ?7 T( I
pr_warning("Could not register som GPIO expander LEDS");/ _- Q: T) u, d
else, m7 ]. B& D1 d7 F
printk(KERN_INFO "LED register sucessful!\n");: p+ M1 f# m0 E+ N. Y
; L2 s& I' _& B6 R' E
return ret;8 m- p! f" Z/ k' b! u) z+ G
}( t6 [- R) n+ s5 O
+ d, x4 i5 N' P" A0 Z; q/ m; kstatic void __exit led_platform_exit(void)' R4 d2 J% z; } Z2 M
{' l/ z6 N; K4 _* n, |
platform_device_unregister(&da850_evm_tl_leds_device);, C; D+ b% K* F. p3 V# t# t$ u
5 g* P. L) X* W% y( {' n" f! I printk(KERN_INFO "LED unregister!\n");
4 _) ?2 x5 I# v A}
' u$ w& I- W% F1 S/ ?0 O) Z+ c2 V0 D( p& a; e ?1 t: l5 d0 N
module_init(led_platform_init);# b3 f9 N( W+ S- F; J% _
module_exit(led_platform_exit);
+ u" j; Z, G5 I& g+ g3 ?' \# Y# j/ n) \* R: c
MODULE_DESCRIPTION("Led platform driver");9 O* |# T! h9 E0 g0 _
MODULE_AUTHOR("Tronlong");2 l: ]' z; m: A: S- Z
MODULE_LICENSE("GPL");
6 K: e8 F0 a+ }6 c$ W2 x; R2 v) p/ ?2 o3 w
|
|