|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
: X& X+ W- G# L+ P2 Y7 U5 r#include <linux/init.h>
3 y) M6 ?' @4 S" l* {#include <linux/module.h>
; a! L$ M8 L0 e% D8 _#include <linux/kernel.h>9 G, l+ \. m; \0 z& x d
#include <linux/types.h>
; e! i$ V7 b) N: W#include <linux/gpio.h>
3 v' Z8 C2 C8 n I r#include <linux/leds.h>
) u& T i* D/ R3 n, p' t1 _, A#include <linux/platform_device.h>1 b! |# p. F7 O4 v
6 e+ ~0 ?3 ~' W8 z/ i. U% W#include <asm/mach-types.h>
7 T8 s1 H9 m( d. ?5 `+ X5 ^8 ]#include <asm/mach/arch.h>. A! _5 x" q3 {6 m8 l- {
#include <mach/da8xx.h>$ J1 u1 r- x* }2 e }$ f
#include <mach/mux.h>
7 X' N5 P- o$ C" h7 [7 G
8 i( q% L$ N. ?# }2 T#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
2 I/ d$ X$ s. |/ O1 Z) G% S#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), ~0 t0 R! r1 y0 I: r" D
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1): E1 p6 u( r4 O- o e
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)' n* ^9 b: f" B/ x4 R a
2 H* X0 R7 k, |* T* B
/* assign the tl som board LED-GPIOs*/
3 j I9 S) m9 g( C7 D) Hstatic const short da850_evm_tl_user_led_pins[] = {
- ] ?; J; e( A /* These pins are definition at <mach/mux.h> file */8 c; E$ |$ _* v) \/ \
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# p l% J1 D& ]3 M -1
$ t/ C! \' X) C4 _5 I1 S};
( b+ b9 z) f% `1 o) ^
" s. f: W' ]& u# n$ F8 Kstatic struct gpio_led da850_evm_tl_leds[] = {7 Y0 I' N3 L3 e9 j# Q4 l, g
{
5 D3 r) l. s* T2 q" u* z& I .active_low = 0,) k- O/ A; ~# }6 \# y1 p3 r* t
.gpio = DA850_USER_LED0, k4 l+ u/ O1 H" N& _. f: y% |& M
.name = "user_led0",, R5 M; j* _( |" p$ W: k* {
.default_trigger = "default-on",4 q; s$ c2 X$ K+ d# R
},
$ z, J# |1 R2 A8 m$ Z {6 ?$ @& W) N9 K
.active_low = 0,
" i) C& _! y' P% i F) i6 D! T+ M5 T .gpio = DA850_USER_LED1,
" o5 q6 R7 H, l! i# M .name = "user_led1",! \4 Z2 M( i3 v
.default_trigger = "default-on",) k4 b9 F( b$ r8 b- y* I
},7 q2 i' ~; |8 @- i
{# m c4 a1 r) J* T" _! r; p7 D
.active_low = 0,
3 r2 M3 ]$ k( r3 w3 i .gpio = DA850_USER_LED2,- |" h- F* G& o
.name = "user_led2",
) `- m M( [% T. z& L4 k# q# Z2 H" q2 ` .default_trigger = "default-on",1 C' _, i- f9 P0 |/ l. g
},
& I" }$ Y% r- h- a7 N {% I. P& x' O( C4 q0 y( S4 i
.active_low = 0,2 Q! Z9 l: ?& j, X
.gpio = DA850_USER_LED3,5 {! G( G2 k8 C( ]: B, {) D5 N# q- [* `
.name = "user_led3",* |1 l2 X- m& c; e/ p! V; k$ S) Q1 ?
.default_trigger = "default-on",
0 n, u% [# r, F v- A- k J },
4 [! ^ q+ R' X) b};# t t4 c' [ y% z: ~4 R- `3 L R
( [7 u' N# [4 W3 Istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 P* J( t& V) Z2 N9 ]6 G/ ?
.leds = da850_evm_tl_leds, K% ~9 j- V( d6 ?* i; L7 h
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ i5 m7 c" z |) ]& v
}; q' e! i% g$ h* W. v5 \2 B
0 j& N2 h6 U5 \; N; ]( astatic void led_dev_release(struct device *dev)* I8 \/ Q5 ]0 I/ t& C
{( {! ~! e% n- f) P8 o" X
};. o2 p- @' \: U
+ w9 M5 Y+ \" `static struct platform_device da850_evm_tl_leds_device = {
. ?' m2 H! Z$ o .name = "leds-gpio",$ O5 Q% p% i( P) k1 K$ R0 ?
.id = 1,1 U9 B2 l1 g+ L% ^
.dev = {
2 s- z; t: ?) L# q .platform_data = &da850_evm_tl_leds_pdata,
. e# c5 E5 q7 o7 i7 L .release = led_dev_release,' V4 S; U% f( i. Y0 \0 x
}
5 ]8 A5 p+ C1 S. q6 x! @+ Q};" d7 K. ^2 K6 \4 [* N
) x: m1 d! g: T5 m, n) }. L
static int __init led_platform_init(void)
/ p% u4 I+ A* u- k4 y' l{: k% Z/ f6 Y& Z. u; b
int ret; u( l1 q" }# N) {& G; J
#if 05 o( k {7 [. @' F
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& Q' v8 r' j X$ G+ p, g
if (ret)' }0 R( v w8 P* X! p# e/ }- T
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 b. L0 |- t: O& B9 y "%d\n", ret);' R' n) {" z: S% h d
#endif
! D3 A, F9 n1 P n; a# x" e ret = platform_device_register(&da850_evm_tl_leds_device);0 X! l0 w1 h/ P
if (ret)
7 r) K7 j4 E8 H9 V pr_warning("Could not register som GPIO expander LEDS");
! U3 I- x/ U0 }$ k+ ~+ U- V else% o/ i# y$ G7 q; h3 i$ T: ^1 g
printk(KERN_INFO "LED register sucessful!\n");6 @- P, ^5 I* y8 d+ T
! _6 N$ ^7 z% d8 Q$ S# v return ret;/ w) J: E" P, p; S
}
. B6 N6 T4 M$ m( y' u( F: t$ _
( @ g7 a5 T% F7 kstatic void __exit led_platform_exit(void)
r4 K9 T/ U& F( S9 w5 e: y{
# O( h F5 k5 k7 T platform_device_unregister(&da850_evm_tl_leds_device);
! W) u e5 |( ~- P3 C% ~! g+ _! Q+ d; x
printk(KERN_INFO "LED unregister!\n");
7 Y. d! w& d2 r$ s}
1 h9 Z7 _, \9 Z- {' I/ T- o3 e3 _8 S8 }* f( j. L* U6 o
module_init(led_platform_init);
0 Y! s5 W. I6 [$ X3 l" emodule_exit(led_platform_exit);, E! b* N* C* O& ~
7 o# l0 ?1 K8 dMODULE_DESCRIPTION("Led platform driver");7 U4 a- g6 t/ L! H& _) Z* o+ |
MODULE_AUTHOR("Tronlong");
$ e* Q2 A. \3 w/ I) O! cMODULE_LICENSE("GPL");
7 {, ~1 j x, f$ n. E) c2 E
g$ L! f; R8 l7 H. \: p |
|