|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' C: P" A* u" u1 z& `. A6 p1 R
#include <linux/init.h>% T- { {: v$ |
#include <linux/module.h>$ V' I0 C: ]: T9 S, ~* Z* d9 }; n b
#include <linux/kernel.h>
* A* r- S# o, s$ k& H" h#include <linux/types.h>- F* l# @2 |0 s: w
#include <linux/gpio.h>
8 U7 f6 z: n. \1 [" v/ `/ o#include <linux/leds.h>
; w: k$ S/ ~4 |#include <linux/platform_device.h>; |% {3 I0 L4 I& C) }) O& { ~9 W
Q: Z( C$ p/ `# x. @- ?3 K0 I#include <asm/mach-types.h>
/ `" }! \$ U$ ?4 ?$ Q#include <asm/mach/arch.h>
C0 C E' B. M/ f6 r" q#include <mach/da8xx.h>. J3 @" c0 Z! p
#include <mach/mux.h>9 J9 T; b; _9 W
5 t: U, Y: ~4 X/ ?* H: d#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& Y1 R- Q& C2 k$ b- s/ P#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 [4 h" O5 B6 @) n% b5 z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
: e( u' m0 h3 u0 }- v& l* C#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ y1 w8 t0 D; Q1 e7 Y8 a; v- g9 {4 x$ P8 t' b6 {: Z
/* assign the tl som board LED-GPIOs*/
" k/ w1 K7 T: J* xstatic const short da850_evm_tl_user_led_pins[] = { e+ u0 j |2 t4 }* z1 r8 d2 ~8 J
/* These pins are definition at <mach/mux.h> file */
# W4 n$ k" d F% a7 j DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. f' j1 ?0 F9 u) l! F
-1
5 [" X# D: _8 }9 a- Y1 N};) Z4 [2 ^* S7 q4 I6 G" E
2 |( X+ T6 t2 Z4 O- z+ F
static struct gpio_led da850_evm_tl_leds[] = {
?1 N) `) Q# R& c# p {
, W% G2 l4 p# D) ?8 ]1 J! Y% Q* G8 X .active_low = 0,
* {' A) S1 D7 X8 n3 l; T .gpio = DA850_USER_LED0,
' X' u2 |, z# C0 q/ ^' X8 z6 p .name = "user_led0",5 \2 U3 [* l$ a H) b3 J- _
.default_trigger = "default-on",! \, \. V, q9 W4 y- C7 a, G
},6 ~/ a2 D; {* z; I( l8 B
{
0 Q# g$ }/ h& e+ b6 `3 m" { .active_low = 0, [; P, v! \8 p9 u. ?: h# q" ~
.gpio = DA850_USER_LED1,
2 Q5 q" a& I" R! N( i: x .name = "user_led1",/ F: _( b& V. F. _8 j/ f
.default_trigger = "default-on",4 D' H; d, m- m7 ?* z! n( J8 n; l
},5 v0 d- {& o' q7 \
{
3 M1 N- w: N2 F1 }4 c .active_low = 0,4 s! o! @! G; m" V! f( b
.gpio = DA850_USER_LED2,
# W( f: H0 U! a8 o$ }. S9 r9 g .name = "user_led2",2 c/ k- h5 p! c( K* ?% f
.default_trigger = "default-on",8 I, A6 N$ d6 Y" B# w1 k( u
},* n* N5 G7 a7 [. l# M6 X
{
6 V# s6 `9 d/ z$ ~' ~" @7 O .active_low = 0,
' e4 ?9 o: H, s! ^ .gpio = DA850_USER_LED3,
: _) m3 p' k2 y) r# B .name = "user_led3",8 @, u* q0 }; C7 S: `3 Q
.default_trigger = "default-on",6 T8 f) i w5 u3 c7 e" G
},+ `0 y* f+ S1 u& R% U& y
}; `. J, _6 B) t& c- V
. ~$ N( _, t& |& T# U2 ]
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. `5 W! i: r! J$ [( ` .leds = da850_evm_tl_leds,
! s* Y# |7 @4 c" v0 m7 ] .num_leds = ARRAY_SIZE(da850_evm_tl_leds),; `" {9 A7 K; P, ^& h
};
{5 y, h! Q! G7 ?6 u* K' i( `! u9 T, ]
static void led_dev_release(struct device *dev)
, ]1 o4 d' f/ D5 T4 i' Q{- [+ l% l i; S0 g
};4 e3 m9 F) f5 B, T% f3 x! H
! ^4 h, y9 ?# l$ g5 O
static struct platform_device da850_evm_tl_leds_device = {
3 n7 {/ i5 W7 Y' M3 ^ .name = "leds-gpio",4 e9 Q* \9 I' k+ N% ?
.id = 1,
% }# b- Y- ]' Y# f+ r .dev = {, D9 F7 A4 i+ }
.platform_data = &da850_evm_tl_leds_pdata,
$ `# {6 z0 S( Q. n, S9 O .release = led_dev_release," e: M6 r4 q; F
}8 M/ c8 w9 N* E# _7 Z
};
0 Q1 f4 v) H; w1 W$ t$ M# v) q% U; J! T0 `5 M, B x0 k) R2 X
static int __init led_platform_init(void)
7 j3 Q8 s; y% P( S4 Z; j: t{% z7 }7 J+ U' B; K- w% }* u: K
int ret;
) Y& F2 Z) x. M9 N, i#if 01 K- Q- t8 x1 J0 g0 B8 D4 T# _! n
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: @7 H; A4 J$ `% p6 `' Z if (ret)4 J- j! C4 ], P! q9 M' I8 j
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
3 l) s; C( ~ \4 X2 R* h& K "%d\n", ret);
& R6 a* g, x! a0 I$ i. ~( X#endif
0 t+ A0 G1 m( I; b5 q, G ret = platform_device_register(&da850_evm_tl_leds_device);
; C: f5 M$ N2 P- r8 D: _ if (ret)& L! \) `# p* ?$ F% P {( ?" J) _
pr_warning("Could not register som GPIO expander LEDS");
- K I, P1 X& P6 }' P9 K4 R else# Q' D% w- l8 R2 K
printk(KERN_INFO "LED register sucessful!\n");
/ ?, @5 g6 `/ p8 Y0 a: J- S: G% s# Y8 L& p4 ~0 p
return ret;( ]3 m6 ~& x& c1 A
}
9 E+ W4 k7 G. B9 h& K! s {$ {. E# F8 w6 y1 ]" \* u' |
static void __exit led_platform_exit(void)
& }+ p1 ~9 I4 v0 T8 A{+ c, f2 k; Q3 c5 y4 Z; P' O& z- o1 a
platform_device_unregister(&da850_evm_tl_leds_device);
- d8 G9 ^4 m4 g1 l
p+ w' p* J( M' N4 u( h5 Z$ g% s3 @ printk(KERN_INFO "LED unregister!\n");9 L0 G0 S. ]) a5 E$ N, m; L: i
}) {3 ?5 M6 r! F8 f7 ^ r& T
# `9 Y' K; L% G6 emodule_init(led_platform_init);' Z: w9 T4 i0 }# D. K; U
module_exit(led_platform_exit);
& Q, X7 P) o1 C0 K7 I
5 w- @" \2 @$ zMODULE_DESCRIPTION("Led platform driver");
6 s! O: t# }7 x. L% K. S8 yMODULE_AUTHOR("Tronlong");
+ H" T+ {5 H; zMODULE_LICENSE("GPL");5 d% V# o7 I h9 w b, l3 C
. h9 c& N; k( Z6 {
|
|