|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 p: l, f3 ~$ O0 k) \( u( Q4 ^' C#include <linux/init.h>: v7 k" G1 n6 C9 ~4 Z l0 e+ B
#include <linux/module.h>: L7 O3 m: d2 ~% ~0 p
#include <linux/kernel.h>$ i, S# a: B1 [1 R0 G. F! B
#include <linux/types.h>
8 o' W N. Z8 E2 f4 k* Z#include <linux/gpio.h>
9 M7 C+ a# b. }8 f" C: p: X#include <linux/leds.h>3 N3 ^! R! h) }8 Y; M! T( P
#include <linux/platform_device.h>0 S3 f; N4 D* J2 @1 ?* u5 H
, ]7 e1 Y7 [4 j D0 ?#include <asm/mach-types.h>
+ \6 x4 M6 c2 G% h3 m# N( S5 T#include <asm/mach/arch.h>
5 ^6 X5 v! s1 o! C0 a: L4 k: |#include <mach/da8xx.h>
% {- I; |6 \. t( ~" u3 w$ ]: s#include <mach/mux.h>
, S$ G% w }8 x% O% Y7 [
3 G3 K# q+ w+ d. S' {1 P#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" l. C3 Y) M' A+ s
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% t2 _4 c& n0 {" O( d
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) @- w/ \1 p( r$ d6 j
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! v# t; C- q# B/ g: r, k% k
J. l9 d/ ~8 h% M8 U/* assign the tl som board LED-GPIOs*/( G. q8 p# h/ c6 h/ V
static const short da850_evm_tl_user_led_pins[] = {1 }3 A+ C V0 j# {( H
/* These pins are definition at <mach/mux.h> file */! {) K n1 X: B# e/ _
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
o7 f. b2 i# W( p/ g3 c- n -1
$ v U/ R4 _& D" j" e1 |5 m$ ^1 ~};
' |8 J4 p$ J ~4 P
g, m; z% P) y, f0 `static struct gpio_led da850_evm_tl_leds[] = {; P9 G. o7 J7 C& D% C
{
5 E4 ]& U) n; q6 y .active_low = 0,
1 F5 _% ^4 }! d2 B .gpio = DA850_USER_LED0,3 y! c7 D- b$ d, }9 R5 N
.name = "user_led0",4 k6 n' s, g1 ^8 i+ D
.default_trigger = "default-on",& A( T% m: ]7 }- U+ a, I
},
+ P3 U7 d* ]8 x0 j {
) M, E6 t8 l. B2 P* O$ Y6 z* w .active_low = 0,
( N+ y3 g! k$ K `# o1 A2 o. V3 _ a .gpio = DA850_USER_LED1," C( R' A8 o% _6 |7 [6 `& }
.name = "user_led1",
( j2 y w9 X2 Z2 `' f .default_trigger = "default-on",% }9 d7 M* H5 ]# v& |
},/ ?1 j. u/ N8 [" h$ S, c1 ^
{6 Q7 [. G( Q5 O* Y! F4 u
.active_low = 0,
3 e5 o6 b. r$ {; o# Q% X .gpio = DA850_USER_LED2,
* l6 ?" a5 i' ]; q2 _1 V# N3 G; E .name = "user_led2",9 a% W; h; ^* @6 @, F8 S0 V) _
.default_trigger = "default-on",
, z7 m J& p# A( s, `+ C% m3 ~( e },
$ e% e! t/ R) u {( G o" B7 v+ d0 c
.active_low = 0,
* R: s+ S+ g: C% o/ { .gpio = DA850_USER_LED3,
7 N% O R( G. \& s8 @* @- W .name = "user_led3",
; Z3 ^1 ^& T, {+ `/ Y: z8 I, O% i1 @( R .default_trigger = "default-on",
- F( f) G& G4 Z: k },7 I- J4 {8 c$ \% V2 C( r
};% H2 Q! Y4 V- `; Y3 v. o% e
# H; C, C: r1 H8 z' z& t: Fstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" R2 X9 I! ]/ ~4 I" A% k: o4 Z .leds = da850_evm_tl_leds,+ k- ^. m. v. q: w+ G
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% c# S% r3 F& H# {$ p};. ~, M; f6 r& B9 s" D9 H1 \( g1 m# X" r
0 i- s1 Y: `" L
static void led_dev_release(struct device *dev)
, o' |4 Y0 W0 Y6 `{/ M. W* T3 N! A+ x+ f% ^5 f# a+ W) c
};
' e0 q4 \+ }8 n4 v0 O' p0 T- r
& _; d5 x0 ~3 U% R) sstatic struct platform_device da850_evm_tl_leds_device = {
- j% m) ?& y/ c* \6 V .name = "leds-gpio",
) ~+ T" V. E% v7 b% N6 n .id = 1,
- g0 p2 f U0 C6 `+ _* i+ A .dev = {" H# ?# M& |# v' n6 e1 p6 }, o: o6 s
.platform_data = &da850_evm_tl_leds_pdata,
w5 }5 R4 S; N .release = led_dev_release,
8 L+ z7 j. |$ X6 ] }% o" w9 M0 ]9 T0 E/ \
};
2 H' j" u8 m, r& ]
- I. D0 _, u$ T; e: p4 e$ ystatic int __init led_platform_init(void)
5 Q# s7 y; j/ z# L( q{
0 P. G* O0 L! V0 |5 e int ret;: [4 K6 u; a. B+ Q- V) @
#if 0' `2 z3 Y' f" ~5 d! X. L. [
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ G) R% g# ?: w$ j7 N4 {" H if (ret)3 n" S6 w6 r* A+ N5 C
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"" I8 x( Q# U2 z
"%d\n", ret);
- I Q2 t; E' b- u( J#endif
2 e8 B7 C( R6 t4 N ret = platform_device_register(&da850_evm_tl_leds_device);
) H+ \9 T4 x4 G% h. `$ j# x+ g2 S if (ret)
. `' Z5 P5 `9 M, L& v, F- q pr_warning("Could not register som GPIO expander LEDS");5 T, E& H7 I6 ` a
else! X2 T5 O+ M/ Z5 |- O
printk(KERN_INFO "LED register sucessful!\n");
9 o2 E; u. U9 a! ?- A3 C9 c2 a
: d5 D! H; I3 }2 @& V return ret;3 X" C5 a1 B, M Q: S' M- `& O
}% p0 t' w$ Z0 C6 F$ P
( P5 `6 W$ B- x; k# `) {* rstatic void __exit led_platform_exit(void)0 m1 B) C Q8 w: C' u, U
{2 @9 u, [3 ]% J7 g# e
platform_device_unregister(&da850_evm_tl_leds_device);6 K8 j8 P. |% I! l3 h" m8 N
( N0 t p" }: E8 Z8 C( j- o& | printk(KERN_INFO "LED unregister!\n");
6 c* u1 R% O; ~}6 T' N. u d5 K$ O( I% i9 i. u+ ~
% ^6 s) Q6 ^) f& o0 `! S ]( @
module_init(led_platform_init);
; v' t9 L1 `$ smodule_exit(led_platform_exit); h3 S; _0 i- c& W8 t( ~
- G4 R! R- Q& r* SMODULE_DESCRIPTION("Led platform driver");
5 s3 I4 `! R' I' M) xMODULE_AUTHOR("Tronlong");7 O; _/ ^$ D+ Q9 L
MODULE_LICENSE("GPL");2 v+ z1 d. Y, i. p' Q: ?
. i5 Q& H( d; L+ P2 d
|
|