|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
$ s7 t9 a. l8 e; _- X#include <linux/init.h>3 |3 _9 A% |% U; S: @: U3 n# v# K1 a3 s
#include <linux/module.h>
4 v- Z5 O* n1 i' G' r#include <linux/kernel.h>- T5 d$ n' R4 I( N9 q- Z2 p q
#include <linux/types.h>. C6 ]0 M! }" x4 R
#include <linux/gpio.h>1 ~" j M4 w; Q V2 Y$ d
#include <linux/leds.h>% B6 m& \# ?4 A f6 `
#include <linux/platform_device.h>
- h1 S3 N" a% k8 f' s+ B* F& M M' H- F m7 o( }
#include <asm/mach-types.h>
* W- Z* M0 V2 { t* U5 r& R9 s [3 C#include <asm/mach/arch.h>
7 p: V- P7 j& p- h4 M#include <mach/da8xx.h>* e! l7 d7 u1 S* {. F
#include <mach/mux.h>
$ N+ ^) a) L8 q2 y) }* T
! [% q. e2 B. x6 O6 ^: \) v#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 g1 y* h: j' y" t. H8 i4 `2 e8 H5 [#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ u: S2 X# w; v. f) S3 @#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; g: y4 M! R4 `1 Y ^* b P5 _- i( q#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" v8 u7 H7 p! J R# q8 A7 L) K9 l- a$ M: @0 @- O, k3 n
/* assign the tl som board LED-GPIOs*/" V" Q' D/ i" D9 B' i& O! k/ p6 Z# c* n
static const short da850_evm_tl_user_led_pins[] = {
; p i" r: S+ ^: ?# B* z. w- l0 i1 M /* These pins are definition at <mach/mux.h> file */
. Q& X# N% x, r# ?. g1 D8 q1 w DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," R$ p+ [3 T6 M2 x% d" K
-1
) R2 y- S: X; S! e- t: {2 x2 Q};
- K* a8 E' }' w/ p# U! ^: r$ `% N& U4 C
static struct gpio_led da850_evm_tl_leds[] = {
1 w' M' A: Y/ F2 X" @' U {
8 ~# g+ N2 K& z( I) e7 f .active_low = 0,. N0 t) n# o I& e u0 {
.gpio = DA850_USER_LED0,) O5 X# T; Y7 _: W/ H1 B
.name = "user_led0",6 l% ~. }5 q$ V1 T# G$ [3 T1 V6 ^
.default_trigger = "default-on",& K# F( U& j) }' W6 O: s, ^( d
},9 r1 a8 @: K: q! f8 P. y0 w
{
. \3 j0 S: x/ t6 r/ Q# | .active_low = 0,4 a- |- U5 u4 e
.gpio = DA850_USER_LED1,9 V: q' W7 s; h0 a i
.name = "user_led1",
9 _ t6 T y8 u, |0 y, e .default_trigger = "default-on",
# O& Y8 G, R0 u$ a: ~. c },
( p1 y8 J/ N- Y: y1 k5 e0 n" J# i {* ]" {3 M& A; i1 X, z: [
.active_low = 0,1 `5 Q) ^, T9 C6 z0 `8 _1 |
.gpio = DA850_USER_LED2,
# `# o7 k4 N3 j7 G .name = "user_led2",
2 b. G6 D7 K; z .default_trigger = "default-on",9 T0 o8 d6 h& a7 ]) r
},) i0 W/ W7 z2 f5 O6 g
{9 I4 {! h/ }/ _& Z6 B* t
.active_low = 0,
$ W5 o9 N" Z( I" ^8 G! y) R .gpio = DA850_USER_LED3,
6 }- X4 m; m+ N3 \. s .name = "user_led3",/ w5 q# `- k* K% _
.default_trigger = "default-on",
8 A9 P, \/ N. l. P },' z" P! E {" k4 _. u; j; _ _$ \
};
P' s+ q4 }0 B; H& z' C
2 Q" ?0 |4 _" B% l- A: G& \1 Vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {! }8 j; Y1 L: f) X
.leds = da850_evm_tl_leds,( {/ [& k( }6 n, i
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, |# R# Z0 R5 K$ T5 i4 s};
& Y1 ^5 i1 K7 _$ C1 ?5 v- w7 o4 z6 M5 [. L: N( ?+ f
static void led_dev_release(struct device *dev)
1 s6 Q: D' ?: N' K{
; z! c7 c' }# w' ?};9 H3 P" Z: G& s7 I
9 |) _) C# \6 o5 ~static struct platform_device da850_evm_tl_leds_device = {
; r& h/ p$ X- }: L. D) C. _ .name = "leds-gpio",
( Q& F/ l# U5 y1 V& A .id = 1,
* {9 m3 y8 |7 H1 o* J$ j: b .dev = {
, b5 z! r% c: f1 | .platform_data = &da850_evm_tl_leds_pdata,( i: S" ^% Q9 u& r4 J& t3 }# ~
.release = led_dev_release,+ t" i: P' W. z2 q9 w% j
}6 C8 b' p1 e' M0 W+ L9 U$ _. I* w: ^
};
4 v6 R; j; u4 w7 F8 [, q) p9 o/ F
* S3 F' W0 I( ostatic int __init led_platform_init(void)
1 G4 }. B( j! a{
- K: c% ?9 r/ L% `+ ^ int ret;
: [4 f: u( E- T1 c6 u' b) h#if 01 ^2 _$ Q! G3 O3 P/ y) L
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) q) m) I9 i" ~1 p; x6 C4 ~
if (ret)" b! t: p* A k4 ]6 o
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 v. P% e- ~8 [7 {4 e' N$ q+ x
"%d\n", ret);5 a8 d0 y( ?! b7 Q! |- n/ D
#endif; {) o) V: I! R/ z; J; i
ret = platform_device_register(&da850_evm_tl_leds_device);
( x. S- y& b( l+ C if (ret)0 f1 d$ ~( e7 I _. ]
pr_warning("Could not register som GPIO expander LEDS");6 m- @3 ^! D3 A: z7 ^- b8 a; {* l
else' L% r$ i) q0 m+ J% R8 M
printk(KERN_INFO "LED register sucessful!\n");
& W% z: l* y" v R- q* [- x
. C' u8 V6 b6 }. K3 `3 s: }( j return ret;$ N5 O3 S4 Y% W4 S$ A
}
- M7 V( i& u9 ~$ A/ ] R- {( H! Z3 o( Z) B7 d
static void __exit led_platform_exit(void)5 C3 B' U6 W; Z; K: v
{' Z" X+ t4 t6 x7 Q
platform_device_unregister(&da850_evm_tl_leds_device);
; Z/ P, m0 T" O, E0 y$ v! \8 ]9 R, h) Q! f1 N- o5 s& K
printk(KERN_INFO "LED unregister!\n");6 E' y6 W& F$ y3 h* W
}, Y+ C1 f6 s9 A, E- K- i
2 G$ W1 s7 e c+ b2 N
module_init(led_platform_init);
$ O [- A3 B! T) |( ?+ ^' pmodule_exit(led_platform_exit);
+ s" n1 `0 m3 Q$ [
! {+ G$ }" ~6 d. x9 W% ~+ zMODULE_DESCRIPTION("Led platform driver");
" O. g/ Z- q0 F* {- [MODULE_AUTHOR("Tronlong");
! P: g0 J9 J4 ~9 g" e1 z$ uMODULE_LICENSE("GPL"); I; h5 d+ _( c5 {& z. f! l3 t6 c5 ~
% j, F* Q3 k( P, W Y6 j" g' N
|
|