|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 [! O2 v5 g0 z* J* M
#include <linux/init.h>8 B, L3 B) E& E( h+ c
#include <linux/module.h>2 {; z2 k9 s: J1 ?
#include <linux/kernel.h>
$ L) }5 t5 ~% z, @2 a, M#include <linux/types.h>8 P1 B! P1 I% P8 w6 d! F0 z0 Z
#include <linux/gpio.h>8 @, d8 i- l# o4 Q, n6 Y
#include <linux/leds.h>
" g' c" i' j1 r9 N. Y#include <linux/platform_device.h>! k0 j# S+ e$ T7 \# ?
6 Y+ P* r% I; }3 L#include <asm/mach-types.h>
9 Q$ L9 z2 I2 o% O0 ~0 }7 f' Y#include <asm/mach/arch.h>8 u% J- H1 u$ q& u# y# D
#include <mach/da8xx.h>
B. P7 A% t( J, H#include <mach/mux.h>
6 U! k9 d( r4 P ]) w1 u7 p& c) I% ?1 c6 ^: f; [
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( H) j$ q9 r7 q+ S- F, L3 G
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ x9 ?' s- Z6 }4 O- m0 A; o1 p#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 V; C+ E- s" C% o8 l& R1 B% ]! X/ |
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# M' l! E: ^/ @% C: J" g, C# m# e& c# `5 U6 ?1 l8 ^" a
/* assign the tl som board LED-GPIOs*/ z4 N+ ^$ }: S% G, ]4 e
static const short da850_evm_tl_user_led_pins[] = {
. ^: U% S, R" T0 J( n2 d /* These pins are definition at <mach/mux.h> file */
& v+ K7 N3 U+ s; q3 ^ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* F* ?3 q" l; E) W/ V$ ` -1
: m! P5 m8 U! Q/ J};6 k3 A5 U! q. O( G9 `4 `
+ \1 b& @( M/ U% u$ R
static struct gpio_led da850_evm_tl_leds[] = {
* r4 Y/ A: o- a; F) _ {
6 ^& G/ U; Z, H0 I* |# X .active_low = 0,4 I* d+ z m: Q( [( N/ [5 w
.gpio = DA850_USER_LED0,
9 ?2 I8 d8 k4 F k .name = "user_led0",2 `" w; a/ e1 v a: D
.default_trigger = "default-on",+ S/ `- ]# k( v9 p! f* p9 A
},
0 T' R2 X2 m2 j, g1 |) n4 F2 | {5 G9 ]: {4 N& h# K; g
.active_low = 0,/ c t1 ^, g5 {% u3 p
.gpio = DA850_USER_LED1,0 J9 ?" N0 L7 Q
.name = "user_led1",
. P. P& \. K5 ]0 Y! V; t- P .default_trigger = "default-on",& a) s5 f' B) j( j" G( J
},
m! W% u* m3 Q D. m {
3 _2 J' V9 _: W, F .active_low = 0,
! G$ Z" Z! v& k e6 N .gpio = DA850_USER_LED2,4 v$ {$ P# h& @
.name = "user_led2",
1 v, ?* e2 Z1 u .default_trigger = "default-on",
3 v4 F# P! O8 d5 W },# f) z3 h; ^7 i+ n; w2 v9 r
{" B. m! P0 Z# i; y- \0 n
.active_low = 0,! E8 L3 d9 ?: }) m9 T) U
.gpio = DA850_USER_LED3,
3 W. i3 C0 N6 T1 P3 X4 Z) A# W .name = "user_led3",5 ?2 {2 G- C& W! ~' x: E4 B
.default_trigger = "default-on",1 S9 g0 a6 `) _0 N
},
& j/ q' j* j& P$ _* w};
/ ?$ L: m) W( `3 {+ c8 q, V( o1 P5 ~3 t" D. |1 m
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: q' @$ P" ]( J" v3 s8 s% }
.leds = da850_evm_tl_leds,& l' E' g+ i9 J+ }4 O6 Y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
8 o# M6 C5 h6 ?0 I6 ?8 o6 g};
8 e2 o/ x& L* H. b, Z2 t3 @- b6 @, r4 n; p0 s; q y, x
static void led_dev_release(struct device *dev)
# |8 A; i. S4 t. j; e{' f! M( E H! b$ n' O
};
) F4 ?; T, S, D8 a# X+ ^7 k9 {+ t6 e7 e) Q& J4 O& A5 |
static struct platform_device da850_evm_tl_leds_device = {
. O7 c7 l, T8 Q" R .name = "leds-gpio",
6 S( t% R5 a; i/ v& R1 @ .id = 1,
* r4 ]+ O) O4 l7 q% w+ _ .dev = {/ {# {& o+ k4 n: H4 X3 D
.platform_data = &da850_evm_tl_leds_pdata,6 d: a! G+ \) B6 K* m0 [; G
.release = led_dev_release,
8 z0 J4 z/ ^6 y7 f8 m }+ K: [% C+ h$ g& N F* Z
}; Y" `% a' {$ @# _5 |
: j) i/ q5 k7 ]% C3 I9 S. H$ Lstatic int __init led_platform_init(void)$ @8 T. ^% ~6 I- @) @: x- w
{
9 W2 O: a& l% g5 u1 S% V/ x8 S+ d int ret;4 [5 U! t* q: x. u
#if 0
0 P: z& M# r6 ^3 m; a& P" p! P7 \4 } ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 W; d2 @' {) X' c
if (ret)
" F! p9 |4 T* z+ [" v pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% K0 |: f$ J. m8 q. c0 F' l "%d\n", ret);+ d! d) Y, I7 k9 _
#endif6 g) Z% u& g2 r# z T8 g
ret = platform_device_register(&da850_evm_tl_leds_device);
, L. [7 n% U& n: |) u if (ret)+ z6 c% H" ~5 q) J
pr_warning("Could not register som GPIO expander LEDS");
* W: S. j+ ?* d/ K else" `" ]4 E) Q6 h. \+ i: j5 v2 L
printk(KERN_INFO "LED register sucessful!\n");
# @$ I1 h3 e% ^# M' X
, {9 c; s$ z& G0 W' H% d return ret;
6 L; Y O) b' i}
+ q. ^7 e0 c7 p' H9 t
6 o5 ~6 f3 {, ]: {; }! g. V8 xstatic void __exit led_platform_exit(void)' F7 h: h Q' X
{2 B& N7 s! i! J& v' ?
platform_device_unregister(&da850_evm_tl_leds_device);
: Z2 M$ R0 c2 n+ a& z, y% P Y, }$ B$ h3 r
printk(KERN_INFO "LED unregister!\n");
' n# Y& U8 {5 y; P4 X, p" x v}
# f; Y4 \8 W0 A8 I5 ~" N
. E3 W- U" G5 z! smodule_init(led_platform_init);
4 u, A% h, Q' ]' I: B5 ?module_exit(led_platform_exit);1 O% v( Z D) j' |' T
- S) j2 B* D2 r' i# HMODULE_DESCRIPTION("Led platform driver");
1 O, G* o$ F/ O8 UMODULE_AUTHOR("Tronlong");% U( E$ k, `5 G/ \! N5 U6 ]$ [
MODULE_LICENSE("GPL");2 M* X# H3 J) k2 F4 U
/ p& w8 f, J# B+ |6 R; ` |
|