|
|
求大神给下面的程序做注解,请稍详细些,谢谢。! R- F8 ]: Y/ l
#include <linux/init.h>
8 m) j0 u7 R# @; C3 F1 \#include <linux/module.h>1 L0 u8 M* S3 w# ?) P
#include <linux/kernel.h>4 O% g3 v2 y7 j1 B( l8 F/ T
#include <linux/types.h>* v1 K9 n' `' I) V# A) R+ y
#include <linux/gpio.h>
5 Z. ^& `9 q, T2 q1 P( O& x" @! |#include <linux/leds.h>
' Q& N+ ~" Z- t+ G5 v. O( @- c#include <linux/platform_device.h>
5 h: N1 c+ u ]% Q( J) t
% t* o* c: c+ T#include <asm/mach-types.h>
8 P% S; c9 [) B7 I5 z+ j- \ K#include <asm/mach/arch.h>
) |( T0 L j. S9 O8 ?#include <mach/da8xx.h>
# _5 r2 B1 ?9 n3 N* t#include <mach/mux.h>
! ~, m, ~0 ^; M* _1 v3 b# v" e" H' J" J- A& }) y" c5 ]+ ^2 p
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
. T( T$ W) u8 k: {#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" @$ L1 h3 Q0 C/ A. V#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 i; G+ U3 `& v+ g( M7 U) \#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* @/ x( p% t$ q) n5 h' s
6 F+ B1 I" F) r) F* ?
/* assign the tl som board LED-GPIOs*/2 A* S) e3 H% Z) w T n
static const short da850_evm_tl_user_led_pins[] = {" M/ i. N, q/ T5 F+ j
/* These pins are definition at <mach/mux.h> file */
# b, Z; ~! |3 }+ ]5 G( T' v DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 V& N+ d3 t0 D4 A2 F* h! K1 Q; }
-16 {; l. ?7 I: e' r
};
) u) f- S1 m! I, V( Z% h5 \1 z @' \' k w. K
static struct gpio_led da850_evm_tl_leds[] = {
9 U) `# S# I8 I+ n1 ~) O {- }. O9 j' o2 I! b
.active_low = 0,
9 a' N7 s$ A2 {! u* S .gpio = DA850_USER_LED0,* c3 n& }( y6 R" o. {" ]
.name = "user_led0",
8 @$ A/ [9 X7 ^. j/ a3 L .default_trigger = "default-on",
) K' y9 k ^/ |$ D$ F! f' N },: ^% i1 U9 s6 n' O
{1 r' {3 @2 [) H3 A
.active_low = 0,
( v4 `3 O" O8 g/ f .gpio = DA850_USER_LED1,! V/ |4 v$ B0 A
.name = "user_led1",
1 Q, Q$ {6 ], i .default_trigger = "default-on",4 j/ a; X% A* c7 l' _: F
},
- ~+ A8 k5 S4 O+ \' Z5 X0 n( Z7 k {, ~7 [8 Z7 f' T( f
.active_low = 0,4 I$ P% n6 V% y! A1 ]$ U
.gpio = DA850_USER_LED2,
( v0 |5 R2 c5 e8 D .name = "user_led2",
( W+ _9 r# h* Y3 c, p" n .default_trigger = "default-on",
+ T" N' D3 p; X; | },
{% X& C5 ^/ `5 y6 O& w {0 m6 S' R |- P' o
.active_low = 0,* u7 c- A6 g' W- M, ?
.gpio = DA850_USER_LED3,
: G9 M% T. V# ` .name = "user_led3",! v, u1 k8 ~. u) V$ w0 I
.default_trigger = "default-on",
7 O4 `7 i& w* d/ l7 P },
, W; x! f( ]0 j};% d4 m& k! Y% _: Z3 A" b6 P, ]( R
0 [9 S# R# H0 O1 Ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( j# [* q' y" i .leds = da850_evm_tl_leds,
2 Y; r! H! q/ N7 w: T( S5 E .num_leds = ARRAY_SIZE(da850_evm_tl_leds),# Q- @+ Q- D8 B
};9 m; U9 d% I( z+ M& B) p
" z( T! d- `, b
static void led_dev_release(struct device *dev)
f& \5 i1 _6 \' u{4 k* w2 n/ d7 P& P! s- G& A
};
: i T: @; u V% L/ h
4 _) E' S: j5 z; g0 jstatic struct platform_device da850_evm_tl_leds_device = {
$ P2 I" E. e! s1 g( a6 q .name = "leds-gpio",
, x$ R; M$ n* Y: k, t+ r& Z .id = 1,
- ` S+ n! N9 @0 d. N- Y* U .dev = {
; Q+ g" x) T K/ C4 G2 R .platform_data = &da850_evm_tl_leds_pdata,
8 Q1 w, v% o% f4 I .release = led_dev_release,. h# r$ e) ]! X T' e7 {
}
" R: X" h6 j) |$ }% {4 _/ r% J8 A8 `};
) f$ m! a* q w/ L, \% U7 o
0 v; G( x. i+ v4 ~static int __init led_platform_init(void)
$ L" c$ }) c$ M. c0 K6 c. Y{& M8 K7 ?) l& i6 ]( ]5 i( Y# A
int ret;
/ j1 ~* b& c. i0 J4 V4 U& X1 v#if 0
1 y4 x( E& r% | ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; k* @/ t$ ^# p& u5 J
if (ret)
. R& A1 Y! Z# l4 s, E0 C( Q9 O pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- ~ `% G8 f: g
"%d\n", ret);
) S8 Z P, Z" C( B& w! q#endif
* R. s2 [" O R- y" m$ _- I6 ^ ret = platform_device_register(&da850_evm_tl_leds_device); u/ l+ O$ ~: N: O2 ? p9 s
if (ret)
H" z: p8 q" Q3 k9 B% Z6 R pr_warning("Could not register som GPIO expander LEDS");9 I1 c0 b! z" F! w# [, W2 n
else
6 y* ^/ c9 w/ B printk(KERN_INFO "LED register sucessful!\n");- a; v4 s& _3 E U' k
. q; s( b0 D/ t0 k5 i$ t) F
return ret;) D( E& W, y" u! ~) D! @4 z
}
- G* p3 G2 \4 A# A; D* Y/ [& K' D; A+ F- Q2 I4 n
static void __exit led_platform_exit(void)9 h$ \% t% p& _+ c4 |
{) i9 }2 x1 j2 @. m% |% }
platform_device_unregister(&da850_evm_tl_leds_device);/ h6 b- X6 b# @0 R; ?
2 s3 \4 k8 @0 q printk(KERN_INFO "LED unregister!\n");
6 O& m' {+ Z- D$ R3 O& H}
" m7 c) B$ J" s4 g
& @) G# P. _" l( C4 @! k1 | x. B5 imodule_init(led_platform_init);
+ y5 ?7 Q5 v/ ]$ X$ m% Kmodule_exit(led_platform_exit);3 E& n+ E7 v. [4 }9 n+ e1 w0 }
# w2 r9 i3 |9 x
MODULE_DESCRIPTION("Led platform driver");( U7 N/ w( z. R4 A$ A
MODULE_AUTHOR("Tronlong");+ x# r+ z$ ^- v; v. a& O
MODULE_LICENSE("GPL");# \3 q; \& ^. ?2 u# |
8 k) D' G) W( g) g1 ]9 t V
|
|