|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
$ Q/ L8 s6 j2 A6 k) I, f# h- N#include <linux/init.h>0 a& k- J5 y. N8 T1 M: q
#include <linux/module.h>* d2 {0 Y2 x% j- e* a
#include <linux/kernel.h>
- |, e8 Y4 Q4 c ^; Y7 B# R! S#include <linux/types.h>
$ R9 l) y1 D5 e3 n4 g5 K#include <linux/gpio.h>- L: D- X0 b9 q! [
#include <linux/leds.h>7 I9 _% Y+ `/ L! h. H3 h
#include <linux/platform_device.h>7 Y$ b4 G8 i+ y( u
* {& G0 S1 }: P4 w3 V
#include <asm/mach-types.h>+ G8 r8 ^: p8 g" f2 H
#include <asm/mach/arch.h>: `2 H1 z. D% z
#include <mach/da8xx.h>
; |) l5 V. N3 d' i0 v4 O& Y#include <mach/mux.h>3 W! x# I* G5 O, W) d3 {8 V
, X% V/ P* A; T5 Q% J#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: }! W& N8 {$ O#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); L3 ?' o! ~; j
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" n+ g, M& p/ w" w7 p+ A; [, R
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)4 u2 `. `: N3 A$ R3 H
! I* q- G" T" e: B
/* assign the tl som board LED-GPIOs*/
8 o2 \; A" g' l6 h, Estatic const short da850_evm_tl_user_led_pins[] = {0 L4 v' E3 m9 [5 @( D6 g6 S
/* These pins are definition at <mach/mux.h> file */2 |- H- w! z, g( F
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, a& p/ m4 \, J7 i% |
-13 l) S. F5 S4 e
};; v8 Z5 j- @! |: |2 s# n
2 d/ ^% N: O0 q
static struct gpio_led da850_evm_tl_leds[] = {# K+ i" Z2 @8 H0 Z R! i
{ j* C. [9 E- Q$ V. r3 M4 V4 G: [: p
.active_low = 0,! `0 ~8 F" r- f1 F
.gpio = DA850_USER_LED0,
) _3 I6 [( ^# s .name = "user_led0",# U, K# Y& c: d4 @
.default_trigger = "default-on",% l& u8 o0 p5 _& G A5 |( R0 q8 Z( ?
},% f! _0 J& d$ P9 |- r& ~/ ?- ~$ ~
{1 w+ h8 O. Y" ^& x/ Z$ ~" Y
.active_low = 0,+ C9 }" O6 S0 s X6 G) k
.gpio = DA850_USER_LED1,
4 }+ g3 q! C+ b. \ .name = "user_led1",
, r) g( j( s5 g2 b5 j' s .default_trigger = "default-on",
0 ]' I0 R8 D+ J& z7 j5 ?" { },
F; L- d. \: D5 C. [0 j {7 Q5 b3 R, ]6 ?6 E( b2 ?+ d
.active_low = 0,/ E* Y; p3 Q2 f; a+ w3 M
.gpio = DA850_USER_LED2,6 q9 N5 R N; M) S0 P
.name = "user_led2",9 ?4 X& O! ^* a8 _
.default_trigger = "default-on",
: p2 l1 Q5 I& z( k8 U6 x, } },7 j9 ?& t, I+ t( E$ s6 d% O
{7 y2 O# P& q3 O( w0 K
.active_low = 0,
7 D( M0 m+ K7 Z$ m% ? .gpio = DA850_USER_LED3,
& ]: n1 q. \, f8 @ .name = "user_led3",0 p( E" @/ `) U( P
.default_trigger = "default-on",
9 {2 P- s, Z6 U3 n6 I% n }," `3 S* m; a$ P# R
};
& W: ~% b; a. z: S; h3 ^; t
8 \! Q/ B' z( C" Hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! f0 a, i: `6 {3 f5 \; O0 n0 I! J .leds = da850_evm_tl_leds,& z% _* R% ^4 w. X9 x
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),8 \0 c( A, q8 }% b2 k+ ~
};7 L. Q3 N; @- l( W7 W' u7 m
! \+ v. R, M4 F9 Z: y) Estatic void led_dev_release(struct device *dev)+ F6 n% K S, D/ U/ l
{
8 ~7 O( t/ S, j& `};
/ Y# ? A, Z6 B; y/ x1 w( [' @1 @
8 m* {& ]' Y$ ^: o/ T3 ~, Jstatic struct platform_device da850_evm_tl_leds_device = {! A+ W8 P" C0 @0 P$ B9 S/ y
.name = "leds-gpio",: w6 f% o, b* S7 L/ N- t
.id = 1,1 B: K, b4 W% m* b0 V
.dev = {7 ~% \8 |6 }9 |/ z% F& E% w9 B
.platform_data = &da850_evm_tl_leds_pdata,
" T' e6 X L: e8 b .release = led_dev_release,
( p c" m3 l5 p% q$ ^ }
9 {& @4 a7 O m) o; c. z};5 K* o7 j1 S0 o7 R
J9 d3 m! a: Y
static int __init led_platform_init(void), g8 M: E" D6 V9 R- H! k; \# F( \
{1 J0 T3 T9 z! u3 W3 P N
int ret;
6 u! p- @; b2 u% x4 B. y, h#if 0
! q1 Z2 t5 \# X+ P; d" u ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: T' v2 t, }' h& V' e if (ret)+ p/ N& t, }( O. j* J. Q, C1 Q
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% _! l' C1 e Y+ b' s1 l' [
"%d\n", ret);
3 O( P0 ?* L" a#endif
( ~' J. D: o1 }( R$ k$ q4 ~ ret = platform_device_register(&da850_evm_tl_leds_device);$ ~. o0 `" m* T. x, D8 t/ H! o# [# z1 V
if (ret)
! i( t# q+ B. _ pr_warning("Could not register som GPIO expander LEDS");
4 {1 H1 Q3 ^& y: i4 ] else: u0 c; K* V, `' ~" Q7 ?% B& t
printk(KERN_INFO "LED register sucessful!\n");
1 b' f6 {$ Z0 `+ \* V6 J
- A; E" p* i/ } return ret;/ W7 o4 ]& N5 A$ B8 q
}
7 Y$ j$ i* e$ q! E k% u0 T! `3 T" x' y. H: t
static void __exit led_platform_exit(void)
) E' m: s- ]2 Y0 t$ Z; _ _+ F{
( c5 v3 G( x- k% e# D! W, z platform_device_unregister(&da850_evm_tl_leds_device);# v) r2 X. E' ~ P
1 Q: ?- w- R" ]. I9 x9 A printk(KERN_INFO "LED unregister!\n");
) m: i, Q3 N3 {' I# B* W; i' C- U}
+ ]9 b d" k1 X+ E
, R+ r2 e& q! p0 Mmodule_init(led_platform_init);/ @; ~" j. Q5 C: K! A6 ~7 e* ]
module_exit(led_platform_exit);
' r5 r; T9 w3 k% ]3 G& F8 z
^" J: O/ y8 Y/ WMODULE_DESCRIPTION("Led platform driver");
4 e) v* _' ]! g, z |! q. L; NMODULE_AUTHOR("Tronlong");) E' f# h: F/ v; t& S
MODULE_LICENSE("GPL");9 B9 d6 B6 u1 I2 h3 I$ W, x$ ]* T
' |3 X5 B1 F9 Y- v* W+ a# Y6 M |
|