|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 s2 K6 T3 ~* v& c9 @: c
#include <linux/init.h>
2 w8 ]: c) ? d& {: Y#include <linux/module.h>: m' _6 n5 ?' x% }6 ^/ ]
#include <linux/kernel.h>
3 P7 p0 E( x6 P9 c! n# n6 }#include <linux/types.h>+ y- g1 m6 l5 A0 H, d/ T2 t
#include <linux/gpio.h>
: Z) [! e* U7 _! u. Z5 P& B8 `#include <linux/leds.h>5 i0 ]) m( a3 x
#include <linux/platform_device.h>- K! a+ f3 Z* |* \! n
0 ]3 o0 ]5 c5 q( U9 m4 z9 O#include <asm/mach-types.h>
$ Z& W3 G5 L& [* p7 ?#include <asm/mach/arch.h>9 I1 l% u$ o1 C$ z: g
#include <mach/da8xx.h>3 Y: s* D/ ~" P! Q+ G! Z$ D: ?
#include <mach/mux.h>
* M! [+ o4 k3 m6 I; l3 @( O. d/ _$ h9 V$ T! N6 C
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) C/ H4 Q/ f( |& F N2 }
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 e/ J O/ r/ w; [. {#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# o; i' ~8 f! I6 a: ?+ M* A2 n( w+ e
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
r. F" H( Y) V# i9 X. R+ \ `" F$ R' ^1 {: V8 D
/* assign the tl som board LED-GPIOs*/) u. F4 j% b/ i
static const short da850_evm_tl_user_led_pins[] = {% h a9 x- U3 |9 _8 }! L* B
/* These pins are definition at <mach/mux.h> file */
8 N( @$ D# j2 b% V' F( r- N' } DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 v1 p7 Q* _/ t$ A -15 F. a% u0 a" _% l# w A0 U) [/ f$ e
};
' B h' g* O+ W' Y7 Z1 ]/ Y% D
. |+ ^9 g' }. jstatic struct gpio_led da850_evm_tl_leds[] = {7 m6 P& \5 I* L) m7 A4 x
{, D- |: }$ Z6 \8 c1 Q: \# \$ d* N# \
.active_low = 0,1 K5 i, B( j. d2 D3 Q% u! ~4 H
.gpio = DA850_USER_LED0,
D8 N9 r9 k& A6 A- u4 m; r .name = "user_led0",
, D8 J* w8 R0 {$ M, O( x2 l% L .default_trigger = "default-on",$ b4 U7 U3 z: X
},
& Z5 {. @- r9 |; E, P( ^ {4 a. M/ F3 `0 r6 P
.active_low = 0,& v) W8 Z. V4 d w/ ^. A, v
.gpio = DA850_USER_LED1, o, t0 S# @; r9 |
.name = "user_led1",* c; @0 s+ P* b; H9 O' s
.default_trigger = "default-on",
# D0 x7 u0 a1 j4 ^+ ]+ G },! I6 i$ G, ^! C& I% G* F) Z3 z/ j
{
! A1 f$ f$ P& B, u- g( E+ B: o .active_low = 0,
( C0 f8 p- ^; v, B, ~; S .gpio = DA850_USER_LED2,' q- M+ W: f" ^7 Q
.name = "user_led2",' S5 h0 x* ^5 ?5 K
.default_trigger = "default-on",4 e' \+ q" O+ k3 l. N5 R! o3 ^# \
},
5 P3 `3 W9 y* O& Y {
2 F6 T* O& j. y% Z) O .active_low = 0,- `. C5 s7 G, K1 N% l; |
.gpio = DA850_USER_LED3,% e- t( l( |$ i4 H6 D; l
.name = "user_led3",! M& x! @; h6 i8 } @
.default_trigger = "default-on",
Y; W+ V# d1 C3 {5 Q" u },- n: C2 R: \8 M% ^
};8 ]' ]! w8 [& X" g5 O6 ~
- [; _# y0 h/ B1 N
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) N3 i9 {$ {6 r$ Z
.leds = da850_evm_tl_leds,
9 E& ~7 _( n! e w2 o3 z4 Z .num_leds = ARRAY_SIZE(da850_evm_tl_leds),) O f: q, w0 K9 G6 |, w
};- R/ z$ j B6 n2 s, x; P: U: l
# i- p- ?% H3 N$ x6 _
static void led_dev_release(struct device *dev)
. I; h; q) O+ d{
0 y2 u& ~% i& G' v; U" S6 \" ^};
: L7 u5 n& w, g6 G4 d. D+ d( U
6 Y' r1 V% q7 g u! K' T5 {1 }static struct platform_device da850_evm_tl_leds_device = {, Y* `3 F& @) S4 O8 V! J. T/ @
.name = "leds-gpio",
2 r* w4 o% _$ A! ^3 ~ .id = 1,/ d2 M9 U( e- a6 d# D( s4 s
.dev = {& x5 S6 d. j2 s% |1 p
.platform_data = &da850_evm_tl_leds_pdata,
8 K$ q) R- `& J8 {( O .release = led_dev_release,
/ M/ N6 [2 `: H; D; Q; H }
4 U/ a0 A5 R" \};
' Z9 c( m( h1 d) x6 `( T4 X, |6 i- F. g
static int __init led_platform_init(void)
3 ^, m4 M9 s- e1 k' R{
6 Y) t$ h% R( t5 B3 L int ret;, d" b& f; {3 r8 F) y. B
#if 0$ D; J) L' e. O
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
" y0 W. t) F0 m5 L2 Y( P" `4 Z if (ret)4 I3 y# w# z5 ?
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' }% C& c9 \8 q' Y& ?, C; W "%d\n", ret);: r$ F8 N0 m1 T* `
#endif8 w2 U X" L w5 k* G
ret = platform_device_register(&da850_evm_tl_leds_device);
9 A3 P- j: t) r' g5 e; o) Y* a if (ret)( F8 `3 c5 H. [! B4 b* ]3 j
pr_warning("Could not register som GPIO expander LEDS");
# O$ r/ x+ o* z else$ L9 n; ?* p9 X1 ]$ O- s
printk(KERN_INFO "LED register sucessful!\n");+ R' f8 V2 s* Q' E
. `8 @7 ^2 O7 i$ t: R$ I0 ]
return ret; A3 b- x. f3 {9 W7 H, k
}6 \* Y) X* A% R
) t6 Y3 L6 l! w* }static void __exit led_platform_exit(void)
+ E2 s/ {% e6 [, ^( b{
0 z: Y* |( G8 C, J* p2 `% D" s platform_device_unregister(&da850_evm_tl_leds_device);
- d0 Q( G9 g* }) }7 m5 O: c( U
7 G+ }' t# M6 f printk(KERN_INFO "LED unregister!\n");7 K# X- [& d8 _6 ^. _
}6 I: I6 x2 C6 z5 y0 J
8 ?+ B/ H+ v1 G& h' ~0 @# a
module_init(led_platform_init);
* v' V- t2 P& E( ]module_exit(led_platform_exit);
2 k i/ F# ]7 [6 C( C; `0 c
8 ^2 G% _" d3 _ h. r. r! @MODULE_DESCRIPTION("Led platform driver");7 b4 x/ l, O% o+ b4 @4 V. A
MODULE_AUTHOR("Tronlong");
- Q. @6 V' o) H& `! UMODULE_LICENSE("GPL");
! Q+ k2 S9 H6 _1 a8 B5 |2 V
9 M0 y# p. t6 s9 Y4 c |
|