|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 |5 X3 Z9 x# g2 z9 v: Z+ ?% k#include <linux/init.h>* c: O7 u3 G7 E; W1 M4 o
#include <linux/module.h>( C; ~6 r3 l; g+ e8 q
#include <linux/kernel.h>2 n! L& @! X1 N
#include <linux/types.h>
) T8 y, }! `0 u3 C) `#include <linux/gpio.h>
6 v Y& c- j" `/ U7 L#include <linux/leds.h>
0 c! O# n% V/ g4 }% p4 [#include <linux/platform_device.h>/ ?5 n9 ?, g- ?! G& E7 g! L
9 n+ F: D& Z1 B" P$ ^
#include <asm/mach-types.h>* [5 M$ g D2 b0 B) R" ]# F
#include <asm/mach/arch.h>
2 t% N+ l4 q! a! D, ?7 e$ n#include <mach/da8xx.h>, n% t- @8 f1 ^3 _, ]4 g
#include <mach/mux.h>
; M7 D$ `* Q, n
( i& d* e6 w d3 a5 u#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! E' b6 `) S" U8 i
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) T" O* h# g: F
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
- C; u F* o& K! A* f6 l" O#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 x- V8 b/ Q1 \1 h& _$ `
* S% Q- _: _0 P, p5 ~/* assign the tl som board LED-GPIOs*/0 ^2 [8 {3 J# @( V3 K' a
static const short da850_evm_tl_user_led_pins[] = {
5 z; w# T7 _* E L6 i" I" d /* These pins are definition at <mach/mux.h> file */
: I( n# |/ Z9 I. g1 f DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 {: O4 \. t0 Z- d
-10 S5 R% P3 r+ L5 q. H
}; B9 ?& V6 p3 d/ U' D3 f
8 ~5 {# P6 Q9 z, n; U
static struct gpio_led da850_evm_tl_leds[] = {
/ g X' B6 D2 v+ ` {) a5 V, [/ t, I2 i r
.active_low = 0,7 W9 Q1 r- e% Y6 h
.gpio = DA850_USER_LED0,- w4 i+ m. k# g7 D; Z
.name = "user_led0",
0 g8 G6 L% g# L4 H .default_trigger = "default-on",* l% Z1 ~/ V, h1 N, D% u. B
},4 n. U: i4 @6 g+ A' C2 S$ c
{
7 @1 N. [; T) Q6 }3 L3 ~ .active_low = 0,
, X/ n4 e$ `- [0 Z .gpio = DA850_USER_LED1,
* C; R' m$ b; S9 }0 H0 l& P8 p .name = "user_led1",
, k7 l2 T& v; u9 B .default_trigger = "default-on",
- ?0 U& V8 n, U W },3 C S9 R9 i1 k% W: @0 Q) p; T
{ T7 Q3 Z# y/ ^5 R0 @. }) }9 K
.active_low = 0,
" s j7 G! b/ A" z- F .gpio = DA850_USER_LED2,
0 Z ^$ S' R e+ @7 F9 E .name = "user_led2",, c4 J, y9 L d* ?7 w, R# j+ Z
.default_trigger = "default-on"," \+ h: h6 X6 i7 W' y
},
/ I+ P6 D1 E v {
1 Y- @' M, C2 i4 V1 \% M! ^" u .active_low = 0,+ Y$ _7 K F; I2 @5 i( T. I
.gpio = DA850_USER_LED3,+ B& r& S% J5 U8 P: a
.name = "user_led3",( }- ]! i1 i2 ~4 C2 f8 h. G5 H( P" h
.default_trigger = "default-on",
" |5 q# Q1 I! X }," Y0 R6 ]% F$ R9 q; P
};$ i- `" a; D8 U! `
: f _- r' N) D: g5 I
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% o, |. {* ^: d) D
.leds = da850_evm_tl_leds,; c3 S- u y. {' q0 Y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),( G; v) _* _: g9 y! k5 D' z, }
};
2 G" j# P( D+ ~- B, x8 F9 Z
' z% ?+ k0 Q* V! K' j5 w- c8 g7 Pstatic void led_dev_release(struct device *dev)
% h# b/ T/ z, s8 X$ t" v7 o{! ~$ R* H, K6 [ f" ?1 X
};5 n! Z3 ~/ c# l
- l3 {) a- n" Q6 s/ l- L$ zstatic struct platform_device da850_evm_tl_leds_device = {% f5 ?& [* r. ~, V: D
.name = "leds-gpio",* j4 t3 ^! W- k& H/ @2 @, q
.id = 1,
o7 q3 Q |4 }! n .dev = {" h4 X" L9 [4 D8 A% \/ E& X
.platform_data = &da850_evm_tl_leds_pdata,
4 s7 q3 u/ J2 @% b .release = led_dev_release,
/ b" ]% U x; e( K' d }6 F" G0 M! p! o$ w+ |
};1 Z9 T* @* {) }2 o1 A5 @, c
6 N$ x1 o% g# ^1 p( W/ e& [
static int __init led_platform_init(void)$ d7 D; \; t- J9 F, z
{
2 j! w# q; h% Z7 j4 l# z int ret;
6 S( h8 B F, R0 Y8 C' f: `6 G#if 0
* H2 Z# J$ m+ y$ Q7 | ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
6 U' `6 i5 P( @5 W6 l if (ret)
7 S8 M5 P7 r! a: R. c' Q6 | pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- b8 _/ E- }, E, |
"%d\n", ret);
7 c% x( Z1 x" k. \2 i5 X#endif
) u( r5 q1 f' B) G' `8 Y6 f ret = platform_device_register(&da850_evm_tl_leds_device);+ U5 P+ \: e% j8 p! M {/ k7 J
if (ret)
4 g( g+ g9 o# z: W8 l pr_warning("Could not register som GPIO expander LEDS");
- y1 @' m& j" g0 X2 j else
0 I2 f$ y4 D9 c$ R printk(KERN_INFO "LED register sucessful!\n");% E. W- s* E2 b. o. S6 ~# I1 \& Q
7 u1 p% r& ^/ ~! ]2 h) n
return ret;# }) \; O+ W0 Q
}! s! A9 J& \$ v5 V6 p5 M+ v
' w7 H3 Z; e- x% O+ {
static void __exit led_platform_exit(void)
3 F0 K# k" h" O9 W7 h$ m. Z{
- X$ d3 [3 f' {+ l# y7 P5 q platform_device_unregister(&da850_evm_tl_leds_device);; V7 G( d& i+ O% F3 v3 [+ R$ c
" @2 r# I# E& d3 [% S) K* W
printk(KERN_INFO "LED unregister!\n");$ G; {( B5 e* o k: {4 J
}) C5 h5 d9 V' Q& @/ q; _; @; o% Y
( K1 q+ q9 G0 N; d( W# Z3 @module_init(led_platform_init);
. l6 G! d: ?$ m4 b- ~3 mmodule_exit(led_platform_exit);9 G4 Q( [( D# L- k% N; S
5 k* h6 T/ `% z% J/ H5 p0 W; YMODULE_DESCRIPTION("Led platform driver");9 b4 O0 C/ M; ^: P2 e
MODULE_AUTHOR("Tronlong");% T+ O' g$ q" x. w
MODULE_LICENSE("GPL");9 N% J+ _: C- x" ?
; G8 H0 @. ?8 W- U6 M$ P: ]! X
|
|