|
|
求大神给下面的程序做注解,请稍详细些,谢谢。$ V l* q( S$ `& T
#include <linux/init.h>( F" p0 L) k6 D8 X
#include <linux/module.h>
# ? ? @. W: q/ y0 v3 J#include <linux/kernel.h>. V" G( l& Q* e: R
#include <linux/types.h>
% k. Q; `3 m E1 ]0 H! k#include <linux/gpio.h>
$ W1 S! a0 y$ `9 I6 E. \! Z#include <linux/leds.h>
: ^9 r) E2 v! P# b0 S% }#include <linux/platform_device.h>, `- M& P( ^2 q6 {- B$ q$ }6 `# e
: x. `: y; U: \/ l% m7 v#include <asm/mach-types.h>/ }* `' f) d+ i3 C9 C& ?
#include <asm/mach/arch.h>
% `& I( M! i% n. m2 ?7 j#include <mach/da8xx.h>
; |9 ] |5 i; t% p- A#include <mach/mux.h>0 V2 {0 R P2 D4 V3 i
! r: C0 b- t3 w# J5 Q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& g7 m# j. v. R, N3 x1 X M#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 T8 p7 v( T: r' a; o#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! z" i* \4 h" e% u#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 \0 t$ `9 ]$ _9 s8 K3 }
' J) ?9 K A% ~/ K% K
/* assign the tl som board LED-GPIOs*/
4 x, i! G: W H: Q% ystatic const short da850_evm_tl_user_led_pins[] = {4 `, z- a$ c$ V6 \$ d# `" T% Y
/* These pins are definition at <mach/mux.h> file */
( o& y& h" G4 i( P DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; y- b* [& H8 h6 V6 D* A
-1; f" Q( F5 r+ p5 D* z2 K2 i
};' G w: [- t* |* y. q5 X6 B
1 i. H- L. D9 \' t; Bstatic struct gpio_led da850_evm_tl_leds[] = {- \( u/ J+ \3 x4 o+ U3 s
{
4 ]# V8 g1 u' s# D5 A .active_low = 0,
) P: D% L1 P- H6 w# W/ [1 _, L .gpio = DA850_USER_LED0,
+ q6 D5 ^' I. e4 f! y& h .name = "user_led0",
1 J' ~4 o, G: B' v7 V8 y+ w9 X .default_trigger = "default-on",
) f9 | W: p/ N$ y3 m; E },
! _# I! ?; V4 t, G7 N. ^ {! |" M! ]- \! ~0 r( S5 l9 a. C
.active_low = 0,( [, M& i/ O( `, i$ w5 O$ q
.gpio = DA850_USER_LED1, X) e" ?! X1 _2 @3 I7 ^7 i
.name = "user_led1",
7 {8 c, L# m3 `4 A8 h1 a .default_trigger = "default-on",
2 O/ [/ x+ |( Z4 ?% u8 ^9 C* r },
0 \" x# m/ L# }! `1 F* Z {
/ J/ V6 c# u/ @% X .active_low = 0,# ?) L$ V( ]2 Q% W, B
.gpio = DA850_USER_LED2,
! [0 B/ I& L2 {) ] .name = "user_led2",
9 q. N! U% y$ X1 L6 f, B0 b .default_trigger = "default-on",, f0 Q# u2 l) e( s$ W5 u& H
},5 }* k- o* u: {8 ?% `
{
$ @' K+ e. R2 _# C .active_low = 0,+ e0 J0 h0 z+ W+ ]
.gpio = DA850_USER_LED3,
6 L; [. P) w) \ t" [ w .name = "user_led3",% Y' e1 ?+ d- k% h* \
.default_trigger = "default-on",
0 [8 i: i& y( t7 k' q/ L },& c% y, h4 _3 S0 H
};* {4 d# W; [, m9 O" c
1 p2 o; o9 J" w, ^0 X2 q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' I" |7 e, K( w# H .leds = da850_evm_tl_leds,
8 I* N, e% v- {/ N% |7 l6 ~& r .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
K9 _1 n# E6 J' V};- U3 W7 P- a0 V- W9 ?+ f7 l/ S
& X5 S& e& A6 E; t% g! p8 h3 Astatic void led_dev_release(struct device *dev)
5 F/ {8 g, V' n$ k% O{6 f+ J0 B1 v; ]. E% X
};+ |. \- A- k" N9 ?
( U" r0 o0 @$ r4 l0 C8 {9 H4 Dstatic struct platform_device da850_evm_tl_leds_device = {
( I8 n5 Z" v! @; j1 } .name = "leds-gpio",
8 ]. J% Q; O- Q2 N) Q0 K .id = 1,
$ ]8 h3 b/ ^$ E3 e .dev = {( W" n# y1 T% m; Q* p. w
.platform_data = &da850_evm_tl_leds_pdata,6 N$ l0 m& B1 M4 M( k3 S4 s
.release = led_dev_release,
3 t. V/ i( F5 f# }: b4 i$ t2 E }4 Z5 J" E/ b. m `
};" p) c: L' `' v- A* v# F. [/ ^
3 q, w1 ~# o) e4 l, m4 d7 ?" a
static int __init led_platform_init(void); P5 V& ?- o7 T2 J
{+ S! N$ [+ X; ~% F& X5 ]3 O
int ret;
! C+ |! m$ f2 \ D#if 0
7 ^' X5 @9 Z% n( k, b# I; r2 A+ [ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 v* i$ I. c$ H4 m. F6 E
if (ret)6 p0 W0 |/ E# _9 n
pr_warning("da850_evm_tl_leds_init : User LED mux failed :": Z7 n1 ^) D" B% A- }: e0 x! ]
"%d\n", ret);9 P9 a* x- X& V( w5 \) B% x6 T0 b5 y i
#endif
7 Y( u5 y' x5 D7 |4 p8 d; Z# P ret = platform_device_register(&da850_evm_tl_leds_device);8 a% M+ C# Z' l6 a' V
if (ret)
" B( j2 N' A. Q9 T/ U, T+ _# _ pr_warning("Could not register som GPIO expander LEDS");
* B4 N) [! I: G% b else
6 M- o j) G" f! }/ { printk(KERN_INFO "LED register sucessful!\n");& a% H0 s0 z. c- h/ g( T% R$ i* ~
) U; f; V, k& h) A, Q. M2 E
return ret;! K: e& W# ]. K" K
}
8 F: K6 ~4 M2 y" q/ l% [; o( R: [( u! `* }. u* u$ |
static void __exit led_platform_exit(void)
* Z. a: u5 w" U- g0 Y{) G B- G" b' {4 B s. w5 h: r
platform_device_unregister(&da850_evm_tl_leds_device);: l% V7 S! n+ s2 w2 @4 ^
3 b7 H& m+ P8 I( i8 [, v printk(KERN_INFO "LED unregister!\n");. M; r' R3 b2 ]1 e; k. V1 J
}
, f: t9 w8 j/ D- \
) r, ^, m$ b' `$ fmodule_init(led_platform_init);9 [9 |7 e5 c9 U# R& D
module_exit(led_platform_exit);' a9 W+ d( c6 Y- y7 C. C
5 o5 b" } `, i- D
MODULE_DESCRIPTION("Led platform driver");2 r4 V1 H6 l: M8 S- d0 E
MODULE_AUTHOR("Tronlong");
3 ? ~' N/ c* W) g+ XMODULE_LICENSE("GPL");
# {& P% ]8 f9 {8 o: s! j" `2 r' S; s1 [# w/ X
|
|