|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% G }9 S K3 Q4 W, X4 O
#include <linux/init.h>1 B9 l2 e/ n& R" R1 `9 U
#include <linux/module.h>
/ B {% z% |( k/ e; J+ w; {0 V#include <linux/kernel.h>9 g; ?/ y5 t! {4 |& B
#include <linux/types.h>% j2 ]1 t- g! p0 P, {( N$ @$ l
#include <linux/gpio.h>
6 r/ `2 o% g8 A, n/ |" L! `#include <linux/leds.h>' p% q. w4 c2 m. b( I Z* _
#include <linux/platform_device.h>
' [. ?" X! l; N5 L
1 ~5 |& q% N1 I$ Q! L#include <asm/mach-types.h>
- F7 ~8 C% H C/ C5 h& B#include <asm/mach/arch.h>/ T( V- g$ R5 t
#include <mach/da8xx.h>+ s3 b# g! x7 V
#include <mach/mux.h># q- K9 r6 h. ~6 I. J) Q
[+ h1 _, X, `) `) u M E3 }+ c
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" d/ b4 h i% x; i O0 q5 j0 |
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 u$ \. O5 L+ Q) Q8 }! L
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
/ o6 }, F9 I5 ~4 G#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 \2 A$ S. ~2 o( x0 ~# Z
8 {+ x3 Q8 c, m0 }3 f/ p5 Q: t
/* assign the tl som board LED-GPIOs*/
2 Y [7 U$ d# Sstatic const short da850_evm_tl_user_led_pins[] = {
0 M' W% @/ h7 l/ ? /* These pins are definition at <mach/mux.h> file */) O7 ?. u1 |9 }- E' G' L6 t. `" z3 A
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 a& V' U' N- O6 g -1
9 n0 Y- ~5 J1 ?# ]' H4 _};0 }5 h2 d3 U$ g6 [/ e2 G8 E
- G; N5 E% y: A0 b* _
static struct gpio_led da850_evm_tl_leds[] = {
( Y4 f5 f. C7 b5 W2 ~' G5 r$ u& p {
9 i: F& B6 p! L* z: e; b .active_low = 0,4 `5 X$ z- p% e) y* H1 N
.gpio = DA850_USER_LED0,* T M: K4 y/ c; } n2 A) h
.name = "user_led0",7 j) U' F; o. B) Q6 Y2 m$ T B
.default_trigger = "default-on",0 X! A$ ]0 f$ a% a5 p
}," O/ {& }) U& i: H( F( m- n Y
{
N) L I+ S* j8 a .active_low = 0,
$ \% [) _2 d: H* Z6 I& z+ [ .gpio = DA850_USER_LED1,
8 e. l9 r. j. r .name = "user_led1",
+ t7 `- C/ a$ M; Y# w* H .default_trigger = "default-on",
$ a9 Y" L) [. ] },6 ~( K5 t9 W: f
{% v; {: A7 k$ \7 z" ^
.active_low = 0,3 |6 z& z1 t5 ~- x. V, l
.gpio = DA850_USER_LED2,
8 t S* u; L B/ j* q" P' B' X" E% ] .name = "user_led2",- ?3 Z$ B) G" |
.default_trigger = "default-on",$ N+ O" P2 Z$ U6 v
},$ [8 U# K: P1 H2 P1 S B( |# J
{& V* ^) ]' s$ G& W
.active_low = 0,
* N# i$ e3 U0 S; _5 f; Z .gpio = DA850_USER_LED3,. P, h/ _; n+ x5 i/ Q
.name = "user_led3",
! |7 G4 }' }& p .default_trigger = "default-on",% ~- q& i1 O" \4 ]. o+ J
},2 X6 G+ ]6 d: b$ m H+ x
};. Q. t8 ^& y0 G$ r+ { p9 r" i5 g
2 Z# ^& f$ J2 m2 c
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 k6 L, P* U. r" R
.leds = da850_evm_tl_leds,$ Z9 ?- {6 v" ~2 N
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
F9 b {* O7 r0 K. J};
3 f, i' F& k/ f8 m0 \) H; M" f. ~) N6 k- ?
static void led_dev_release(struct device *dev)1 _8 \+ `9 f6 V' l" E
{, d% Q- F1 S/ t5 O" T, p
};" Y3 ]' D2 v* H' V8 J
+ W4 V2 ^9 q/ z y
static struct platform_device da850_evm_tl_leds_device = {
4 i( l3 k, |3 D7 g5 C1 i* T .name = "leds-gpio",
' s* J: v$ Q4 O# p .id = 1,% ~$ ^ o2 l9 Q" B7 [; N) E- ~
.dev = {4 P' c' Q( A5 _9 o
.platform_data = &da850_evm_tl_leds_pdata,: y5 x( ]1 L7 `8 \5 B
.release = led_dev_release,
, B+ y- u, A; E/ p' ]+ e }7 Y" r8 `4 [6 }: A& b
};
$ }8 X- v+ M* K7 A9 A3 B+ Y0 i3 f- Q; q' w
static int __init led_platform_init(void)
- O/ c$ q, g$ D W. T{
9 P& G$ v2 ^8 Z% }( _) a int ret;
* K7 z. B. N c. q+ Y5 r6 J#if 09 P% y j( H8 N. C
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, v, O, a2 ^$ H, }; K% P0 ~ if (ret)
( q! r3 f( |% i8 H; d pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 N7 h' ^4 I3 ~; H "%d\n", ret);
7 e/ n+ f- l( |8 [" d- L9 s0 T0 ~1 [#endif) N; i! z1 p7 d) r2 a- W
ret = platform_device_register(&da850_evm_tl_leds_device);
, t* |# B1 z9 X3 e0 T% v. J if (ret)
# m. ?$ R6 d3 Z# t) }& a pr_warning("Could not register som GPIO expander LEDS");( p0 w9 O! G+ b/ ^/ S- }/ f
else, _& `. e% D2 H
printk(KERN_INFO "LED register sucessful!\n");
0 l x- y5 v0 X/ X: U7 k
: h+ e: r: J' x" x; v return ret;
" \0 M9 m' P0 F, l; w}
7 w! V7 T6 W3 p% z2 {0 n
& s9 {) H- O+ @static void __exit led_platform_exit(void)$ m! M" o5 Y0 M& f9 z# I
{
5 f7 b" ~3 J: R! d platform_device_unregister(&da850_evm_tl_leds_device);
* ~, u7 L5 |" Q1 A
2 a7 _# k! A+ ^* W5 i6 f- t' w printk(KERN_INFO "LED unregister!\n");; ?" w, n2 A( f' d8 q$ H4 F0 Y
}
+ o& {& ^1 L/ c% R- e) ~5 V
: {' n; o4 _1 L' x- U5 tmodule_init(led_platform_init);
' b) m/ `. I2 {module_exit(led_platform_exit);6 k2 E" C$ J7 |5 B+ [
+ O# R; _, B5 t! l7 g. AMODULE_DESCRIPTION("Led platform driver");4 g6 A) K X1 X) T2 N
MODULE_AUTHOR("Tronlong");, x8 I( u+ u. ~" y9 v+ G
MODULE_LICENSE("GPL");
; L. a3 ], }- k0 F/ ]' `5 W: ^) f* b- c2 D! c/ f. U
|
|