|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& Q$ k. t/ J3 d4 z. |6 a4 W#include <linux/init.h>7 Y( F$ ^; W. s6 f$ B8 _
#include <linux/module.h> [$ _7 D2 C# F
#include <linux/kernel.h># ~+ I9 U4 L$ o1 R1 ~# r; C7 W
#include <linux/types.h>! m0 a9 h# |8 S4 F* X! l! J5 l" `
#include <linux/gpio.h>( e$ @2 s2 u; a
#include <linux/leds.h>" v& i6 I3 G0 |) ^" q9 u# c2 y
#include <linux/platform_device.h>* B# \" F( Z) Q9 v: C
9 w1 a7 W' Y" c, @' [% O; P
#include <asm/mach-types.h>
; n" q0 I5 r8 O9 J' w#include <asm/mach/arch.h>+ T) w) f& U3 @- a" c
#include <mach/da8xx.h>
; d% k! T/ M M' ]8 y#include <mach/mux.h>
, ?1 [& `4 s) J; A7 {# S/ F! d, v0 d5 ~" a
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 v, M& G! } V( E6 [#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 w. Z. y9 H( f, d6 X l#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( R) R; i: ?: v9 |( |( F#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 X& t5 A. v8 g; _+ }) b! y$ k# N8 s
/* assign the tl som board LED-GPIOs*/' a( V6 T! V& B1 `, [/ {
static const short da850_evm_tl_user_led_pins[] = {5 j/ i, O, H+ e& N! H/ w
/* These pins are definition at <mach/mux.h> file */
9 g' F1 m/ y/ L/ J DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% [7 L3 _/ R5 _; N& v7 ~! p
-1
8 c7 Q' m4 z u7 u0 z) g};
1 n7 g9 m# K" d2 N) p
' t& v8 C1 }: ~2 a; a: ostatic struct gpio_led da850_evm_tl_leds[] = {4 E4 U; L3 F2 R0 D0 |: \" t1 i1 @
{
! u( a; Z* A* h% p* T5 } .active_low = 0,
2 R) C$ t- n4 T9 i# P# U( ?' v1 [ .gpio = DA850_USER_LED0,
* ]" q. f- c0 X- \2 s; s .name = "user_led0",: r! o5 P$ t- _, k2 }
.default_trigger = "default-on",
; I* q: }1 @; x* r },
! y/ M, t# V5 O/ J. J( R* w* [ {
W3 ^4 L* I; H: X .active_low = 0,9 A8 _! C' ~9 ^) Q
.gpio = DA850_USER_LED1,
. @3 p5 y% C* d2 Z0 A' k, y, @ .name = "user_led1",$ P% i' K, u, P' {5 ~
.default_trigger = "default-on",
3 T4 @1 s! ]. F6 c# j+ c1 N1 k },( [1 k W! ~7 {5 }: F
{3 p9 j. P' `* p8 W! d2 i+ v$ @
.active_low = 0,
/ l4 z4 G8 W& ]+ D& U2 _ .gpio = DA850_USER_LED2,, M/ j# n1 @. V8 t" Q' L8 E$ _
.name = "user_led2",0 [, L, o/ t$ D9 z9 V+ _0 r% A
.default_trigger = "default-on",
7 I. r6 G9 k0 F0 g- K },; _4 ]2 X7 c5 P; c+ }! i6 H4 X
{% i8 y6 K* I" N" P% U& b! @2 j
.active_low = 0,
% S8 A1 }' `3 _+ }1 R .gpio = DA850_USER_LED3,
- D( h! C8 d% m/ |1 y .name = "user_led3",
( `; G: }6 v+ L .default_trigger = "default-on",
% U& q# o8 x9 Y1 c5 I },* n& e; D3 n7 z% W3 w! H& X
};0 y( N: Z! |- r; ?
7 g& ~2 }' _' T& o1 z: o) N" T. i
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) \+ D" [; i) |
.leds = da850_evm_tl_leds,
8 ^- S8 Y: M' ^/ |( F- _) _5 C( G3 S .num_leds = ARRAY_SIZE(da850_evm_tl_leds)," x2 d) I& Y" o
};6 X- ^5 }& r4 L' H* V
+ N: B, |7 a6 a) {$ M. P
static void led_dev_release(struct device *dev)
$ c5 H3 x$ q; M7 _# r1 P. s1 z{
, M. u# _% c6 d+ g};3 W% T g$ C: m4 v! H+ B7 p1 f
( w! B% G. F {# E5 Kstatic struct platform_device da850_evm_tl_leds_device = {4 W/ B1 v j! l3 O4 l! Q3 j& f
.name = "leds-gpio",0 k+ O: ?2 Q9 l8 M: j' H4 R
.id = 1,
- N8 S3 W. f: N6 W+ h4 P7 ~ .dev = {8 {! O# ]) W% K% c
.platform_data = &da850_evm_tl_leds_pdata,3 e% q- }% J" ?
.release = led_dev_release, r7 S, ]$ v2 ~7 |$ B: ?& z0 X# i$ o
}: Q. i. e, L: t3 X8 M2 t1 \
};) B% W4 q. R" B( C5 `! q
. f5 o; `: G# z9 V7 b- Gstatic int __init led_platform_init(void) x/ W( ~0 \% p/ }9 G
{) `# R; y: _$ X& I% g8 P$ ?
int ret;
+ l, z: z/ n' P4 R#if 0 {9 m: }0 U/ O1 `/ e) z% z* l- h+ Z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' u, H$ Y) y" B7 Q+ A
if (ret)
8 l4 [2 l" z: O& u pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& ?& i! @3 F, s3 m6 b' q "%d\n", ret);
- Q# U F$ p' u#endif* y$ j. J& j& w9 M
ret = platform_device_register(&da850_evm_tl_leds_device);& H- G/ K( I5 v) M! E
if (ret)
% M" @# Q4 U: n% |' f pr_warning("Could not register som GPIO expander LEDS");
, |) l7 h0 j) J& f5 S" x4 q else' x$ A. P: @2 ?# M3 a% a
printk(KERN_INFO "LED register sucessful!\n");
1 s O7 Q' Z7 h: {8 K2 X' @! k: M( B0 f
return ret;( Q6 ~1 L. c) X9 G$ b4 H
}% E& ]3 m2 f/ G H1 E
! T" o1 j ^4 \6 B
static void __exit led_platform_exit(void)* P+ n0 W: C8 f( y( g& ^
{
+ t/ k" K1 K; L, s1 v platform_device_unregister(&da850_evm_tl_leds_device);
! w+ o3 Z! [$ _- `* B9 o4 P% t. K8 V0 ]; ?3 p" j% X/ h4 d9 J
printk(KERN_INFO "LED unregister!\n");8 K2 @" U1 J! i, j; H
}3 C. Q8 u: X" c d# F& @( Z
f! M( u4 M' z+ i$ lmodule_init(led_platform_init);
5 y" ~7 z5 ?) Y1 T3 smodule_exit(led_platform_exit);
( [4 A& Z4 v j7 \+ @1 N V9 ~# ?3 \) ^) U2 S& w
MODULE_DESCRIPTION("Led platform driver");
) I, J: s3 b/ A7 w! wMODULE_AUTHOR("Tronlong");
5 C1 L3 I$ M, N N; |" ]) ~9 _! a qMODULE_LICENSE("GPL");
$ \/ k6 ]/ _9 [; {7 d. F; A: \! u& L5 V7 V0 f
|
|