|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( {7 f1 L& \+ j- b3 a5 a
#include <linux/init.h>" T' P5 A4 Y; J* m. c4 P/ v+ b8 c: r; c
#include <linux/module.h>
6 e! C/ i$ S( Y5 \#include <linux/kernel.h>+ r( \$ c, e. }8 y
#include <linux/types.h>
J1 F4 @5 U( r% x#include <linux/gpio.h>
% M. B" N1 e3 l#include <linux/leds.h>
4 U% J! L/ Q* Z; m+ c! U. w- z' E% ?#include <linux/platform_device.h>+ ^2 m( v3 m- w2 H# C
9 @" J! [9 n3 e. P1 j
#include <asm/mach-types.h>0 R6 c `3 X) W4 Q8 E
#include <asm/mach/arch.h>, V, U) | A9 s- g- b5 k+ E
#include <mach/da8xx.h>
- U+ y7 Z! b% j b1 @. K#include <mach/mux.h>7 J4 z0 u# j |( @, V
0 N3 d$ v8 P# c. n7 y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: Y! X! k) C0 v0 M#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 i' G% J9 U8 k, ]% H' \$ u#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)5 o8 t9 c7 D+ f" `+ c- L
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ @1 ^' J0 K# O' h1 h& O+ T
3 F# L7 H7 ]; \# T: j' w$ j
/* assign the tl som board LED-GPIOs*/) L) U) [ q- A
static const short da850_evm_tl_user_led_pins[] = {
- x" n1 O1 t# F. H1 x' P /* These pins are definition at <mach/mux.h> file */
& V9 J$ m& @% n7 I$ | DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- p. h9 F! U* ]% R) ^+ o -1" Q3 H- ?: w) f
};% K- _+ F. |4 b4 ~
: H9 c% m# N- ~8 Y8 c( qstatic struct gpio_led da850_evm_tl_leds[] = {
# J* q, S# k: C' T' N3 l; ~ {
0 p- C0 e; M3 v% c% s4 A; V .active_low = 0,) M. a0 z8 L+ m1 B2 A6 Y g
.gpio = DA850_USER_LED0,* V, i1 H0 ~1 r
.name = "user_led0",
. d9 ^! X3 g0 ~# K0 j" E1 e# C .default_trigger = "default-on",; s" \# k; u. H) L. l; T q
},- V4 u% q! y; L% v. w7 v
{ N4 [/ B$ g. ~3 k% g1 C* o+ u
.active_low = 0,
* y8 \& Q9 w; \4 G8 L7 k .gpio = DA850_USER_LED1,
) ^) M6 G* t7 y% e% l: R .name = "user_led1",
0 o- f$ w: u/ Y& E9 C, q6 o- @ .default_trigger = "default-on",
( K. V0 n/ _* ]) C/ m' j& m },
& q4 g( u' @% U/ a% |$ }& o {$ x) c+ u4 F# U/ D1 x
.active_low = 0,7 n. Q$ S* b- P) y
.gpio = DA850_USER_LED2,4 p) j- S4 N0 f$ C# H8 K% h* x% |
.name = "user_led2",- E- _. f; D4 T3 S
.default_trigger = "default-on",/ |! f% a. ]% p8 m( u; b" p
},- Z( p& P6 l! Y5 v7 N X
{" G8 T) F! ~3 ~7 _
.active_low = 0,' @; {. i7 `' n( ^9 D
.gpio = DA850_USER_LED3,
* y7 c( M* ]. y .name = "user_led3",* q& H/ Y. n0 P/ k
.default_trigger = "default-on",; L% E1 ?% ?/ D. L; a8 @, p9 ?
},4 w9 m0 A0 y3 \3 E, Z @
};
( O& g! i0 q' @" d. ?* D& D% a0 L- q8 V" W9 }
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ m/ l( W3 B6 P( p. y, e .leds = da850_evm_tl_leds,
4 U' ^2 O0 e- v3 d; x- V, H! {: s .num_leds = ARRAY_SIZE(da850_evm_tl_leds),( `1 O+ q5 }1 d% W& d4 W
};
5 u# L9 ~2 `. Z7 _
6 n( B2 E" D8 h$ w0 L& m6 j- N6 ~/ [static void led_dev_release(struct device *dev)/ T- }8 x6 y" A6 L1 m+ M( l0 B
{
5 | l) P, n; J4 o* i1 Q};0 p0 u' D0 b& d# [1 M) v6 S$ q
) w1 i0 j* l6 v3 }2 ]static struct platform_device da850_evm_tl_leds_device = {6 ^4 M5 P3 Y0 B- A% X
.name = "leds-gpio",
6 {. l6 h1 p$ i# U, ^2 S: Y .id = 1,* Z, c3 t3 f _
.dev = {
. z* v+ u" f/ b# [* h" p( @% x' I .platform_data = &da850_evm_tl_leds_pdata,
5 j1 ~( r4 Y3 d/ U2 _6 p .release = led_dev_release,
9 s0 K3 R0 i$ P% b( { c+ U9 X4 E }/ s- B% W4 U+ Q
};
0 v7 f: x" \6 l+ m: Z
, I# U8 [( p* w% ystatic int __init led_platform_init(void)
3 ~; H* v$ P# F6 ?/ h5 J6 s{) c' x& {2 R9 U6 i. N$ c; d
int ret;7 \4 ?, ]4 h0 a
#if 04 O- j& X) A: N# S; W; l
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& N9 A7 u* }$ N: c# u, k if (ret)6 M7 _1 m/ g1 Y Q
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& H5 ?% u+ B& d
"%d\n", ret);
2 u, Z: s' v& N$ J( g#endif
, a* x9 S9 g5 j9 w" w1 A( s ret = platform_device_register(&da850_evm_tl_leds_device);3 `9 p" [5 t. _% }
if (ret)- c! c/ x" p. S0 N- s
pr_warning("Could not register som GPIO expander LEDS");, U5 {/ j( k# H
else! o& g: s0 t3 h1 |, ~. j# E* ~% Z
printk(KERN_INFO "LED register sucessful!\n");
" ~; g; N! Z& T: ^
. J; X) B: {; |" f# q, ? return ret;
/ U; S- V& r' b+ p8 k/ G}* [- l8 U) Z5 w8 N& F- }
6 I* o8 M1 E2 T- {3 Gstatic void __exit led_platform_exit(void)5 X2 `- r% N8 L3 X: [3 i
{
- J% v/ m Q; ~' \. ?( H platform_device_unregister(&da850_evm_tl_leds_device);
1 A- b/ p& u4 i: M. X
}+ | G: c: J6 `- @ printk(KERN_INFO "LED unregister!\n");2 s3 ]; \1 X8 z, l
}9 R" N" y. s8 ~ V# b3 O; m
! S0 X% g! V: j6 E! imodule_init(led_platform_init);6 N/ S: r$ u9 F/ G
module_exit(led_platform_exit);
0 D0 J$ E. R/ v
1 m. ~+ f. m1 I* p. H$ A2 a8 {MODULE_DESCRIPTION("Led platform driver");1 `3 c2 V+ q) Q D# r* y- f
MODULE_AUTHOR("Tronlong");: d- X/ L6 h- e7 ]4 G
MODULE_LICENSE("GPL");: L# W% ~; t% G
, W) _) [0 g( t |
|