|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ a, n# ~# ?6 S5 B. P9 s#include <linux/init.h>
3 f3 _7 d) m& e o! b! P#include <linux/module.h> @6 k- l8 p ~- G
#include <linux/kernel.h>
0 ^! `4 B9 T# M1 C7 r: ^( |6 _#include <linux/types.h>; C/ f O: r% F
#include <linux/gpio.h>7 x$ S- ?4 U" |# U0 t! B
#include <linux/leds.h>
% o5 g3 O5 W1 R6 T! t$ |' _( x" @4 b#include <linux/platform_device.h>- u1 ^8 P# L8 |9 s; Y1 d) G
- Q5 J" |) k$ `. D
#include <asm/mach-types.h>
' j0 }& p8 {2 s* @#include <asm/mach/arch.h>
" P0 \, w( q$ a* c+ [' b#include <mach/da8xx.h>
: K+ _7 _& o) G: L- X0 {#include <mach/mux.h>
' a& ]6 _7 X' O: f' W1 B8 R, w4 k: A; K, c# \$ B% Z
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
|3 _3 H5 `8 |) J: r& a#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 P# S; |4 t' a& D+ g6 `3 ]#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 D0 z6 ]: V2 Z2 c#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 n- e1 G% C9 J ]" C
) }/ w- e4 j5 ^' H3 H/* assign the tl som board LED-GPIOs*/1 F& Q& {% S3 v' B* j( Z* J
static const short da850_evm_tl_user_led_pins[] = {
& N' d) E: K1 A /* These pins are definition at <mach/mux.h> file */
7 r ?: S7 M/ ~ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 X. }6 T+ o- u _. }, j -16 N! G( x7 A$ G' ~' A- u! e0 w
}; n* z# V% I+ F9 M/ `$ e
3 m( V2 c: i5 {) j5 g/ d9 ]$ K
static struct gpio_led da850_evm_tl_leds[] = {; E! o r/ j# j& q
{+ g6 g; W0 V4 z8 G8 j) R. p
.active_low = 0,* n; \7 b$ z# Q) g
.gpio = DA850_USER_LED0,
1 y' k3 d# z: k5 N) W2 z: p0 v .name = "user_led0",) k. h' U0 ^" H6 Z0 o4 s
.default_trigger = "default-on",$ J3 r$ e# u, [! E
},& D9 s/ j$ `9 z+ u0 I
{
: F3 ]4 f/ y" x: r! r* K+ g .active_low = 0,
3 g ] x' e4 x .gpio = DA850_USER_LED1,; I6 X: Q3 `/ D( i# I5 t
.name = "user_led1",. B, j3 C) R5 {& @$ ^- M, a: T
.default_trigger = "default-on",8 [9 \# Q5 s4 R, o
},. x" V4 g8 s' o$ b' m# t5 P6 z+ A
{' H4 Q0 C6 s+ f& b
.active_low = 0,
2 L3 {, K6 T( z! U .gpio = DA850_USER_LED2,8 n% s" t+ k1 ^, |$ m f0 A
.name = "user_led2",+ j6 g* y; h3 N. W( e: ^
.default_trigger = "default-on",5 f) d8 [' q. E
}, g& G V6 q' _8 I6 s, Q1 G
{
8 J/ I9 ?# R. U .active_low = 0,
; P7 U* {8 q5 r2 m. b* Q .gpio = DA850_USER_LED3,- `3 Q8 W5 s7 W( r& r
.name = "user_led3",6 ^0 W k0 v( y& p- e
.default_trigger = "default-on",
' i# F% g6 g i. p) u },
6 E, d' Q8 Y1 r0 b7 S1 A2 P};7 W1 ?% p1 a8 M
8 `' j8 I4 M2 m% q7 ~ Z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: L3 N7 W9 f' G; |3 W0 g1 m$ F
.leds = da850_evm_tl_leds,
* k8 x6 X, H# f$ W+ S) h .num_leds = ARRAY_SIZE(da850_evm_tl_leds),) U5 T( o* E7 R0 D6 C% E
};9 e9 }# d" r! [5 D m$ u
9 k$ f' S+ k% \; ~6 C1 V. e
static void led_dev_release(struct device *dev)) E6 V6 I. Z$ I V0 z1 I+ t: F
{: Z8 {1 _# Z8 A9 ?
};2 G' J- q0 b. ^5 X6 c) M
$ c3 `( r' q' c' r estatic struct platform_device da850_evm_tl_leds_device = {
6 @2 s2 Z; q/ S# ? .name = "leds-gpio",
; {1 _0 ]5 x$ z) L& r .id = 1,
/ P+ [; j& O& r' `' l5 j# Q .dev = {
5 J. i4 K( i5 O/ E. D .platform_data = &da850_evm_tl_leds_pdata,
' T6 f, i _$ G, P) s5 S7 X .release = led_dev_release,6 @8 ?: d" V1 W& L
}2 \: l4 |! b; I$ M; i
};
# g3 F) P/ D* }- Y5 \/ W" _, U% ?7 j
+ y$ H2 {8 E9 f. istatic int __init led_platform_init(void)
2 _0 \/ C! a5 s0 N% o* R# c5 S{4 t! }! L; b' R! d0 u
int ret;
- J# W; T. X! c2 R4 J5 @#if 02 }" ]( f8 [6 M* z: H# h" C! \
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( t! s" X. K. j; x/ x/ d
if (ret)
5 l: P7 i% {9 D; Q" ] pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 \3 S0 _8 V" `" H0 g5 S
"%d\n", ret);% }' L4 V! u& B4 I) E
#endif
* T; M ]7 `7 F: h& J ret = platform_device_register(&da850_evm_tl_leds_device);
' ^& M1 ^, i, m6 V- G: x if (ret)
$ V' P$ P1 s- Q$ e$ [1 l8 u/ [ pr_warning("Could not register som GPIO expander LEDS");
! L& v8 N2 ]6 e( E else" k) `$ X% X% n; F
printk(KERN_INFO "LED register sucessful!\n");1 b7 ?; t% N7 F7 V% }2 u
* p4 H7 u U; }( b5 W- ]3 n6 Q
return ret;
* I( ~2 N! b+ }! B}1 _8 w( j S \1 B9 A9 [$ H$ H
; v8 b0 Q4 n0 p) R/ y& y/ v0 ?: D
static void __exit led_platform_exit(void)7 n0 \0 M- O6 q2 `
{& W/ Y* t$ n; W6 `+ B
platform_device_unregister(&da850_evm_tl_leds_device);1 x: ^2 x' w# m4 Q. v
' H4 e7 [' |8 i5 P printk(KERN_INFO "LED unregister!\n");9 b. `# F9 h# A- a: K
}. \: v ^6 {7 @) J0 N* ^( o; R l* O6 W
8 s9 [0 K3 @0 K9 gmodule_init(led_platform_init);
) n& [8 u5 p3 [5 ]/ b9 P+ Omodule_exit(led_platform_exit);
# }( m7 \, V4 f$ M3 b0 j. H+ C# k$ k @8 D. e6 k
MODULE_DESCRIPTION("Led platform driver");7 x; d" m' J6 _9 @
MODULE_AUTHOR("Tronlong");
" h! X9 A; e- L3 A1 AMODULE_LICENSE("GPL");$ w$ i3 R: F5 H$ j
5 b6 ~$ J$ b' x7 \2 ?
|
|