|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 L. U5 w' q% i7 b9 t+ n- h8 s- J) u
#include <linux/init.h>
. h6 P/ ?" B" @8 Y#include <linux/module.h>$ v2 K5 }6 D3 Y C% x
#include <linux/kernel.h>
0 J9 \3 B- N$ `#include <linux/types.h>' A) O- F4 G& V& ]9 y% I! Q
#include <linux/gpio.h>; C' O& a# E- Z, r8 Z
#include <linux/leds.h>- [; h7 z+ h( B! P! T4 t! }! C/ G8 H
#include <linux/platform_device.h>( G% Y- b2 c) M4 D2 r
4 E9 K2 s& A: U#include <asm/mach-types.h>
/ t. d% f: u7 \#include <asm/mach/arch.h>
: @9 A. i: Q2 s e#include <mach/da8xx.h>
7 q" r: Y& U$ t3 U7 f#include <mach/mux.h>4 ^- Z4 v, B: m+ c8 w- s8 |5 q3 R
$ Q8 G& H" U0 |& Q- g#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 d0 \1 d' u+ F5 v2 Z3 o/ v#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 v) V8 J: T5 V5 w+ V
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 P5 c. B3 F* y* b#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)8 m& s' B! a, W! N* b2 I9 d
! e8 h9 o9 i6 G8 g$ }3 {* I# Z% u/* assign the tl som board LED-GPIOs*/. [3 K$ J. g4 W l2 @/ o
static const short da850_evm_tl_user_led_pins[] = {4 y. L% ? D- B- f
/* These pins are definition at <mach/mux.h> file */' V" @+ a' t( J4 f3 f' H* Z1 c
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
: T. f1 P# m! W9 x- A" z. a/ g -1
0 a3 j0 A& J2 a a5 b! `0 d};
' T0 v. u% ?% n8 g5 x' w6 N: Y* Z; J6 a- |* ?3 r
static struct gpio_led da850_evm_tl_leds[] = {
# `1 Y. {6 w3 R+ @ {
" s* o) `% n. ~4 i .active_low = 0,
) e" X- }7 n2 T7 g1 B .gpio = DA850_USER_LED0,& F+ X. K9 t: @) s9 F7 q- t, }. w0 C
.name = "user_led0",( i/ Q: h+ h& c+ i- X, \1 o& _9 y
.default_trigger = "default-on",& v8 M2 @* u O& o8 P! _
},
) z. j1 a1 B4 N+ o, f; X {
6 M' v' l1 d1 ^7 j9 [; z .active_low = 0,7 Q6 d( z/ X2 Q
.gpio = DA850_USER_LED1,
6 e( q( r% h) s* g5 \ .name = "user_led1",- j% }0 G9 P& ?) ]( x
.default_trigger = "default-on",
; h3 i$ C2 V4 j },
0 T9 o. J! t/ F: a/ W& H: [8 g {! c w. m- g% {, E; x, u! W
.active_low = 0,! J, W# q4 c% S& g; Z! n
.gpio = DA850_USER_LED2,
" n8 h7 Z- d7 ~$ \8 X& ~) m .name = "user_led2",% M+ N. t9 N0 ^0 q2 P" Z
.default_trigger = "default-on",9 f! c: }: X, x w9 x3 G
},8 C; x- M4 l. h' |. Q, F6 B: Q/ O( Z
{2 l8 [6 F1 _( o0 C% ^. D% Y: g
.active_low = 0,
7 }/ r, e4 q: P9 W! u$ i .gpio = DA850_USER_LED3,9 W" f: N1 R `/ p4 n) `
.name = "user_led3",
/ d" r A1 _0 \4 Q .default_trigger = "default-on",+ [, I \; a" }. b+ b! V
},* C5 [5 z4 n) Z& s- y7 \. S+ J
};- [/ F$ V5 g, [- Q) N; p
" v$ P: r7 V6 W1 F
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 p" B' ^; X7 B/ \
.leds = da850_evm_tl_leds,) I2 V- y/ [" e3 Q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 _$ O, p7 f1 X. u4 v
};1 s/ c7 l4 v R- H
# B6 f3 P4 d: n* I( l G @7 k& m" lstatic void led_dev_release(struct device *dev)* b% C& C9 t1 q/ X
{
! [) q- _; u& B9 N* j) o};
! U4 K& K6 N3 Z4 T. v
+ ~1 c: E- U4 ?; xstatic struct platform_device da850_evm_tl_leds_device = {
% W- i$ G2 w& D8 T. ]9 s# q .name = "leds-gpio", T j+ Z3 o+ S" z9 J
.id = 1,
3 r: b1 W2 m# d$ M- G .dev = {9 |5 F) b3 m" x8 h/ r
.platform_data = &da850_evm_tl_leds_pdata,
6 S* x) b1 ~% k/ r3 W: g, A .release = led_dev_release,+ v+ p" Y1 F9 |0 v- w
}9 m: r) s# l* [" i$ g' H1 i$ g
};
; l3 S: q, j- m
7 M. w$ f" C( N& {; \& z( Lstatic int __init led_platform_init(void)
9 U& m& B: S( M3 W K. M0 J. L{5 L- G4 r3 n% j3 i; E- Z5 v: [. q# ~
int ret;, Q. ]! {% p2 i: T5 C5 r
#if 0) U& v8 `# N0 w& u& K) ?
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. B8 K# f" c' R/ i if (ret) X4 D& D' R- a1 Z: Q, O9 n
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ F' [, e |5 H0 g& j: t
"%d\n", ret);5 U. i5 j/ m( |2 }
#endif& W# L- z, [) A& v" Y
ret = platform_device_register(&da850_evm_tl_leds_device);
9 j: Y$ \" J1 n5 [ if (ret)5 a5 T" K p1 z& _! l6 i0 T
pr_warning("Could not register som GPIO expander LEDS");
5 `9 |- [) Y# A* _+ ~2 {$ x else
) C" s$ U9 G$ A$ i9 _ printk(KERN_INFO "LED register sucessful!\n");
6 h7 b# J$ s' Y" F! z4 H! j# N& T9 U c- _
return ret;
. S* i+ X( M& z+ `" B# f}9 g) z9 p- t% u* c4 U
" `6 r# H- }) i3 G
static void __exit led_platform_exit(void)8 z* U& S8 V4 ?( y! ]7 S
{
. \7 |6 e H$ w+ j platform_device_unregister(&da850_evm_tl_leds_device);
! y0 n' V- v( D. s8 \9 s2 B+ b
7 u2 i. d* w+ @$ k( z" c( I printk(KERN_INFO "LED unregister!\n");8 G) ]% ~+ l5 j: r6 l
}
" |- N% u' C1 a: y" B: q3 D! ^" X2 q
module_init(led_platform_init);
* P6 I' B# H) L! Lmodule_exit(led_platform_exit);
1 `8 R# P0 p, g D) o3 j, x+ e1 }4 H. p K( W
MODULE_DESCRIPTION("Led platform driver");
2 L! n u6 z5 U5 uMODULE_AUTHOR("Tronlong");/ t* w% z+ D ]) ]- \5 k
MODULE_LICENSE("GPL");9 t7 r2 O! k, v# u
6 M; i1 ?9 a% K3 R |
|