|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 B: U, l% {) y u: V2 i- T
#include <linux/init.h>
3 P, d% ?# L2 J$ R k9 J! g% M0 I#include <linux/module.h>
: d! x( r% L7 k! r+ z! B. M#include <linux/kernel.h>0 M" K* @8 ?( H
#include <linux/types.h>
1 ^) M9 q; g6 v2 j* s; z#include <linux/gpio.h>) p5 z# e' N) e9 c, {' H% x( u; W% C
#include <linux/leds.h> h+ y' ~6 G' D5 [# g
#include <linux/platform_device.h>1 c9 [+ V. B* n A
: q2 ]0 O b' u' E# W9 H#include <asm/mach-types.h>6 Z& j2 J! s+ E
#include <asm/mach/arch.h>
# P! n0 F1 `/ b; t' C#include <mach/da8xx.h>! Y& y' m3 f3 ^, B
#include <mach/mux.h>
4 G* \, F. t2 D" `& o! A2 O9 Y! Z3 w/ j( m& \
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* C7 x' m& r* K! C7 A" D
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): e- g6 u- t4 I, _+ F; e
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 S5 R9 ^- g5 ?3 }1 O) `1 I#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: v* x0 Q0 B' L* P: m" v
. r- I+ x! Z4 p! z" y( b) s& _/* assign the tl som board LED-GPIOs*/
) Q& \" q C$ P7 `static const short da850_evm_tl_user_led_pins[] = {" c5 y0 [" b4 Q; g c M0 t6 q
/* These pins are definition at <mach/mux.h> file */8 h/ L) T6 d& F0 @
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
$ U; ]; h3 R2 f3 [" N -1( a5 j u4 B% ?, r9 R& Y
};
: J/ ?% U0 W3 n: n/ w, D$ m; n2 V- v5 q8 y3 |
static struct gpio_led da850_evm_tl_leds[] = {3 x1 Y, u- g6 e) l% d
{( f& h% Y% l& L' k8 X! D) u
.active_low = 0,/ V, T2 a. @& l% V1 e, }+ k
.gpio = DA850_USER_LED0,3 \5 ~" U" C+ a% j* h8 b# [
.name = "user_led0",: l# \* T! K1 J; g3 x& Z" U& t
.default_trigger = "default-on",& I" x4 P6 O2 c, U& }/ |0 I
},
) _) x, R0 x- k/ O {
2 ]. v0 D7 {8 T/ {. d- Z .active_low = 0,
1 L, t, Y# g! g; f+ b .gpio = DA850_USER_LED1,
: \" p1 Q M2 M. P6 ~ m, ] O q .name = "user_led1",
2 a2 d0 o5 F& }% l" V7 G .default_trigger = "default-on",
2 }' V- A8 G9 B5 w( h& P },
1 }5 Q1 f6 G: _ {$ R% K' x7 `4 Y: ~2 ~
.active_low = 0,
" }- r9 f' a% t4 d" u e0 e .gpio = DA850_USER_LED2,
( z, ?0 T- e, }6 P$ J5 ^- z6 s .name = "user_led2",
1 l3 J# l6 E0 i# D .default_trigger = "default-on",
) e0 d' V& d1 } N },- C" i( j) u' q
{
/ t+ U: k! k8 W( E9 `' s .active_low = 0,0 M: i. x9 C! g* ?/ Q8 g
.gpio = DA850_USER_LED3, j- i& }; z) Z& _+ L( M2 k# h
.name = "user_led3",
/ X: F( p- K/ v5 Q9 n .default_trigger = "default-on",) r2 \ P! r- c( M
},
' U! Q, k+ P* e};
5 {2 Y! F+ S4 Z Y: c
/ U' z# i& x3 p) w9 _) c% pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 l7 G3 z# K$ D) \& o .leds = da850_evm_tl_leds,4 F$ U2 H# ?# \' O
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, V+ z8 ?8 j$ d& b" o; X* o t};
9 f( y4 s% C, B; w, [
) U( {5 n7 F+ h; E* G: cstatic void led_dev_release(struct device *dev)
+ S* O1 {0 i" o! s0 o& L g{
4 r8 S& k! f) h- C};
5 ^" \; R( s$ X4 q, ~5 a2 j+ `( l$ d; X; y
static struct platform_device da850_evm_tl_leds_device = {" q7 f6 N/ C& i" ~
.name = "leds-gpio"," @5 U+ j/ [0 d3 e$ ?
.id = 1,
7 |: b0 _* O2 r, f/ } .dev = {
$ c' e4 Y) S: {1 Y: s7 N7 V& A .platform_data = &da850_evm_tl_leds_pdata,
4 {- Y$ D: p- Y$ x" e' N .release = led_dev_release,) a6 q+ D7 P- f) H# B& J" r
}
3 ^) |9 r' A( y6 Q3 P; C2 c};5 c; ?" v/ q% j' F
" @: G1 B% e4 t# r( D! H
static int __init led_platform_init(void)
( [2 F3 M2 f/ J; }{7 X* n" j& d' P6 D* A2 ~+ i
int ret;
9 `8 k7 ~* Z, z0 e2 z#if 0/ O+ j" t* S' F+ N9 D
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 v0 Q% N/ g q8 w5 E if (ret)
" j) L- j3 L& U% A+ O pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# J5 B( [- e/ k7 P/ m/ O1 D
"%d\n", ret);4 n: \! F1 f. A) Y3 G+ }
#endif( W2 v3 R- E- d$ T! {
ret = platform_device_register(&da850_evm_tl_leds_device);
" b- @3 E* @ V/ N# z if (ret)
) y( R1 x3 W( ]; W3 \! i( J pr_warning("Could not register som GPIO expander LEDS");
, ~* Y! a5 j6 y0 u. C else. o4 ]: r/ x0 c& e9 m; `! y: L
printk(KERN_INFO "LED register sucessful!\n");* R3 Q5 z [4 z+ c0 I7 Y7 e! b z( w
5 x% _, N( |0 @# M return ret;; S# T3 j/ b# U" j( ~
}
( N7 T6 t. r; y |2 s* Z
7 b! S; S1 M8 s* \0 xstatic void __exit led_platform_exit(void)4 s7 Z7 K$ n7 ]2 g. p+ I" U6 V% z
{
$ p1 o' K# y E1 E! T) ~ platform_device_unregister(&da850_evm_tl_leds_device);* J& N4 ^/ K1 Y; W6 C2 Q
5 S" W0 Q8 Q8 T2 I printk(KERN_INFO "LED unregister!\n");/ l- x4 r. v9 {8 F2 x
}
' p; a7 B5 X! G8 J9 D
/ H7 Q6 @5 ]+ K9 |( K* Z5 l4 Dmodule_init(led_platform_init);9 G0 y0 H$ d1 Q" v+ F
module_exit(led_platform_exit);/ A: ?9 U4 X- H# B8 y! J5 U% A
8 Z( |8 R9 W, x6 K% X( xMODULE_DESCRIPTION("Led platform driver");5 n: i; ~/ {0 @: [$ e& P
MODULE_AUTHOR("Tronlong"); p( p6 E- y- a4 q7 h
MODULE_LICENSE("GPL");. T: u. {; Q7 Q9 V
+ n0 W! G0 Q6 ?, y6 r5 L |
|