|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 f: v5 ~8 Q- Y) l" R0 C9 ?! ?#include <linux/init.h>& a- n; t, t' M h0 R+ ?
#include <linux/module.h>8 B! o" J' A& r2 f; L x5 {
#include <linux/kernel.h>
" s, Q4 x& Q. U' r1 a U3 S#include <linux/types.h>
; Q0 C6 Z9 o& _#include <linux/gpio.h>
8 _0 |$ q5 b5 P" W. P& q#include <linux/leds.h>8 r. @, o m: }
#include <linux/platform_device.h>
1 G! ]$ ^0 m" E8 b% W4 ^, B- r9 L; q8 G" \7 M% z) a
#include <asm/mach-types.h>; p2 a/ T) }4 ~8 {- b4 v; k5 B
#include <asm/mach/arch.h>
1 M5 i( B9 J/ O- N#include <mach/da8xx.h>1 H- F# \6 X: e! w. K
#include <mach/mux.h>* x7 g! o1 }+ d! J- e
2 o0 a# o, ]4 i: }' L#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) i+ Y; X9 ]8 {; e
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). ]: g% Z- m3 R- f' e: s1 f
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- i7 q% J; P, e: n+ F8 A
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 g, Y: k% c0 M* n: S S& q/ j+ O! Q0 E# R, s' R
/* assign the tl som board LED-GPIOs*/2 g8 a& J9 s+ x, c. c! @
static const short da850_evm_tl_user_led_pins[] = {( Q# d1 z3 `! B& R8 j
/* These pins are definition at <mach/mux.h> file */
5 N2 W1 @. l# ?2 z5 a DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 l! p8 d. V. Z. @2 ]
-1& z; B" t4 T: U( ?
};7 D" X4 V* u$ z! j
' R1 ^; t/ f9 Q) r- \static struct gpio_led da850_evm_tl_leds[] = {
7 E( `$ h( P" w/ L {5 d2 j6 J+ b/ z% B+ `/ c$ I" ?
.active_low = 0,
; a, h4 n% x& H .gpio = DA850_USER_LED0,
0 N b4 }/ F% V; d1 A .name = "user_led0",! |$ Q. w; i5 d3 G2 |
.default_trigger = "default-on",
; d- y8 a/ n2 \4 h) B, o },
! M. p z& W8 [ {
; ~, u0 G3 k' b! b9 o" i0 @. Z/ o .active_low = 0,
7 A8 i! ?/ g8 K) O2 |0 u y& N .gpio = DA850_USER_LED1,7 l% P- A" {& t1 s: l. p
.name = "user_led1",+ R2 d2 S! q1 x$ V3 W; D( g
.default_trigger = "default-on",# t7 ^! x/ D" z! \2 {
},
: ~8 N6 u! i. y+ K! W" E {
2 `0 I4 Q i& ^: o5 Y5 b/ v @& Q! ? .active_low = 0,6 T* o, t* }7 T
.gpio = DA850_USER_LED2,) L W7 q) S2 S1 v! X. C
.name = "user_led2",
% }$ L. `) _3 ^4 [# I .default_trigger = "default-on",
4 c0 S& T, W8 A' a% _) r },
# E8 }8 ?+ f, s+ K+ m {3 Y1 p* {- Q, @
.active_low = 0,
9 k( g% m0 O3 n2 @* @( g .gpio = DA850_USER_LED3,
( t# N" m/ P3 S1 N5 d5 Q .name = "user_led3",+ r$ ~$ e% O# D* R
.default_trigger = "default-on",9 Q3 s* D6 @% ~$ x* W5 Q" ~+ g
},0 [5 g1 U- u$ [- N
};8 v7 t& e& F# u* k5 P, d
" Y7 `2 O5 Y- a3 D
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& S# D6 y( M9 }8 O, f0 S
.leds = da850_evm_tl_leds,
: K- q1 h# b+ R6 r! p8 q4 J .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 x2 L/ P: x* L7 G+ w};
9 Q5 L( p! I) K9 P
4 g' j6 [2 u" ]static void led_dev_release(struct device *dev)2 [/ ]1 ^ h* d+ M4 Q n0 y/ C
{0 k' c( G) x' i; Z/ i
};8 Z, v6 K8 B" |& L- G
) i _: n' _) w+ M0 k# {
static struct platform_device da850_evm_tl_leds_device = {8 S! ?4 g/ P! @$ h, E0 B
.name = "leds-gpio",
4 t2 [/ b& r+ C/ w/ H! Y .id = 1,( ~ i2 _% G! f2 S
.dev = {4 g, O x, A, h) M; _8 Z4 z
.platform_data = &da850_evm_tl_leds_pdata, o) N* c! g) e; `5 ~4 ]1 m* J
.release = led_dev_release,
x6 J+ R$ Q/ I# [2 f5 I( B } n2 U# I' S! z* x4 e* f
};. ]) P& J7 p3 Y4 p: L
! a7 a) S' p' D/ W! ?& B. K+ ?static int __init led_platform_init(void)
l: e7 V+ R# r5 u{
$ i. @& X! U' n! }' I' K0 q* `2 R ~ int ret;$ f2 H8 \3 o0 t
#if 05 M0 x! y- y' s7 i5 j3 W" C
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ @+ L, c( z& `. M2 r
if (ret)
( |7 n0 H4 t; Y3 c pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ i( ]' z3 U1 a6 K6 L* C "%d\n", ret);5 Z8 p6 L! z2 n$ Z2 ?- O
#endif" r3 p. Z9 m$ n8 C
ret = platform_device_register(&da850_evm_tl_leds_device);
! u! }' {, k; { if (ret)
% [" E% |% c+ a pr_warning("Could not register som GPIO expander LEDS");
( o* c& D. G; \/ ^ else
2 f' [! h3 c8 _ printk(KERN_INFO "LED register sucessful!\n");0 J9 k( o0 o5 Y1 E. s; e
+ Z2 |) R, |: P4 X) ]) y, u! w. ? return ret;
. ?/ n% {5 K0 Q, d}
% g O4 I5 j# a1 c9 z$ Q+ S8 b6 s' c% h3 V6 ?; F
static void __exit led_platform_exit(void)6 s, b! x5 n C8 z" x' ~) }
{
' b8 ~9 k% j% `, B) r6 k platform_device_unregister(&da850_evm_tl_leds_device);
1 y8 h# h" b5 x: ?8 a' L
" m1 }& H5 s& B% b. r printk(KERN_INFO "LED unregister!\n");' D+ U4 Y7 Z/ K H
}2 r9 h4 ~$ a. {
! F7 E2 W* A" I' B5 N4 d2 z* p t- H# g
module_init(led_platform_init);
+ ?& e# G" y; M; |. T# gmodule_exit(led_platform_exit);
5 _7 K Z) }5 K7 W: F7 G) z* o" m* z# Y5 N5 r0 u6 S
MODULE_DESCRIPTION("Led platform driver");5 Y2 ~9 W* b- L3 S
MODULE_AUTHOR("Tronlong");4 D8 R" l1 u( n8 d& e
MODULE_LICENSE("GPL");6 M; c" f$ w( N* |* d, r( ^
2 ] \3 q) d+ p
|
|