|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
) |1 Z3 c+ y l7 p W#include <linux/init.h># {, P* ]" {% k$ {3 N
#include <linux/module.h>
# T4 }% K S+ S( L# j#include <linux/kernel.h># \4 w. c9 I' Z; U* I% ~
#include <linux/types.h>
; ]% m- j! n9 D+ ]3 X4 y" W#include <linux/gpio.h>, v9 ]: O8 H0 Q/ I5 l; r; P# a
#include <linux/leds.h>* v3 `* ]5 J' u% A
#include <linux/platform_device.h>2 e9 p+ v& [+ |* B
: A8 I0 N0 W- B8 `' B3 [9 o& h' m
#include <asm/mach-types.h>
4 R; p2 @8 y% J8 z& b#include <asm/mach/arch.h>
/ h% w' C F1 _/ {5 a* O( K4 ~#include <mach/da8xx.h>" F; k5 ~6 {5 ?3 H. w
#include <mach/mux.h># r* m" O8 c: v& d/ i
) Y2 Z4 o" x$ G. X" G1 U
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) `) R* {& S# V, h" @#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); H! C" r6 }' Y) ~$ j+ y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 l5 q% V6 ]" b
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ n! h/ V* E. v0 t) k
: [" x( [4 B+ h3 v6 G$ C. K9 V/* assign the tl som board LED-GPIOs*/( I1 R- S0 W. v, n
static const short da850_evm_tl_user_led_pins[] = {" K; Q( N/ d2 l4 o6 d8 ~6 ]/ `
/* These pins are definition at <mach/mux.h> file */2 ]: a; y2 t4 c, {
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: j1 n& j" b' C
-1
3 p: Z5 z+ o% |& p; n- f+ Y};; X8 j1 b# Y8 \- g
" Z# E, G1 h" W1 I3 r8 K/ wstatic struct gpio_led da850_evm_tl_leds[] = {' K1 `4 s) S3 G/ y8 k7 K
{
* c6 j7 t& h% H" u .active_low = 0,
/ v$ |7 `: l( ^% ?" N .gpio = DA850_USER_LED0,
% [8 l! M0 \* W .name = "user_led0",# v9 Q' R7 \' p z: k3 N! \) k
.default_trigger = "default-on",$ t3 E" h1 z( N: g) S
},
/ M) k8 d# o8 [* \. J& P) Y8 ]) _ {
, h. S" ]1 X& h/ S' f .active_low = 0,! E1 P! Q# a/ L, I* C
.gpio = DA850_USER_LED1,( `! K2 z% M$ Y1 z/ b
.name = "user_led1",
' i1 Q9 N( K' [$ O3 ^8 C .default_trigger = "default-on",8 b5 D3 Z2 m% y
},3 @3 Y P1 S% h4 E3 W
{
5 P! o0 Z! q: [: V1 ^ .active_low = 0,9 z; R$ m' M$ s
.gpio = DA850_USER_LED2," h' ?/ {- W+ C8 k- n$ \0 L4 V
.name = "user_led2",4 \) ]5 N0 k/ r+ x! [, }
.default_trigger = "default-on",
# r7 f2 @; y% K5 _6 }/ H3 l( G7 v },# M( b+ P( g8 n/ n4 C% `
{7 z5 Q8 J) B. R/ e0 p
.active_low = 0,8 Q. s" a$ T- U, h& v
.gpio = DA850_USER_LED3,
" }6 a) ?2 U, a0 z .name = "user_led3"," r4 B5 K0 w! W$ Z# u* g
.default_trigger = "default-on",
: ?) h v0 s' Y* P# p) K },, s* X7 n# H$ y
};8 ? R- F5 @# F5 a
$ h. |, B; d& G& ?, D- [- q5 Gstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 a4 g' k- w5 [* {
.leds = da850_evm_tl_leds,
/ b' r' ~. r$ Z& K5 c+ t d .num_leds = ARRAY_SIZE(da850_evm_tl_leds),- j1 `( c% ?/ G& q. _ N8 Q
};
. _$ ^" z1 X: R9 r2 \9 ?3 @4 y$ g3 _
$ c( W% w& y/ h: Astatic void led_dev_release(struct device *dev)- O0 a. I0 b, f6 Z4 H) R+ a% D/ g
{$ f$ k9 I% J/ d' d# y
};
4 D9 B0 s4 C/ g5 v" ]* W v% y* ?3 n5 k/ W" h1 x5 w
static struct platform_device da850_evm_tl_leds_device = {6 c+ ?# H, p8 f0 R
.name = "leds-gpio",
4 N+ M1 e$ r0 R4 ^8 `4 M+ |0 ~ .id = 1,
2 S2 a. L; j- \ .dev = {: b$ f7 V& u) z; o2 z1 n9 |- n2 Q
.platform_data = &da850_evm_tl_leds_pdata,
4 V- S" S9 b" Y1 e( I3 D8 K .release = led_dev_release,
+ O' P" o2 P! {/ q( y3 H+ X }
6 n# F/ j$ ~) x* t" i) S" Q J};
- b3 i1 ~6 P, m# T# J) r" x: B; v* a/ S% A4 d
static int __init led_platform_init(void)' H! D; J4 B g1 L1 ^
{
4 r8 ]& _1 N R int ret;- d/ {9 ?% ?8 A ^" \# M# E& x
#if 03 J+ L) y4 x- ~. c7 G: g" p0 M n( F
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- @% c. Q: `" E) b. m/ E7 a if (ret)
; ]1 x+ y; F4 Y& m8 `- R8 D; h pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ H ^5 V- w) h "%d\n", ret);
' H( g8 c# {0 M3 q! ~( D#endif
# n1 q$ A* x3 k' g# W7 J ret = platform_device_register(&da850_evm_tl_leds_device);) ]1 c; q8 d' W' q, w% w
if (ret)
0 E+ b/ n7 y1 N& r+ ~& _ pr_warning("Could not register som GPIO expander LEDS");- W: V, I+ D1 U5 c
else0 J' p. L5 s' t2 n. n! f
printk(KERN_INFO "LED register sucessful!\n");
& C p! q& o3 |4 v
7 I# z: v* W- a: `" m return ret;2 O9 E/ F, h9 o, y; C# e
}
8 |3 i% m( N$ A+ O' ?( K! W% M- _* X5 V" d
static void __exit led_platform_exit(void)
6 p" g# p; l) c& ?) y4 n{1 R8 U% Y& z8 z/ _
platform_device_unregister(&da850_evm_tl_leds_device);
' i. V( |1 u; _9 o/ C9 a* ~4 a
" j2 x: _6 X7 m printk(KERN_INFO "LED unregister!\n");
: q+ o5 c8 X# u}
" v/ M7 _ k: r2 J! e; F a9 Y1 o( s, F% {0 z, g
module_init(led_platform_init);
- \( C* S# H% B) `$ k; Cmodule_exit(led_platform_exit);$ J) `' z6 \+ P! t
: D/ z \8 f* |
MODULE_DESCRIPTION("Led platform driver");3 e# V2 \% K$ b! [* V
MODULE_AUTHOR("Tronlong");
B6 Q$ ~3 W, r, T) sMODULE_LICENSE("GPL");# s6 W1 Z7 t7 l+ s
& e" {, `' B9 ]: }4 N" { |
|