|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 n5 Y: p. E3 I
#include <linux/init.h># S- l# g" k- [5 ^
#include <linux/module.h>
: n S. B& r: d#include <linux/kernel.h>; l( p/ p) w, |4 v% a- \; ^
#include <linux/types.h>& M4 P5 p. T+ W: m* ?
#include <linux/gpio.h>. u( j8 D, h2 Y' D8 x
#include <linux/leds.h>7 s% N- y5 T" i- p; [0 x
#include <linux/platform_device.h>
$ x" i3 b: @1 I' D1 B7 R# F; E v9 E4 R$ m9 b3 B9 w% a
#include <asm/mach-types.h>
* \- d. ^+ l' C* a. U9 W6 D7 F#include <asm/mach/arch.h>$ {1 K T$ b$ P7 Z% e: Z. U9 T
#include <mach/da8xx.h>
4 d( z) Y% I' P) ]! Q& q#include <mach/mux.h>
0 Z5 J2 T' X- a T. K4 z
# [5 r1 S( n" z7 B+ h#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ J. v. S( ^; e ^+ `/ [9 Q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 l& h* k4 j5 f/ ?3 r# {
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 H+ {: ]) V: f5 F9 b
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 M0 b, K! g7 v. i% `, p% v
( m' N+ a- k5 Z+ m5 i
/* assign the tl som board LED-GPIOs*/3 l! ?" R& D. q9 p4 b8 {5 B
static const short da850_evm_tl_user_led_pins[] = {9 {, r( s. r8 D+ V$ x
/* These pins are definition at <mach/mux.h> file */: H+ E% h; ^2 j, p# \$ `
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. F, M) \" }2 W. L l. q5 g' x8 Y
-1, [2 P7 \1 n/ e: W7 X
};
" p3 |# o+ j8 G# h6 H1 \: m$ |; |: i+ ?2 \7 @
static struct gpio_led da850_evm_tl_leds[] = {9 [4 D" T( |( j6 W0 _
{
+ f3 p, q5 C7 S! P9 d .active_low = 0,; z$ Y) ]! g0 ^# p
.gpio = DA850_USER_LED0,
7 Z( Q9 W& q* P3 T1 ` .name = "user_led0",! M1 B! _8 e& x( U% T
.default_trigger = "default-on",1 v+ k6 z0 U d5 S d3 \
},
5 a: _0 S0 ]4 o( z, r* Z3 X8 r {
: z( C) C4 K# f .active_low = 0,
/ P* Z# ?9 E4 e; }. A8 q4 Y- Q .gpio = DA850_USER_LED1,
3 r J* O$ F4 Y8 d+ I+ {6 u .name = "user_led1",
0 `) C+ q) \6 E8 k. f/ i .default_trigger = "default-on",; q! C* W' g/ B/ }
},3 x& o! }1 W% R7 g. x) t
{) `4 O* t% h5 P( R+ X+ f2 A
.active_low = 0,2 h7 V! D, @3 d) r. s
.gpio = DA850_USER_LED2,
; y$ f- [5 A2 `0 O3 g0 e& ] .name = "user_led2",
, Y8 @. C4 \( O0 |) i+ @$ a .default_trigger = "default-on",4 W/ e+ R6 q8 I
},
u$ B& |: U' w1 N {
+ s3 ?8 o7 P/ G |% ~ .active_low = 0,
- @ R' n5 U5 l+ ]+ U3 S) [! m5 k .gpio = DA850_USER_LED3,
6 B! v: j* V: k; H, d .name = "user_led3",
* ]" w2 \% U; M .default_trigger = "default-on",- f( |3 L1 S2 M. i# z. R1 V
},+ H' [/ \( ~6 R6 k# L; k2 G
};: A) f5 ?* r( N% B0 \1 Z# V4 k
, |' z( I. M8 K0 P: W6 u8 F0 Nstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
) Z" _( q& }5 C5 m- X" x .leds = da850_evm_tl_leds,# z( [, O3 Q" |" D5 i! q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),: h' o' {( I1 p1 c7 C3 F- M7 I
};
J- G: _1 v% \/ ~$ Z
: h0 T+ _) o( q* ]+ Z4 Jstatic void led_dev_release(struct device *dev)% ?9 q- d$ r3 T( n) I9 g) `3 X- y
{, E9 ]4 H* q2 D4 i j
};$ n# B$ H1 _( U4 f+ l I
* } ^, O& r5 }- B" H% @
static struct platform_device da850_evm_tl_leds_device = {1 D. o% \* M' J1 y% Z
.name = "leds-gpio",
0 h" Q9 O& W3 ]3 l .id = 1,# `" g/ Z3 Y0 I. ?
.dev = {$ B( x% H# }. ]$ q( i- U
.platform_data = &da850_evm_tl_leds_pdata,' b& N. l6 ?+ v* C3 {" k
.release = led_dev_release,# ]' S; v2 ~/ O/ ]5 h! B& L: ?
}
2 M/ |. m+ b$ Z4 B$ _9 e! M: S& s};- f! E# A& m% s9 V
3 G& M6 i- H' L' @' S7 W
static int __init led_platform_init(void)% O& h% K) }; ^7 d+ o1 ^
{
+ M) F+ M, u; m; U+ u" T4 ~ int ret;
3 g: S$ C" f! J# b C4 J#if 0
* ^ V' t5 j, ^( w ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. R5 ]/ a% B n* e% ~ if (ret)7 k& r* M; G- ?" W9 Q% i
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* q v. m7 H* S$ m/ _2 m4 N "%d\n", ret);
; v$ h |6 r/ S$ T3 C7 ]/ [ u#endif
) d+ I' d/ t9 L ^2 c( C7 P( M ret = platform_device_register(&da850_evm_tl_leds_device);+ i* \0 C$ E( [3 n& {% Z
if (ret)
: f8 ]# L1 \2 j1 T+ I' ` pr_warning("Could not register som GPIO expander LEDS");$ n( r! {: H2 w: y1 g0 \
else
; w" S# k! O$ U J# l+ F printk(KERN_INFO "LED register sucessful!\n");/ C: D8 o+ z5 z( Q% k" y
4 _4 b1 w1 @3 P: a- \) h$ }1 l return ret;
M& `7 k2 p# E8 B3 J. p}4 v: k- P1 }9 n- R6 U/ l( u7 I. ]6 A
6 P" `8 W2 T1 z" jstatic void __exit led_platform_exit(void)% g) a7 ]5 @& U4 N3 z# y
{
6 l. s: l0 S7 [4 W; S* g( C! c platform_device_unregister(&da850_evm_tl_leds_device);
, h" Y' v& H( {# f" f& Z; R8 w! _, b6 A2 p, R2 w
printk(KERN_INFO "LED unregister!\n");4 p7 s9 i. y4 @& { `2 D; R2 b. }' O7 E
}5 e3 `- t* U5 k' z
$ D. J, A# ]: t0 ], A. x. w) L% d) m
module_init(led_platform_init);
7 h6 ?( J& Y. |* b0 _+ C+ g. Cmodule_exit(led_platform_exit);
: e9 k2 s. e2 W6 Z5 [: D3 F7 {5 z& J, O, g6 P
MODULE_DESCRIPTION("Led platform driver");
. W8 U5 a8 X. r8 p* iMODULE_AUTHOR("Tronlong");( N) a( w# o( d: o. [1 _
MODULE_LICENSE("GPL");
- k7 u3 J# Q2 q, j9 D- E" G$ W- M; J
|
|