|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' X7 @6 P0 j# i9 b; p0 a) B- ?
#include <linux/init.h>
+ K) k, m; t% ?$ H' y5 t1 L) L# A#include <linux/module.h>
9 T7 T$ A1 c2 z% e2 W5 z5 q, ^#include <linux/kernel.h>
4 Q' |0 ?, O3 \+ v' j#include <linux/types.h>3 \1 y% ]; r$ H: o" `
#include <linux/gpio.h>2 [+ m/ {, c) E1 n' C' X7 {. N) A
#include <linux/leds.h>! W* W" V( ~* O
#include <linux/platform_device.h>
$ H2 W- Q7 e7 v! h( J' P5 Q& u, x5 r( f/ w$ \6 z, R/ K
#include <asm/mach-types.h>
( x$ @- a# W8 ^- W#include <asm/mach/arch.h>
/ J( e/ T, |) e, {, k#include <mach/da8xx.h>. i; z' X( D! M9 ~ N
#include <mach/mux.h>
# b; Q& K9 @8 k
/ N4 U' I3 r! E) R#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 T* o' d3 z0 P9 o0 | K' Z! U+ u
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: d% _. Y- B: Q+ v N& F6 a#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 i$ E6 i8 n U# W
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)8 [6 C! A8 n; F" U: o% l
4 u" F4 i# C3 o! b) a3 K! J
/* assign the tl som board LED-GPIOs*/; ?# ^# Q$ t7 r) S. J" i) _' L
static const short da850_evm_tl_user_led_pins[] = {! B! t: b! s# y( F3 ?6 O# g0 S* F$ L
/* These pins are definition at <mach/mux.h> file */
, x$ h+ M) `9 `2 m( M* G DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 g/ D8 ?# ], O9 X9 U -1
+ c( d) l3 a0 _. J9 g};) B. O$ i& I& H/ c0 c+ D
- @% Y/ l ~& S7 G; [: m
static struct gpio_led da850_evm_tl_leds[] = {* s5 h/ i8 {8 B0 I) W6 C
{1 V7 I8 ~6 j( W" q, o% J
.active_low = 0, B+ n: l% a$ \% w
.gpio = DA850_USER_LED0,
7 F( o* z' @9 ]( ~8 R- f/ j& t .name = "user_led0",- Y/ J# }- x# X' s j, p( L' Q) J
.default_trigger = "default-on",4 a9 ]. T/ a3 j" x
},
& N: I( d& n* j' q; L {9 J& B: n+ o- Z! _+ U! |5 X
.active_low = 0,2 ?# m+ u3 i9 t9 U1 `+ z2 h
.gpio = DA850_USER_LED1,
' T$ D0 p9 Y% f& a: C) G2 X .name = "user_led1"," J7 u+ [! e, V" U; n
.default_trigger = "default-on",
7 t) F( R) Z& {3 K },
, r8 _: o* [) l% ^5 S3 E {
: {+ b* z+ _) v! t& ~0 ^( e .active_low = 0,
; G, c, c9 L+ `7 l* n6 A; Y- B .gpio = DA850_USER_LED2," Y) {) V$ h; v% p# E. X$ s* Y
.name = "user_led2",/ h/ r8 j% \! {4 P- A. t% ]( N
.default_trigger = "default-on",& g$ |' B, M' p; A
},2 V( e7 r7 T& n" j) D& v$ X2 u
{; d$ v/ z9 {- g4 M7 ?2 Y, Q9 i
.active_low = 0,& u9 U9 v3 `- T& @ `1 a
.gpio = DA850_USER_LED3,& L$ W3 v3 \/ E) d, F9 S4 l
.name = "user_led3",
* N$ W# N( i: q; l' I7 P0 z& E .default_trigger = "default-on",
- h% d \+ K+ T9 ] },
0 E) y. {" a q: w1 M" L8 }' U};
7 p% k9 j8 x7 {% K* l" H2 g" ?) l. |- y/ Z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% q4 M1 V* `( ~. A5 `# L
.leds = da850_evm_tl_leds,1 _7 z- X' R- I, d R
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 C3 I4 @9 i5 |) _6 |
};
' V9 r9 J/ v( n6 G+ N( k, w. Z
0 G1 T5 d2 B# j! C" jstatic void led_dev_release(struct device *dev)
+ x! W+ |: u# h; b5 p" F& J; w{
1 `! A" m4 c$ B4 E* C};
# d. T3 q( b$ |' @( J1 J
) u" w! b+ N$ Ostatic struct platform_device da850_evm_tl_leds_device = {- x7 l. w4 D- ?. s9 Q
.name = "leds-gpio",3 y- V* u9 g, o' M
.id = 1,
' M8 A5 n9 V- e( X, Z/ ~ .dev = {0 |. R6 s, J0 c6 \ T! X
.platform_data = &da850_evm_tl_leds_pdata,+ ?* L, C7 t# B2 n, \9 w* `3 n! p
.release = led_dev_release,# ]$ d- W7 H" @2 p, f
}
1 m' I, c1 q2 z% O, c" T% m};
! v0 B" ^6 V, U( {6 ~
3 [: E. I, P' g. V4 \2 L* ~static int __init led_platform_init(void)
7 [8 z5 M4 Z+ }- D3 @/ I0 I{! Y3 ~* T( e6 T6 M3 g$ m7 m1 z* p
int ret;
6 X4 W) a. w& x% A6 M1 G#if 0
! c r7 k( R5 m/ q' C' e ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);: r' E/ l* Y+ r; p3 w$ k
if (ret), d$ C+ P6 t- r7 c' n
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- [2 j2 P% z' ^
"%d\n", ret);
) N- Q2 [# x) J$ }8 L#endif, e) t1 }& M5 S% ~ h) R
ret = platform_device_register(&da850_evm_tl_leds_device);% [4 r1 R9 q3 B+ [9 Y5 O$ u
if (ret)/ v' u- ]. p- J( L9 [7 Q
pr_warning("Could not register som GPIO expander LEDS");
; o, h9 A, Q* |* c+ ?" S* [) o* h else
' o3 x } K/ r5 a! l: d printk(KERN_INFO "LED register sucessful!\n");
% r! h) I$ f- m! ~) l! u5 n& A0 J. g! v+ x2 s0 j
return ret;0 ~) J7 v9 F l5 M8 S
}' C# s* U0 \; f+ ~! J& S o. R ?* ]
5 B' |9 N8 ]/ @! ? r, Z
static void __exit led_platform_exit(void)( P) ]' I! y/ F! k
{
0 ~/ C }. f& f3 X9 | platform_device_unregister(&da850_evm_tl_leds_device);8 I6 S2 Q% n2 A, t9 d
" \; n. g& Q1 D$ h
printk(KERN_INFO "LED unregister!\n");% U K4 P. g6 R
}4 C0 ]8 z7 x! {" b) c4 f
8 Q& V9 A* c' c5 h+ i, z
module_init(led_platform_init);
/ ]3 S4 ? z+ T4 j- s. P& h- [3 Umodule_exit(led_platform_exit);
+ k: A0 ^! E1 u6 r2 E$ `6 f# h8 U
MODULE_DESCRIPTION("Led platform driver");
+ r: F$ z0 L4 WMODULE_AUTHOR("Tronlong");) W; G& C8 D. B
MODULE_LICENSE("GPL");
6 K0 C! _' B' k& d6 U4 H, X# H
( e. w7 W1 x2 F% M8 d+ O |
|