|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 m% p. l' E5 j4 ^% x- |
#include <linux/init.h>
+ }- p: n7 S! ^1 A2 \( Y#include <linux/module.h>* g" W: d3 z" S" b$ y# y
#include <linux/kernel.h>* _8 b. B& D% m- t( r" }# Y
#include <linux/types.h>
R7 w* S4 X0 R& n: j& H#include <linux/gpio.h>
# G m: A2 s- D+ N" C: f0 v% y* e1 a#include <linux/leds.h>. C" W& o+ o8 ^: N. l3 X& j
#include <linux/platform_device.h>3 B( X/ w4 n' J. ~* L+ z
$ V" d# z6 q0 d0 E& p
#include <asm/mach-types.h>9 |* a# o; e, T$ d9 `. |* R
#include <asm/mach/arch.h>
$ H: E8 s& A) |6 X- s#include <mach/da8xx.h>! V. E; Q, D2 ~* ]0 _% u
#include <mach/mux.h>! [% c* N. G. ^( f! @* H2 j
# A8 F# C) R- U+ g4 G$ z5 p0 N# y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); E/ g. B# b& V
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 n1 K, S; D2 ?+ b+ Q) E#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& H0 i# Q7 {( T: f. e6 s8 }7 ~#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 t! Y1 l0 H% j9 I% }1 p5 K
, [! q9 G0 C O9 T1 k
/* assign the tl som board LED-GPIOs*/
! b; a% B0 g- ^+ h, Rstatic const short da850_evm_tl_user_led_pins[] = {2 l* y! i. _) Q* H
/* These pins are definition at <mach/mux.h> file */) ]+ O& J6 q) @: _( }$ o' H
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, { M2 ?2 d& O6 x
-1
* k& G" ]2 y0 z% [8 v4 w7 `};2 {: a# A' i- x( H( L; t9 H
0 ]0 C* a2 K6 w" p0 N( Z
static struct gpio_led da850_evm_tl_leds[] = {
3 } K" \" C$ H2 } {8 i. w& r( d1 K0 V0 a8 z
.active_low = 0,+ Z- N3 F; v1 j
.gpio = DA850_USER_LED0,
0 i, d! S4 s. w- V# D# Y; d .name = "user_led0",, S0 q, t4 N, O3 a5 y9 R4 U
.default_trigger = "default-on",
0 W! e9 Z$ }. Z( U },( K) X0 k# F, p, {- u. o; j
{
! [2 Z) t+ n5 {( F .active_low = 0,
+ m" B" X$ `* P. f5 j- h( F a .gpio = DA850_USER_LED1,' W; n( a9 G; o5 i8 s) A! U
.name = "user_led1",6 U8 E7 _5 S* T
.default_trigger = "default-on",
( r/ |3 ?9 N; ?6 v' B; R" X+ ^ },6 x6 z5 S( Q0 j9 r8 K9 q h
{
" i6 x; K, E; M4 x, J: \$ c .active_low = 0,
* O5 d* p6 R% B6 J/ \% l; d .gpio = DA850_USER_LED2,
9 E9 H+ T. H# Z& D$ k/ q( g .name = "user_led2",, U8 x+ q: |5 V# \4 g. p/ ]
.default_trigger = "default-on",; Q& w* m6 ?2 c: q+ ^: R
},
# e0 L; O% C! Y3 f$ R t0 K {6 x: @9 Y9 \* i3 n
.active_low = 0,3 D* \. U; I/ s& |- |, Z$ D
.gpio = DA850_USER_LED3,' B+ M# H! N8 O$ V% ?! r
.name = "user_led3",+ m! ^9 X! o/ k% y
.default_trigger = "default-on",
3 n& d& W- {+ o" ` },+ Y5 V1 C6 @- d6 f M
};
9 L/ R* g) C2 r% V4 p( i
( C: a3 E- D+ E& mstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 A0 S `' j* c5 ~" S
.leds = da850_evm_tl_leds,6 n& ]6 \( m8 `7 {( z1 U/ [0 T
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),& p5 r: ~% {8 l# g
};0 s0 ?! _ p. Q- L" l& \. _
2 D2 i. H1 s* w" x' `' H, _$ f; S7 C9 F
static void led_dev_release(struct device *dev)1 j& Q* P( B. v/ C: b
{
3 s% d6 e# s2 U. B, ~: K};
4 o- A& S5 ?8 s: g% L, M* d
$ a* `4 L4 X) Tstatic struct platform_device da850_evm_tl_leds_device = {
$ I! H( x" O; o$ a9 a* @( c1 l .name = "leds-gpio",, _! b$ B2 F6 `
.id = 1,
% o& b' f+ G/ a; w .dev = { f7 Q1 Z8 M! j8 F' q
.platform_data = &da850_evm_tl_leds_pdata,7 v i' L4 ?: {& }. q+ f
.release = led_dev_release,
2 Q D& C8 `, n, Q4 p7 {+ v }
- n* A% R8 L1 D7 Y; g}; z* J9 L) m6 u* \ G& q6 v8 c
2 Q9 I" ]8 P& X* sstatic int __init led_platform_init(void)( ^2 K' h3 Z9 ?5 {9 u8 L: y0 Y4 Y
{
( q. ]/ Z( Y3 Z% d5 [& O& u int ret;
" m' K% X9 |3 K1 ?#if 0; u9 i8 |" Q5 V
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ U9 d W0 D. q if (ret)
/ Z) p/ m% u" O pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; G: y& ~/ s9 ~2 c' t) y: C
"%d\n", ret);7 z7 b* s- @8 ` w4 ?7 t% K) H
#endif6 ?6 \& f9 j [4 k0 E3 E& W
ret = platform_device_register(&da850_evm_tl_leds_device);
4 I4 G) y5 f% ~3 @ if (ret)
* _& T7 d8 }3 H2 i& E pr_warning("Could not register som GPIO expander LEDS");4 C% S- K; {! ~% h+ w
else
3 u! ~& Z$ O- n# ]8 e; h printk(KERN_INFO "LED register sucessful!\n");
& Q* k! k) f# Z: s$ e
4 {+ F( E, e/ J7 i/ p" |& q return ret;
$ i6 x( t1 v2 T" }; c% P}
' [1 @2 x% {: }/ y4 O6 l
+ Q5 j" ~2 ?& V( S) J) i2 g( p( ]static void __exit led_platform_exit(void)
. ?, @5 k( k) z{
* J% [/ T N4 y7 `6 M' M7 h platform_device_unregister(&da850_evm_tl_leds_device);
% c* H0 b, t5 r* p6 B$ m. c7 Y
( H( c6 O4 V3 I8 s' J printk(KERN_INFO "LED unregister!\n");4 y1 j( G f7 P9 ^, x, B; H
}
. X0 K$ i8 I/ v3 D' o1 a$ ? Q( v5 [. D
module_init(led_platform_init);: U8 `1 O( {& } t
module_exit(led_platform_exit);
0 @* o. z! _/ }$ z6 R- r4 I* v8 J* o3 I3 T
MODULE_DESCRIPTION("Led platform driver");
+ U' q$ p! }) s$ ~9 n5 L% RMODULE_AUTHOR("Tronlong");
( h3 y: ?! }0 K# i+ O: o/ [8 n8 s. E( o6 TMODULE_LICENSE("GPL");) O% |! N+ h% S
4 P4 |/ W2 x/ [2 k7 s2 [ |
|