|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% m1 P$ K1 T/ n5 p' X: m4 O1 l
#include <linux/init.h>
L5 }& z" _: X0 i: }' h#include <linux/module.h>% t, ~/ y% D8 \6 c
#include <linux/kernel.h>5 X+ s" N% v9 m6 ^
#include <linux/types.h>6 H+ @ q7 Y% W( M5 \
#include <linux/gpio.h>$ L+ Y5 i4 Y; r! \8 G
#include <linux/leds.h>
5 X/ ^% [! R$ t5 x/ n. d#include <linux/platform_device.h>9 o8 L K. u% `" G6 [3 R/ m1 |' \
% t6 d$ N( p0 W) K& e/ _" M4 m3 l
#include <asm/mach-types.h>% r9 _* \- l5 a$ F z7 M- A
#include <asm/mach/arch.h> J" F8 M" u4 J# f
#include <mach/da8xx.h>
' O0 ~2 K7 G! g$ a6 U0 ?#include <mach/mux.h>
* v" H6 x' j, i G
. c4 X1 X( ]! O" [+ D8 G#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 b, o+ o: o# }#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
; q- F4 Q' B4 o+ `#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 z: j; Y9 o1 i* \0 e; q4 Y8 ~
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 p' r% t; Q6 h2 B% x
9 U& T/ F; E; a+ t$ A, e/* assign the tl som board LED-GPIOs*/
3 E1 t0 y2 G3 r% k1 c2 W. Jstatic const short da850_evm_tl_user_led_pins[] = {6 ]" ~: }6 H+ b, w4 b0 c
/* These pins are definition at <mach/mux.h> file */
$ W% z+ o% o) p4 u; i4 M DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 N' ]. V& A7 n% [, F
-1) i% e: [" d# ^& h% _* c! a+ X0 u
};. p+ }4 p% P) a: a% \* N9 v
) b& \# l2 ~0 F8 Z+ p1 N. B, u6 pstatic struct gpio_led da850_evm_tl_leds[] = {6 \3 y) i4 F* j2 g
{; a- D0 h) q2 q0 o4 D9 U
.active_low = 0,' |5 V7 U- Q0 C! S- ~1 n
.gpio = DA850_USER_LED0,
& K/ E6 ?) `7 q .name = "user_led0",+ n2 K3 J: Y$ m8 i7 i
.default_trigger = "default-on",
# {9 P& K, _& X& M: Q },
( n$ F/ e4 x" x( t# ^+ o+ |; j {
8 G4 d" ~: }) v; f6 X2 m .active_low = 0,; A- J$ k0 g0 ]
.gpio = DA850_USER_LED1,
! q# e. K0 |2 \* R- W- J .name = "user_led1",
2 A' J; r: u% A! y .default_trigger = "default-on",. l" O* Q, O3 D! J9 t
},, ^, Z' j; t$ f+ s
{2 x: R2 Q% n9 {( ~
.active_low = 0,
( x/ p! g* o. D' \ .gpio = DA850_USER_LED2,
% @. J7 O# M/ F9 ~- V .name = "user_led2",
. W9 C) D) B+ ?8 z% X/ k .default_trigger = "default-on",) n! V8 |9 q2 i% S1 g+ _ Z. b* y8 s
},
/ ~" k1 R3 _, o% D6 B4 p& J {0 Y/ X2 A- F' M% i% _
.active_low = 0,- B8 d) m% l4 l
.gpio = DA850_USER_LED3,
4 i$ R% \( A. w% d1 N1 o .name = "user_led3",. @' A; P6 W! Z( _/ @4 ?9 x
.default_trigger = "default-on",
- C, ^2 c8 C; ~6 Z9 K( ? },
8 Y+ Z* z6 \& _# i: _- D8 a8 {}; H+ \6 P: \" N" N$ ?
9 s3 h, n, Q) ` C) c/ B, A$ |static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {- ` L* U( m* H w
.leds = da850_evm_tl_leds,! ]8 H5 r* a) V
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),# A: s$ B0 X: K5 I) H" j
};
9 B0 E8 v; f+ R. H8 H, A) P% F& A
, c' m4 S$ d, e+ r( K4 l, Tstatic void led_dev_release(struct device *dev)
# u+ m$ P5 S* C5 m* I{, L+ a4 A9 U7 ^7 g% ?
};
& \- \3 e& q8 E& j# e3 z, Y' T* P, R" Q" S; F0 V
static struct platform_device da850_evm_tl_leds_device = {6 \, U/ ]% S% V5 B
.name = "leds-gpio",
5 I& R( K7 t. w .id = 1,0 V+ X8 J) \8 G# F0 d. U" X, z
.dev = {
# h2 O% [/ a {5 m+ M .platform_data = &da850_evm_tl_leds_pdata,
- P0 q0 o' t9 j& E v0 E# T .release = led_dev_release,- T G+ j! e$ _8 {, x& [# Y
}
# y7 Q( G1 H% h/ ]4 u4 [1 Z( X5 [}; e) k7 E! K9 s! l0 s; \
0 W9 _( B& Y' W |. h2 x; Pstatic int __init led_platform_init(void)
- j! T% I$ O; \# c( L0 z{
! G! u. b1 D4 |% k; E int ret;$ ? L4 D% ~. q+ u# f8 a
#if 0
8 N( S5 f' P- p7 V5 {6 g" T$ k ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 T% z4 |* P* |, T
if (ret)3 o" J" I0 K: s' }0 I' S* Q" }# W# c
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* k# t) ^: @7 I' A$ P "%d\n", ret);+ g( O% i. P2 ^
#endif" K- i( r4 S2 ~& b: R
ret = platform_device_register(&da850_evm_tl_leds_device);' l6 N# T: D1 e
if (ret) e. _/ a! i* O+ G
pr_warning("Could not register som GPIO expander LEDS");
* w3 d( a+ W/ T( s else
) c, P. k9 b" t9 ] printk(KERN_INFO "LED register sucessful!\n");
7 r9 f' Q+ r$ R* E m5 |6 j: j
0 F# g; d- r" m% Z2 _8 T5 k2 ` return ret;
! P- J+ e/ a' K Y: P}! z; F) r. e6 T5 ] Z* |5 f
8 v6 M% t5 D5 s7 Cstatic void __exit led_platform_exit(void)
j, P7 ~. g- p( p G{
. U8 U; c: D2 J5 h: x1 @ platform_device_unregister(&da850_evm_tl_leds_device);
& C8 r" a) t) Q$ V
0 F) p& N3 }7 e1 k) B printk(KERN_INFO "LED unregister!\n");
$ ~5 e/ u# T; ]' H0 X4 U}
2 L2 a( J* L# F4 z9 y- C6 M$ j1 g# ^1 B4 r
module_init(led_platform_init);! ~1 M9 [3 I: V( X# _% L
module_exit(led_platform_exit);
4 u% t1 V2 [/ ]2 B- [3 D5 B% ^- \% E. L8 p+ f3 q
MODULE_DESCRIPTION("Led platform driver");
& Q% @( u' `: H4 Z1 ZMODULE_AUTHOR("Tronlong");
1 w' e) a5 K* }& ?$ t* G% i$ ~, a) DMODULE_LICENSE("GPL");
% k3 F9 S5 h9 d3 @! Q5 N% }1 _/ \
|
|