|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ J; c2 f% c. w8 W! F#include <linux/init.h>% g4 m5 a4 I( Y2 H
#include <linux/module.h>
- v0 O( q$ G) h1 ]5 l# {#include <linux/kernel.h>" K3 D6 T! }/ R. ^, w
#include <linux/types.h>! t* J/ w# m3 D n) M6 d
#include <linux/gpio.h>
" Y, k. D- y: N, }8 _( A#include <linux/leds.h>7 D4 C8 x# ]0 X3 n
#include <linux/platform_device.h>& O/ r }* B% {
) V% Q; `; M+ T# t5 z; D1 t#include <asm/mach-types.h>
- `3 b, e, v' |; |: K$ |. r#include <asm/mach/arch.h>
0 k5 m: A n) g# n. s#include <mach/da8xx.h>0 v0 r6 j) l% l) Q$ E
#include <mach/mux.h>, {. z- L7 l1 z/ F
& u) j$ `1 x- E0 p0 W
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
# w( W7 n( V( y @#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): d- }7 r2 U2 m1 G5 C8 f
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1): b: o" u4 X' `5 V
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; } @; A+ g* a, n2 W: l
2 H" ]: ~% E4 L# X$ d) O, y/* assign the tl som board LED-GPIOs*/ j3 ?; W7 r3 H/ J
static const short da850_evm_tl_user_led_pins[] = {. k. z1 `- h* v0 L- k
/* These pins are definition at <mach/mux.h> file */5 z6 T& p* {! d
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 E* k" b" D: g& i8 e. z -1
0 K! U4 N0 \& p* p4 v# B};8 k: z9 }9 l" O9 {; ?% ]
( [% w8 W$ A$ m ]
static struct gpio_led da850_evm_tl_leds[] = {
) a3 L* Z& |5 U3 T+ F2 v( J+ Q {5 b* z6 _1 ]9 k: Q" u+ m
.active_low = 0,
# {& U/ b' g2 W- U .gpio = DA850_USER_LED0,
- b" H$ r% F Q! v+ U .name = "user_led0",7 ?# t2 n7 L8 B% }/ [6 L7 V/ `. J- ~2 f# p
.default_trigger = "default-on",8 C& Q* n+ T" r8 i7 n9 k
},: Y+ ?( p, `/ Y
{2 e" G0 y1 q; f
.active_low = 0,; v' e2 o1 ~. m
.gpio = DA850_USER_LED1,
( D' A8 i' d- s .name = "user_led1",! g! o7 d( V1 i" x$ k; C! ~) ]# c4 e5 u
.default_trigger = "default-on",
% p% B% a2 I& ~ },, F' t2 r( C1 |# Y
{
9 L8 B+ p9 }$ d4 C( n! L/ w .active_low = 0,
# j: I! T% C I, w( R2 x .gpio = DA850_USER_LED2,+ x3 D1 x2 p+ Y7 \. z+ u
.name = "user_led2",
- q. ?; N+ ^# o: Q .default_trigger = "default-on",. Q, y; |6 u% N/ ?. O% k
},
% t$ i. X3 Y" q! l {
' l0 f5 B% L% O- O: f& c .active_low = 0,
. w6 H' p% L2 Y6 C# f .gpio = DA850_USER_LED3,$ w4 i- Q+ o. Y' O, s8 w8 @0 X
.name = "user_led3",1 I% o4 e% R& i0 }1 ]/ N) L# s, ?
.default_trigger = "default-on",
! Q2 C: [! l* ~# E" M8 F/ f, | },7 D6 Y) ?3 ]& x5 j! @' z. o$ n; o" }
};
; j5 E1 G, M8 o2 c2 V! R# O: S* {% I9 m" v4 |
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ L0 g$ S5 F; x2 t .leds = da850_evm_tl_leds,$ G2 F9 L4 m" b) f9 W* \
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 @9 S7 r1 h6 V9 A7 @6 X$ Z1 }# J
};4 R: @# X: a! Z/ C* j" Z. e6 v7 `) [
6 z& p. F* o; `( H8 q
static void led_dev_release(struct device *dev)" Z2 I/ c1 c- a4 @% J! n
{
( D1 }) K) F* D% P2 c5 R};
9 Y9 c7 }1 n0 ~3 N' n+ r0 Y% H9 _6 L% ~" L' i
static struct platform_device da850_evm_tl_leds_device = {+ h6 T+ g9 X( G9 O, A
.name = "leds-gpio",) L; H: o0 k# Y4 U
.id = 1,/ ?! J1 K* z0 Y( e3 Y6 K" U
.dev = {/ m2 Q: u, P c& h
.platform_data = &da850_evm_tl_leds_pdata,+ K ` [& M0 M. ?1 o3 G( V* _0 p
.release = led_dev_release,
$ L* D; Y: C$ {* C. J }
6 P, b( ]7 y4 z- R8 K5 a};
% I, D+ `1 g. G( ?8 u& _9 B4 d( C6 P* C) I V, A% A5 Y' o, m1 o
static int __init led_platform_init(void)
6 w! k2 ^; t( e{+ P7 a/ h# N( Q
int ret;% }# M3 t4 _; E: y8 L& Z
#if 0; ^7 f+ m7 J( R
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);7 R) N: g% k; X W
if (ret)
& p% r5 V/ T* Y pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ x2 ?6 ]1 z+ O8 }+ \ "%d\n", ret);% I6 K& j6 x3 w; `& R
#endif
}7 S6 \4 R# v& d& g ret = platform_device_register(&da850_evm_tl_leds_device);
/ ?5 s' ^% m# w2 ~1 ^: y; B if (ret)
0 M$ o3 t6 v7 {2 X; ?8 @ pr_warning("Could not register som GPIO expander LEDS");
% h9 E& L; G7 v7 A% K% ^ else
( b3 W w9 F9 t2 O, {: p printk(KERN_INFO "LED register sucessful!\n");( q9 I$ }! h" i) z' ^
, v3 @3 n. v d6 k% e9 [
return ret;
7 E% o, ?) j$ Z" x}) V9 z/ A- l( h, {5 I
7 z5 p# T! R0 v* Z* dstatic void __exit led_platform_exit(void)0 d6 Z; d. t7 ^9 R
{6 W, d5 `" i3 S ~# {) A6 C
platform_device_unregister(&da850_evm_tl_leds_device);
! f6 f4 ~ |5 P0 {0 O% W/ B) @1 q: x' f; Y' R& a, C
printk(KERN_INFO "LED unregister!\n");
3 ]2 K: q! \5 o) o0 A8 w}- R" C) {. {8 H% o
+ ^) d* u$ ]) j: ]
module_init(led_platform_init);7 `* S" u" o/ R0 T! L
module_exit(led_platform_exit);. x5 m* k3 v1 W2 [6 t' f/ R% Q+ q
- v5 Z% c" I+ Q" n( [MODULE_DESCRIPTION("Led platform driver");5 g2 R5 V1 o* C" h6 X7 s1 x
MODULE_AUTHOR("Tronlong");* R- U" q" Y _! w* J& ~$ _- a: T/ {
MODULE_LICENSE("GPL");
$ L6 z. D2 N8 [8 l9 _% n( R; ^7 r" o+ T
|
|