|
|
求大神给下面的程序做注解,请稍详细些,谢谢。4 j) h9 |3 L$ H; O$ k
#include <linux/init.h>
$ j- G0 X4 z3 @) I#include <linux/module.h>0 n$ R$ o8 H/ n. t* f) k3 h
#include <linux/kernel.h>
8 c$ E% Q s' [, G! ~- b#include <linux/types.h>( r" T' k ~8 }: v6 g/ \& I5 y
#include <linux/gpio.h>, I( `% G$ ^8 T, d& e2 @
#include <linux/leds.h>
1 p; f( y% B! h( ^* U2 ]#include <linux/platform_device.h>
/ u: }* I q& B) y
* F1 L* K& C/ |7 v) x+ `#include <asm/mach-types.h>
% ^. a& o0 A: M5 e5 t4 W, w$ O3 D#include <asm/mach/arch.h>
% V# G/ z& M2 @+ \#include <mach/da8xx.h>0 k! j5 ?/ O6 `6 i4 ` u& V0 G5 w
#include <mach/mux.h>% [6 b7 B* f, z3 ^: P* @
1 ]0 Z. P" ^5 r) x- E
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- D% S8 S! i+ \& j9 W#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" x* Y8 ~, t3 x#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% d$ {' @- K. g
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 c$ K! k& `0 d" J6 o
3 v2 `) S, e5 Y' F ]" c& S/* assign the tl som board LED-GPIOs*/
( v; N8 Z6 E' bstatic const short da850_evm_tl_user_led_pins[] = {3 l6 F* m. Q- K- f* i6 F
/* These pins are definition at <mach/mux.h> file */6 Q& V6 C+ x5 H! S/ o
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. Z$ _2 q e5 [. _ Z7 N
-1+ q! c' ]9 {" H8 Y- c/ `! V5 k( J
};
* u9 M% K: c: t' N! Q% |. X
I) A( x& n1 i, D6 z" j0 cstatic struct gpio_led da850_evm_tl_leds[] = {) V* V8 B. p" s7 K+ f* A, j
{
: G$ B1 g6 B% q, X4 `/ |0 x .active_low = 0,
" R$ m$ x. Y" |% p* O .gpio = DA850_USER_LED0,
+ L. Q. ?. B# S4 ]. q; u .name = "user_led0", T$ o0 \: G* ~2 l T! G
.default_trigger = "default-on",
& Y8 E4 ?* Q; [. X },
0 C" S0 _/ C5 f2 P d8 \% _6 f' h {2 J2 e0 k5 G% i1 V- P; O
.active_low = 0,
# ]& s( O5 G! [. j" x .gpio = DA850_USER_LED1,
% X- X- p$ ]- W .name = "user_led1",1 E8 @% h2 v1 X6 B
.default_trigger = "default-on",5 g% T0 M/ n7 _% e0 }( h! F3 i0 X1 o
},9 M$ G6 A; n, [, O, b ]
{# x, {# R9 b; C9 E
.active_low = 0,
" a$ O: D5 D- f/ J0 Y8 R .gpio = DA850_USER_LED2,1 N# F% Y7 e7 Y/ r. Q6 ?
.name = "user_led2",
: t/ _8 {3 ?, S' P2 d/ Z3 Y, ~% O .default_trigger = "default-on",
) c, K- a3 D. ^" `1 r: p% H },
" K; |/ Y" t A! z4 L {
9 t) h7 G( y' T M( w5 j0 g .active_low = 0,
0 T: v' j' _9 p2 L% \ .gpio = DA850_USER_LED3,
, u& T: r1 ^# L2 B" p .name = "user_led3",
& v g3 q5 Q) _+ R* J .default_trigger = "default-on",
; e) E" _* o7 n },
A& [. T& s3 v) }3 d/ Y; }: a};
: K9 b5 U- _3 ?! N) v0 g' t0 Y
3 m4 e2 N0 F% ]# V [* @9 e C' Ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% a+ q( J6 x% _( a; @ .leds = da850_evm_tl_leds," r1 p. h6 s& `' _' B% f6 y! ^1 h% ]
.num_leds = ARRAY_SIZE(da850_evm_tl_leds)," u% Z2 _+ {) o8 v# y) f
};. H/ w- @4 O* `% P* B4 T* D. }6 h
H- j; ?9 y. j% G. g: E6 w( g3 \
static void led_dev_release(struct device *dev)* L3 x i0 a: A
{
8 E/ l6 K: `. z' y8 E% o- \ M};
; H; [8 s7 b6 T& ^* v( H& J
' x+ N9 o P1 k$ J8 v9 y, Lstatic struct platform_device da850_evm_tl_leds_device = {' T" }4 \+ T4 h
.name = "leds-gpio",; p$ Y% C9 |. l# Z: U% m
.id = 1,, N' e) i: }3 x; ]6 D3 K& M
.dev = {
1 |% f2 m3 P9 L7 l .platform_data = &da850_evm_tl_leds_pdata,& \' \ A8 S. [& @) K) i3 u
.release = led_dev_release,
7 D c2 Z% D& q8 h, g! R$ P6 S# i7 J }7 N- Y* }" y4 N8 {: p# a8 Y
};
% ^% J( E; y; {9 m5 q5 b( [: }8 ~# H) s
static int __init led_platform_init(void)8 ^2 I' ~: j. v! h0 K% S+ S# k
{
7 J8 R8 D& H! q! d I3 V int ret;3 n( a/ K$ e: c; V4 X c, ~ ?
#if 0
. I& {5 w6 u Z4 W ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 w' P. r0 G% c0 J* Y0 _
if (ret); O/ W$ R# P" i) f1 g% r( I
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ S0 H- N% Z$ q- a
"%d\n", ret);( F/ q) z/ r, L* h! @* t% \
#endif; U9 Z8 t$ }- T0 z% M2 y
ret = platform_device_register(&da850_evm_tl_leds_device);+ A. e8 Z& F/ f4 |" T, t
if (ret)
; O7 E7 r1 |, t3 Q7 {; B S pr_warning("Could not register som GPIO expander LEDS");2 ^, V% a% _) O5 l- h+ X* Z
else( V7 I9 e6 ^3 ^
printk(KERN_INFO "LED register sucessful!\n");
: W) r x2 m* _: U& F7 u7 D3 W4 n3 l3 v7 G0 r( O
return ret;
& J7 S/ E1 ~! j% C3 W% w( W. _; x0 b}
, _7 Y4 o8 Y" V) R8 p; r8 c' N& _0 {7 x5 o" ^
static void __exit led_platform_exit(void)- U; d$ p9 R, O" s/ v# t' O
{
3 F. [$ Y, \! t0 ^. n& ^) P1 [ platform_device_unregister(&da850_evm_tl_leds_device);
7 Y/ S& T, i) i# V: a: Y1 _: X- J9 f! h. R$ I, q5 P" j, M# x* i
printk(KERN_INFO "LED unregister!\n");7 ?: b. h6 P7 w% o
}
& _* m K8 f( T' a; d/ r; ^2 S( ^5 e8 N* T
module_init(led_platform_init);
8 n8 ^8 f6 _, D) d3 u+ amodule_exit(led_platform_exit);
& a6 ?2 n& W& n/ C/ P2 T0 j, ^# O% X$ a
MODULE_DESCRIPTION("Led platform driver");
" X' ^' U% _5 m5 t! PMODULE_AUTHOR("Tronlong");
# Q2 U3 g* J# z' ^) `, Z v3 \MODULE_LICENSE("GPL");5 k+ p0 [6 V# n* J% j! H. Q
5 ~ _2 `( |/ y% X* y' ]
|
|