|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
, |7 P- }: a$ v' h#include <linux/init.h>
7 [; b: J4 A( P$ ?6 o! ]6 ?/ Q#include <linux/module.h>' h7 I. ]! `- F' t- k- Z+ a
#include <linux/kernel.h>2 k- r* {$ R7 @2 A' A
#include <linux/types.h>9 o7 L; Q1 [" w& D' j0 N$ A6 w) n
#include <linux/gpio.h>5 n2 ^8 ~" B i4 l& o! J6 A
#include <linux/leds.h>
" a7 o! Q+ j! q8 U#include <linux/platform_device.h>3 g+ I8 M5 {* _, N+ v
1 E& j% |2 t- ^8 n2 x; V
#include <asm/mach-types.h>4 d F9 w* P5 {2 E9 {" S/ A6 J
#include <asm/mach/arch.h>$ B% O0 n$ s# \' W' n
#include <mach/da8xx.h>
1 U# Z9 A( t4 b& W& J: g' k#include <mach/mux.h>
- s3 Y0 n% Q7 j( y; j1 e' l( B' ~
* [ l( V5 `% j, \$ l% m5 u, U( }#define DA850_USER_LED0 GPIO_TO_PIN(0, 0), ]& G4 b. O' f) [# ?; ^/ W) Z
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 }5 i* S9 A. b
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& f6 i# O, \% D+ Y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)8 o. N* I: j& d- R5 F1 ^9 l4 e
. C6 y8 l$ p) L- d: Z
/* assign the tl som board LED-GPIOs*/
* t4 j6 D! i/ I$ \static const short da850_evm_tl_user_led_pins[] = {% [9 ? e! Q3 s' @" f6 ]3 X* q( I' }
/* These pins are definition at <mach/mux.h> file */. l0 G+ O4 N, `6 Q# n8 P- \
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
~: D* [8 f4 d3 g6 h2 N# b4 R- d3 g S -1
. K* V8 a" K, }, W+ }};/ n5 j0 u' z. ^* H- K9 b
3 S# O n: W/ K1 i6 ~3 F* Q! j
static struct gpio_led da850_evm_tl_leds[] = {
+ U# r+ F+ k/ V8 { {
0 d4 l6 N* y7 w) A7 d, s+ b0 | .active_low = 0,
4 s8 ^: H! Q3 } .gpio = DA850_USER_LED0,- z7 i/ H1 g/ c& K* N
.name = "user_led0",: {* h7 @! \! h* b3 I5 d6 X5 d
.default_trigger = "default-on",! J. [9 v2 u5 C8 i& t
},
8 [' A5 {9 y$ |) m# _8 [" [1 _ {
% r( ?) ^1 i) k9 o, o" N8 o .active_low = 0,' S7 |: H$ p# }
.gpio = DA850_USER_LED1,8 u& l/ e( m1 I! I3 @ {; @/ K
.name = "user_led1",; k0 C q1 }8 W! o) G# R
.default_trigger = "default-on",$ Y f2 l* @# Q
},
+ e! L# W5 x6 a N; q8 t- A {; q% [1 U9 Z. d; H
.active_low = 0,* R- d9 w% _; w1 V# D
.gpio = DA850_USER_LED2,
7 |- C1 g# @" F9 I .name = "user_led2",: W, m% \* e8 }# K3 s% V4 a
.default_trigger = "default-on",% o* d2 ~( c" m1 _( J2 q# Q
},
: j# T1 f1 O) G1 a$ b {5 B; D( {% u' |3 ~8 Z/ H/ M
.active_low = 0,
5 V& d2 s7 c) @) x' k) H .gpio = DA850_USER_LED3,: l! ?+ o( W: V: m q# x
.name = "user_led3",
0 z X# V1 J/ Q7 G; A$ ?; @ .default_trigger = "default-on",7 D" T* {) _) H) K5 s; N% b
},: j; k' v- Y2 w: D8 N* ]
};
# \8 k. ?+ d7 i9 G4 W" J
. m3 }1 ?: t5 J; x9 R' rstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 A2 O$ w" c' O% z- Y1 V
.leds = da850_evm_tl_leds,* O# ^: q% |. W8 J9 [
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ Q5 G; N% X9 C+ n% |& g5 i};
+ Y5 W. w! e$ G* M
8 ]4 U( _& Q& p. p n4 m5 sstatic void led_dev_release(struct device *dev)) @/ J3 j. j) S) v5 L
{+ R# s8 X0 c5 ~) g( F2 A0 p& v* c
};$ ~( d/ }) h" f; Q
: O' ?9 _1 N6 B# `) n
static struct platform_device da850_evm_tl_leds_device = {
' p, X) w& c& _# {9 L .name = "leds-gpio",
' Z( s+ o6 h, O; F, _ .id = 1,
, T$ f; u% @( ?! l7 M3 p .dev = {
% W+ I) L0 y6 z3 @% O; {2 u' K .platform_data = &da850_evm_tl_leds_pdata,. c; R- A4 M6 R3 ^ k6 I* v6 N
.release = led_dev_release,
" ?- l% \8 z7 `$ O }
. V) j8 W' b& ?/ i};( R& q+ v, H, h8 b+ b3 W
L; \* F9 [5 k4 @3 ?
static int __init led_platform_init(void)
, x7 F& g) t& N1 w+ N- u{
8 b4 X7 a3 W) j5 u int ret;3 m0 N2 H+ Q, F) z' {6 B. `
#if 03 g2 \8 t4 G# a: E2 v! N& P
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. f( R d' K9 y* V( m" w5 x1 p
if (ret)
, J( A# B3 \" b3 Z; O pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& c. e; z# |- a1 b7 g" S "%d\n", ret);6 |% q w' r* G0 T2 I* Y* `/ j
#endif
. p3 }6 r2 X" P ret = platform_device_register(&da850_evm_tl_leds_device);& I* z( a. V+ y2 I% ^. U! y
if (ret)# C. L f) E' g: z
pr_warning("Could not register som GPIO expander LEDS"); J+ q; L/ v* u5 X$ F
else0 _) G1 B1 D9 \" [! v
printk(KERN_INFO "LED register sucessful!\n");
$ u0 U( ^' g: C: y. ]9 r7 ~& B0 r$ i8 Z0 q- u2 x2 C! b6 ]1 k
return ret;
$ U6 ^) U* [, L3 m R}7 P; m a( m# k4 ?: v
1 ^' Y. v4 ~/ h M& P1 I# ystatic void __exit led_platform_exit(void)
" j* J# K# M3 w2 g( y. n2 y3 }{
0 i4 V8 B) m6 ]4 z6 q platform_device_unregister(&da850_evm_tl_leds_device);
; z3 W8 v9 @; O9 c
j ?: j, t, T6 ]6 a; O printk(KERN_INFO "LED unregister!\n");
4 s. X4 Z4 Z& y3 Y9 ^* Z}4 S) C9 ?" s' Y' ~3 i$ y
8 W" Y4 }2 |* V
module_init(led_platform_init);
4 `6 u1 ?/ S0 x* V6 lmodule_exit(led_platform_exit);& c' y4 s4 [- K0 p( M9 z
3 l# D* l) N6 a( n2 uMODULE_DESCRIPTION("Led platform driver");
, R8 `- ^ K8 J' yMODULE_AUTHOR("Tronlong");# l' D3 S) w! _& P6 n' S! [
MODULE_LICENSE("GPL");
/ C! ~7 @6 D0 ~6 y* f) p, j+ D! W- U A. |& J- E
|
|