|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( G4 Z9 A5 ~1 f+ I$ X5 ]/ _4 D
#include <linux/init.h>1 {% w$ ^( v9 i5 q( l: s7 G+ S. n' E
#include <linux/module.h>/ w+ k* q$ b* k r4 B
#include <linux/kernel.h>
\6 k/ i4 B1 k8 C; |+ r2 M$ [#include <linux/types.h>' A( P/ j: [- A6 I3 N D
#include <linux/gpio.h>( |" B2 o& y( C3 F. V! \ B) P+ p, j" u
#include <linux/leds.h>
3 [7 P4 A- y* x' M8 t#include <linux/platform_device.h>
* d) l6 |( D \$ X, P4 P1 n
y, w/ a3 m8 d& ]+ U o$ Q( M4 j#include <asm/mach-types.h>
! e9 J2 |/ B/ O0 Q+ S& `, o#include <asm/mach/arch.h>5 F+ K/ c; X; n1 }" p
#include <mach/da8xx.h>' I0 U3 F. ~6 W* J0 x
#include <mach/mux.h>
5 I+ X7 q/ @. L; }. k9 L
0 O) n }, U% i7 x( r5 l% n7 V#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! }# h8 Q) [+ ~3 ]' i#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 U: f9 A: @; ~2 r#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); ?* ^# t! ~, L% J$ F; T
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& L) I" v) C: | L$ W6 L l8 E2 V+ a7 l
/* assign the tl som board LED-GPIOs*/, @3 V$ v W3 E$ W# z* R2 y
static const short da850_evm_tl_user_led_pins[] = {
8 c1 Z: V. M/ D0 l! [0 f, d2 U /* These pins are definition at <mach/mux.h> file */ ]6 m% b# h" p5 Z, r7 u1 g, O& j3 b0 b" _
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- t, c% n1 b P/ r9 h) @' T -1/ i+ y( K& H+ j' N5 [/ B
};& G- V+ _7 ]) a, M4 O% T4 X
! m+ t0 ^: r! {4 |' X) ?" F) G6 d1 bstatic struct gpio_led da850_evm_tl_leds[] = {
, B4 ~& }* T) r/ {0 V { z! ]; Q( p% }! w) u% q: F/ _
.active_low = 0,
; H$ `! B, r& d w .gpio = DA850_USER_LED0,
% u' v" o/ X5 j& n& C9 z& ~, g .name = "user_led0"," K n4 o `4 I! B4 a& k8 b
.default_trigger = "default-on",
: w, ]3 f2 E' u& M p( W! u },
* x) S+ J3 @6 D8 _! s {
8 {! j6 D. r+ O. P% ]* @, y4 X* V$ _ .active_low = 0,
/ j4 {# J& N% A# p g5 d .gpio = DA850_USER_LED1,- l' b. A# @7 k- n0 z
.name = "user_led1",
% q8 m- s, w! ^/ ?% w .default_trigger = "default-on",
- q, P" `$ F6 ~: ` q },5 m+ k6 ~1 W0 B0 \
{
A& x k6 }# v2 v" Z, r .active_low = 0," Y M+ x% b$ R/ {2 J3 v
.gpio = DA850_USER_LED2,. L9 N$ _ S [) L# ?) q- ^
.name = "user_led2",
* y( X' O' R+ f+ f2 k .default_trigger = "default-on",4 v& R3 \* @: S
},% h/ }% J" I7 D' T3 d- H) B& A* c' |4 x
{$ O+ N+ M( R7 n1 L
.active_low = 0,
) h5 m" \# y! w .gpio = DA850_USER_LED3,( }5 X r9 F5 V5 o5 V+ w
.name = "user_led3",
4 [8 x0 C8 E9 M6 D7 |! a# k2 M .default_trigger = "default-on",
1 H3 }3 e: T3 o7 Q' {3 Y },( F/ @; o) O! D
};
0 N: b1 U6 U5 r: k1 E6 A5 G9 J
6 @; a* m9 F0 [' [! @static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 v! A" ~/ Y3 H7 K .leds = da850_evm_tl_leds,( w2 l9 g2 Y3 g$ c
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),' C- K Q" }8 K) f& H. h
};
8 U+ s5 v# h2 H1 e( `8 ~1 x; ?* D9 P+ r/ E0 `
static void led_dev_release(struct device *dev)* q3 e, u6 R& n1 ]
{
: y% P7 H! C4 ]; q};3 n& q- S- r% X7 o! ]+ R
' b$ R5 A3 g6 ]& X* i2 A
static struct platform_device da850_evm_tl_leds_device = {9 t v, l: z' e: O2 ?! j- J- E
.name = "leds-gpio",% _# H- Z) ]6 I X
.id = 1,: Q9 K4 c# T) J9 u) e Y+ m0 `
.dev = {
+ ~' u9 Q8 w. ]" e; N .platform_data = &da850_evm_tl_leds_pdata,
- Z! N* ~4 r' w+ x5 L; n0 Y* c- n .release = led_dev_release,) t, h% K: |& h( N6 Q
}+ F9 n6 }* i& R; d- K5 W* |( {
};
- Z3 j4 i, D1 H# S! n5 J( Y6 o. k
3 n R: O R8 d% T% m8 N9 K* dstatic int __init led_platform_init(void)
/ v2 S/ c. q3 L{
0 M$ |6 ~- b7 k int ret;
$ T; H3 n+ ~- D9 [, @# {2 f#if 05 b8 p5 v: c( t" n S0 l. S* @) q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; K( \7 B) s2 a7 O
if (ret)
/ s. B. L9 a) a pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 j0 e. m% u5 R$ f: S "%d\n", ret);- w, q# n7 u. ]4 p
#endif6 A) d. @" S( I
ret = platform_device_register(&da850_evm_tl_leds_device);
8 N) U1 Q" y, @ if (ret)
! y' `3 N+ b2 j) B pr_warning("Could not register som GPIO expander LEDS");
1 a u" G* O- f E# j else
% I1 i& h( P( m printk(KERN_INFO "LED register sucessful!\n");
" I# E7 i' o E' k3 A
* T2 @* p! i) i8 {* {! I return ret;
3 [% m1 v& z7 A0 a8 I8 [9 T}8 O1 e- u; P7 J9 x- g* u+ R/ C
- S- q' J5 f. {3 @* Z& Y
static void __exit led_platform_exit(void)# B4 L/ E7 D' t0 Q7 [, }
{
* ~/ ]! B+ i3 X platform_device_unregister(&da850_evm_tl_leds_device);, q& X/ y' r) f$ N; D
) A1 H* E8 ^. A% @! k& q) F+ k& l* a printk(KERN_INFO "LED unregister!\n");* i$ N c/ z6 X4 [: N( u* ?7 T
}# l# ?# S8 M, B9 D u
+ G m! Z4 p0 \9 t* D9 Fmodule_init(led_platform_init);1 F4 X; S; r% w+ p1 ?" \$ [
module_exit(led_platform_exit);& P! X4 \6 r0 L
7 E( H1 R, O( TMODULE_DESCRIPTION("Led platform driver");
' x3 N7 A0 T2 c" IMODULE_AUTHOR("Tronlong");
$ h# g& u' g0 n ~" e# N) zMODULE_LICENSE("GPL");
# d* e5 u3 f' h( Z* k. b6 n' W* h
- ?7 y* v; [2 z1 |/ ~ |
|