|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 v( B. S# ]3 I3 Z; u3 u* a; b! v5 a& U#include <linux/init.h>
5 F9 a* L q8 o) E- u#include <linux/module.h>
5 p R) e$ F$ G#include <linux/kernel.h>& X7 }+ @& ]1 r+ p! s
#include <linux/types.h>3 i1 x; Z9 {9 Q( a! q, s
#include <linux/gpio.h> W. |% G6 }8 j" {+ W$ m
#include <linux/leds.h>6 n2 n4 e/ f+ [
#include <linux/platform_device.h>
7 p" z! C0 J8 F, E: K! o) Z
( f1 S/ W1 [# ~5 [) Z#include <asm/mach-types.h>7 d1 |% t% Y: H3 e" J2 H
#include <asm/mach/arch.h>
& ?; r: G" C" u; W9 s+ b: u* Z#include <mach/da8xx.h>! E+ l/ i! Z8 p1 j6 C6 j9 K
#include <mach/mux.h>
2 o1 q+ }/ j9 ^ f( _6 Q$ _ C c; Y
9 z% T0 d& U0 ?1 y. z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
A/ Y) D: B) z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) S4 [0 N a1 Z5 A/ C3 v#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ h1 K( o# x" `1 q, U+ T0 r) ^ q2 `#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* b+ P4 {# `1 w c. G6 J' Z2 f8 C9 y2 s. x% n1 e3 d9 Q
/* assign the tl som board LED-GPIOs*// A8 N$ B* q. E0 _1 s4 J
static const short da850_evm_tl_user_led_pins[] = {; _: c& B) W9 q+ A( p3 p4 N
/* These pins are definition at <mach/mux.h> file */' L/ _) o- H" h& t h" g) r- t9 b
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. M, u4 Z- ^; d+ S, g4 `/ X3 B
-1
1 c! r4 `7 e- W};8 N) _5 M& P, M6 z' h) S6 Y7 y
) n/ F+ n" G* ~9 K: M# V5 Hstatic struct gpio_led da850_evm_tl_leds[] = {
1 g0 k5 `1 X7 I/ j# u* u {/ H. N, o- U6 I, L1 R! J
.active_low = 0,& ~7 B: {8 G9 B& E6 R! n
.gpio = DA850_USER_LED0,) ^/ Z0 ~. H9 R# `- {3 w) c% q
.name = "user_led0",) {7 n* M7 o+ ?' S
.default_trigger = "default-on",
' `+ ]) K2 _) X+ R9 C$ } },
% g" w3 u5 W8 q9 ]+ ]! q% I {* r m8 }! Q3 a \+ ~
.active_low = 0,
5 O% u8 X) F0 x3 W8 N .gpio = DA850_USER_LED1,$ L" v, M5 x: `$ q/ W y O
.name = "user_led1",
) [# y0 G; x; t2 q I .default_trigger = "default-on",
% G: g1 z: y* p$ k },; Z* ?. p" N1 F# `7 k
{1 |& K: i% d# _
.active_low = 0,
+ D0 U; ?1 l& `0 y' _" |" _" m .gpio = DA850_USER_LED2,/ b$ e0 r# h0 c$ l9 g" t; I/ y( N
.name = "user_led2",* Z! e7 o' P ?) b* \; z6 n& U3 K
.default_trigger = "default-on",/ P$ F }+ Z1 S; _2 F9 |) T9 s! \# l) u
},# v' L& I8 ~+ F/ K; L5 V, p
{
9 N; k& _# y& N6 J% e+ X( r9 y .active_low = 0,
, T2 f1 b" H9 b4 X .gpio = DA850_USER_LED3,
4 e9 e( y" e8 }# X8 V P .name = "user_led3",
) D: @8 v a7 V; |4 c5 b4 g .default_trigger = "default-on",
. W' X i, r$ M5 _2 R2 U/ u },, P) e& \% x4 r6 t4 K% y
};
) b" ?9 _" ~! j6 [/ C: k6 _
( }. |& x. R9 O. J6 ?2 l0 |$ istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, U4 {, k; ]5 g" K3 {
.leds = da850_evm_tl_leds,
9 Q9 X* v2 w* q$ j. K .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 ?" U' R# p2 Z};
- K; K8 @. n B3 c7 [' G& f- V0 l$ W) K" \1 X6 v
static void led_dev_release(struct device *dev)* b8 A( E# w! E: z, m) O' e
{8 S P! m) H$ T$ f* l- v
};
' Z) B Y7 w: ]+ W: U; e, L9 z! Z
static struct platform_device da850_evm_tl_leds_device = {
% |% Z# T( P! W7 D% y3 J5 p .name = "leds-gpio",5 R" [* {& s/ f; L/ V- K. L, g
.id = 1,
7 G* j$ A8 x4 y .dev = {9 O9 y( H3 r! X+ w
.platform_data = &da850_evm_tl_leds_pdata,0 L6 l% t- {( }$ t$ K
.release = led_dev_release,' C+ Z$ h5 }- e8 h
}& u! d3 C9 T" o/ R
};$ s+ N- \' C% ?9 @4 w0 C8 x
4 C& P! R4 Y$ d, O( I
static int __init led_platform_init(void)$ q K" R. ^. v: t7 l& e
{
" R6 [$ g& ]& t. H6 e int ret;' Q2 d: }# }5 m/ b' t/ x* r0 |
#if 0( y# h" F; e; b, m6 y$ L
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 g ~4 ]: O/ ~7 ?7 G5 e' c
if (ret)
) j$ W, W4 E( J, ~ N% Y4 l5 A$ t pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 O: L5 H" n+ f, S% v/ e* I5 t "%d\n", ret);
4 n1 l3 b- j0 f( |#endif5 V2 M2 o' B. b/ x5 I
ret = platform_device_register(&da850_evm_tl_leds_device);) ^( u+ e- T" w( \
if (ret)/ X. d4 y2 \& V9 ?( R
pr_warning("Could not register som GPIO expander LEDS");
, T% p$ G; n% ~/ j7 Z& V else* j, C( c' e, r& @# B1 o' N
printk(KERN_INFO "LED register sucessful!\n");" i. _: k' j* D& w. o* \! u
5 Q# ?6 N% M6 [) W' r, i" f, X! \ return ret;3 x" x: S6 D5 x+ e# O4 j
}
, S* W; C5 l' @9 P9 q! f: x! v' T
static void __exit led_platform_exit(void)
1 A1 T6 b& o8 t: D' {+ f{1 ^- C4 B* D# C" j7 d- r
platform_device_unregister(&da850_evm_tl_leds_device);/ B3 I' k& ^8 x3 c; I. U
) { G' A/ v6 a8 r
printk(KERN_INFO "LED unregister!\n");& w$ V2 d( X; B5 B e* {8 m
}
9 ?: i3 n4 ]% A2 K) O" _' _. T3 j- f+ ]9 s" O
module_init(led_platform_init);
! J, W& W& s7 wmodule_exit(led_platform_exit);8 T$ N& o" ?% u) P5 q$ d0 e
9 e# J6 R; j' e* b: ^MODULE_DESCRIPTION("Led platform driver");
' Q! Z( a8 s* N; q+ d" ]MODULE_AUTHOR("Tronlong");
) p3 i2 f- I) o, EMODULE_LICENSE("GPL");) V+ m& z1 y- Z% K0 \% \3 X/ C
. _( ^3 k3 m+ J% i8 C" B
|
|