|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 g* Q1 `/ g; ?, l' L, c: w
#include <linux/init.h>! S1 b! _/ G6 m5 G9 K& i
#include <linux/module.h>
8 v! t3 v" J; ?* K- @5 ~+ a4 C3 j#include <linux/kernel.h>
5 N( u. K2 X4 O2 s#include <linux/types.h>4 F0 r; W# ~2 X9 @0 z
#include <linux/gpio.h>7 j, f9 {% {. d' x( Y2 j
#include <linux/leds.h>; r J0 F7 M. E" D) v0 u, F9 c3 a
#include <linux/platform_device.h>
. ]" | M, a( ~5 r0 f Q
+ w( X4 u3 E. q: n( J' H/ x) }. V#include <asm/mach-types.h>7 f* Q0 W7 J: k" A
#include <asm/mach/arch.h>
: G1 [ ^! e/ A; b0 v#include <mach/da8xx.h>
' M: e( C6 `! n/ Z G#include <mach/mux.h>! @5 G5 d& O8 F3 E z' v2 |3 D: s
! r/ k( ]/ j" y; m& O9 S$ t#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
L* W$ E, T8 F8 ]; w+ w! c#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! ^; u9 O1 A6 o! M& }#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 T; ~- n* a6 L/ E. Y#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
7 m3 o4 k1 D( ^/ `' W, C9 g2 i7 U& T% F" s' l
/* assign the tl som board LED-GPIOs*/, ~1 l" ] F8 J; L
static const short da850_evm_tl_user_led_pins[] = {6 ] V2 b+ c$ {( d: q! _! _
/* These pins are definition at <mach/mux.h> file */& a5 f% H; L' ]9 R
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( ?8 s6 R8 Z% R/ Z! Y. S0 | -1# {6 I6 b8 u" J1 I
};
3 _" Y4 s3 n5 }
" Z, e( p, R: `' a T% Ystatic struct gpio_led da850_evm_tl_leds[] = {, k( p0 X+ j& z
{
6 I* p, f& `" P4 Y! Y .active_low = 0,7 w; }% M2 E8 t! C
.gpio = DA850_USER_LED0,
% z y0 u' _+ v O3 _' d .name = "user_led0",
& P. D1 t( Y# Q7 r .default_trigger = "default-on",% U( i5 B+ @1 B$ f, |8 b" K
},
S: O7 l6 s' N4 ? {7 ]/ t/ U) e0 ]; q6 I3 p* e
.active_low = 0,
; U+ W+ f7 G- o- B: |+ j .gpio = DA850_USER_LED1,
. S% n& W9 e2 g# z; f .name = "user_led1",3 [) r% C3 S1 k" I' E- j
.default_trigger = "default-on",9 i3 P* E; o" g9 r Y# N
},
% ?# l# u0 p& I% Q2 Q3 v {7 |6 o: {- I- S1 m" s1 O
.active_low = 0,
0 e. t4 ?0 z8 i0 N! j .gpio = DA850_USER_LED2,
: ~) k5 t' Y% u# q7 ~) \" B/ {% r .name = "user_led2",3 ~, `! }0 R3 |' q9 p
.default_trigger = "default-on",
8 K6 ^+ [: C% J) L( a },
" Q0 J% U1 k" V& K {# z6 c, l9 }) }% Z/ {
.active_low = 0,
7 A$ u! W9 Y3 A7 n% O3 j3 _$ {" j .gpio = DA850_USER_LED3,
$ v# u! D: G* _ .name = "user_led3",
: U7 [7 r4 C) u2 y9 E m .default_trigger = "default-on",
$ E8 q' X) P2 W( E8 L },' \+ l4 G# G' J
};. z+ l& e7 V; b. x6 `% X
( i/ j$ B. ^4 E* p) ?
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 y: ~* L* z# g( s/ k
.leds = da850_evm_tl_leds,
% T: H! d, i! S, U" ?2 T& S0 c .num_leds = ARRAY_SIZE(da850_evm_tl_leds), M8 s# S! `6 \
};
0 a3 ~" R) `- H
0 j+ c/ L* S" a) I/ G) gstatic void led_dev_release(struct device *dev)* h% z; R1 V1 O- x* z
{
) F7 X. T* Y. O/ L};
% R. l/ }7 W/ v% }$ W) o+ _5 e! v% L7 ~5 v7 L( g
static struct platform_device da850_evm_tl_leds_device = {/ d# M4 t1 z& \& q( ~
.name = "leds-gpio",
% A- _. |; G4 n0 Y f .id = 1,
( v; j5 f& ~( T+ k .dev = {
( W( s' K- h7 x. B .platform_data = &da850_evm_tl_leds_pdata,
1 _# B4 H) {* V4 R! L .release = led_dev_release,' w/ I( X% W7 O( r4 ~
}
; o* X, W# @6 [7 x/ [};
! |. L. O& i; _1 x8 {7 ]1 i/ Y1 Q$ V6 Y% m" n c O& t
static int __init led_platform_init(void)
$ w+ h# c5 k9 n* V+ _{
+ b4 Q; Q o7 t1 s0 Q/ W$ N$ s4 N& d int ret;
2 Q( h+ [* V. E. E' @+ ?: s! x#if 0/ ]* V2 _+ o1 V: q( C
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
8 x' P0 z& b! Y+ E3 T) O3 O$ E if (ret)
9 ]7 y8 S/ A* p* O1 F6 j pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& q9 G1 |4 f) c- i6 P
"%d\n", ret);
7 i* B6 ?; O% l. Z" l& `7 p#endif) ]: O" E" _) A2 ~% v3 k% A
ret = platform_device_register(&da850_evm_tl_leds_device);' s) l: x1 h5 E: v
if (ret)
2 K6 T5 [ U* a2 r/ v pr_warning("Could not register som GPIO expander LEDS");
/ Y9 ^4 t$ L; N5 a5 W5 [$ S Q" V else, K) H; ^9 f9 H; c. p, _# O0 ]
printk(KERN_INFO "LED register sucessful!\n");: ?( C* q2 ?2 w: Y4 e/ B
; T' @4 K9 d: T: B7 s$ A% I. K5 \
return ret;6 q) x4 b& p- G. @. K
}
; [/ s: X; N2 b0 C
@ k) o5 z" ]) u7 Lstatic void __exit led_platform_exit(void)7 P9 ` b5 a/ ~- ^
{& {9 J @" o& r- c
platform_device_unregister(&da850_evm_tl_leds_device);( u8 u# u4 @6 g$ c) w$ W
: l+ L9 i/ m8 z h; W- V printk(KERN_INFO "LED unregister!\n");4 i8 ^( x0 Q+ `8 [7 ~
}4 b2 W' H7 V5 U9 S+ z5 x
. q* |( `6 v# i- }' H+ Q
module_init(led_platform_init);
1 S4 C: A1 l7 I' w) O. E9 a& Cmodule_exit(led_platform_exit);0 x) z0 t; c$ m4 m" v% ~6 C1 A
# j3 _) d$ l( f) ?+ b" M; H
MODULE_DESCRIPTION("Led platform driver");
8 u$ h( h! T0 W9 e8 i) G9 T7 lMODULE_AUTHOR("Tronlong");, N. C" Z( c( A4 \/ ?
MODULE_LICENSE("GPL");* O! Z7 f+ J6 z0 x& W& o
! r8 i& ^1 R3 R: b6 ]2 t7 p |
|