|
|
求大神给下面的程序做注解,请稍详细些,谢谢。1 H' t j) Q5 J8 ]
#include <linux/init.h>1 h" p# q0 V7 s U
#include <linux/module.h>
- S. b& A, B, z- ?#include <linux/kernel.h>/ ^6 A' \; X. p; B
#include <linux/types.h>
; v( M8 l4 s9 A* ?, G3 V: q#include <linux/gpio.h>
. b( d/ r; Y# B- V) m! A#include <linux/leds.h>
3 _% T. U, g& O5 n#include <linux/platform_device.h>- p3 q9 w# e# |9 \2 X
6 z" C/ r2 P4 O, W
#include <asm/mach-types.h>; M' r U' y& R( ~0 f
#include <asm/mach/arch.h>5 N( g' d4 J/ C" o5 H2 u! J
#include <mach/da8xx.h>
( k7 N$ w* j7 C3 D#include <mach/mux.h>
8 ^3 ^ h6 a6 e* O @+ j
L4 N& G6 ~7 `2 D9 y( a#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); [# @+ \/ s0 h- |' r; C
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). x% t' p1 N% [* Z0 v3 N0 ?6 ?
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1). m9 `- S; A! V1 S3 }- h4 h
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
[3 m4 @6 p. b9 G7 a b, m5 I# L0 t( B
/* assign the tl som board LED-GPIOs*/ O! B* z, O3 I, B @5 {, `5 E
static const short da850_evm_tl_user_led_pins[] = {0 g, c* M- T2 t$ r/ d* k
/* These pins are definition at <mach/mux.h> file */
4 f- p' l: A2 b7 o- T/ S+ ]6 B$ n N3 m DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 t% t1 z" X6 W" y! d
-1
_* @ Y! j( c. {: C; {0 S};
6 x C) z$ X. L" z/ I# G
: j4 w/ s" P6 ]& ]9 _static struct gpio_led da850_evm_tl_leds[] = {
4 ]: I+ \ B- k0 ] {
8 X. o Y$ h& j' `. O' M .active_low = 0,6 ?( Y I, \" l7 u: }
.gpio = DA850_USER_LED0,. C# R2 R7 F; W* H
.name = "user_led0",8 ^" W3 ~' L' C" |: a* [
.default_trigger = "default-on",/ e& f0 c" V1 `# [# |5 Y3 ~9 s
},* A7 l* h' F0 U' ]* @& n
{
5 h0 g8 D3 ~: O .active_low = 0,
q5 Z% h0 |. T. [0 _ .gpio = DA850_USER_LED1,; _: C& o3 B1 N
.name = "user_led1",
$ ~, `2 _1 t; ^" @) m .default_trigger = "default-on",( e. x: b, r8 ?7 E, u/ g5 X! r* G
},/ q6 }5 q8 d$ t/ f8 |" Y
{
( z- k! A. E9 m9 x; F% y s- @- }: I: T .active_low = 0,
; x& C. G+ F+ K' `8 P. E9 ^: O .gpio = DA850_USER_LED2,- C6 P7 ^0 A( i% _# i$ I
.name = "user_led2",4 c; L K7 u3 }
.default_trigger = "default-on",
* r) g. Q) L1 J, t6 y. [) M },
3 n( e7 @6 _! ^% ]% ^4 P, n {
& m, {9 P) T& ?, L# @$ o8 N- ~ .active_low = 0,% v! X) \5 S r; \- f; N1 Q
.gpio = DA850_USER_LED3,
. G y- o4 P! q2 V .name = "user_led3",2 L( ~* Y% j' h v: p
.default_trigger = "default-on",. E5 w; S9 O2 c
},% j& c, ^* }# q9 c6 x& ~; D9 U1 m
};
8 @1 i4 W% ?+ B9 A. k) i( B; w/ d# y: q/ ~2 s$ i6 h! c1 |
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* ?0 m: o( J$ Q4 r
.leds = da850_evm_tl_leds,
6 Y$ }; ~( | X3 J3 R o% j% y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),( O/ l! U S5 o" f
};
6 D- f( i+ O% K- n+ [4 v# w- O+ h+ n* v, E5 V% h$ D
static void led_dev_release(struct device *dev)/ x* i* P3 b& V3 T3 h. g7 Z0 [
{
; G2 b6 ~5 ]6 q0 H1 b% _7 o};
. G% X4 a w+ Y% J7 R6 _9 _- K, ]; W* Y- b/ Q% w" T
static struct platform_device da850_evm_tl_leds_device = {
) a2 |/ s0 b( {; n7 |& e0 m .name = "leds-gpio",$ i4 u. b: L9 ~
.id = 1,
( j5 \# k& q, c .dev = {
4 W( Q3 `3 K4 [% Z ^6 c2 k .platform_data = &da850_evm_tl_leds_pdata,- c# ^/ ^" w) M- m& B
.release = led_dev_release,6 V5 [& Z/ m! N6 }! s9 c# L6 n; k# }
}
0 ~0 R! S& Q# j6 \$ A1 b9 G2 `2 ?};
+ }% \0 F z- B0 S5 ~3 `% l9 Q$ e
static int __init led_platform_init(void)
% z3 [& f5 D4 m" n5 C& S A6 C! ]{
/ m/ M& R- L% R1 |% { int ret;
{5 A+ c: A- F' S#if 0( k, `5 G0 p; |- X
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 |. `: t6 f; k. b- P2 M% B% w
if (ret)
* s- h0 K! E6 i* {8 S7 n% g7 v pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 h# ]) K& [/ u# O2 I
"%d\n", ret);/ n/ s9 H% v4 ` S
#endif) V. ~* j9 q+ k- C+ z5 C
ret = platform_device_register(&da850_evm_tl_leds_device);2 I/ X, l+ F+ g6 S! y; p
if (ret)( X5 y' E1 `1 K6 ~9 _/ y+ U; U8 y. ~& A
pr_warning("Could not register som GPIO expander LEDS");+ m% y6 c( \2 [
else! `1 t1 C% ~8 @4 t4 r& E; H
printk(KERN_INFO "LED register sucessful!\n");' u$ }7 N% {% T& D8 j" G
3 ?; q3 C9 B- h2 e return ret;
: o# @" q; ]# \}
0 q/ M; H. ?9 ] K0 ]0 J- O( f2 m7 [, h4 h: _% g8 T. T( J
static void __exit led_platform_exit(void)" r" ~9 S ~# W# i2 Z( F
{+ n9 Q3 p/ m0 K( W7 w
platform_device_unregister(&da850_evm_tl_leds_device);
3 D; i/ J! F' F! d& H5 ^
3 ?. U* r. R4 U1 {( g; l" o printk(KERN_INFO "LED unregister!\n");, W Y) {! G7 X8 f" K. q
}
* }0 d: g) Q: G5 p* H! r
. I. N$ {' R6 _& T: zmodule_init(led_platform_init);
- Q5 c' l5 v. L' q/ J$ Fmodule_exit(led_platform_exit);3 N/ [# a% N. \: J' Y! |
# L5 n" I: S# @! p$ r5 {) oMODULE_DESCRIPTION("Led platform driver");: c& L" I8 c: P! r- c4 o
MODULE_AUTHOR("Tronlong");' x) S0 G# B+ s7 @& T. z! h
MODULE_LICENSE("GPL");
$ z0 p' M, L3 t. z l4 S: o/ k: n j1 v
|
|