|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( H! }/ m. z' j6 L5 n- ^$ R' Z) o#include <linux/init.h>7 v! n: [. c) f7 h2 B, _3 N: o
#include <linux/module.h>2 x* p* }" i* {) y2 k
#include <linux/kernel.h>3 s: @0 w0 ], l! ~/ i
#include <linux/types.h>
P. [* l7 h& Z5 S: r# k#include <linux/gpio.h>
: e% j4 S5 f" n! _9 J# p Q1 S. y#include <linux/leds.h>
. r1 T& x- H5 I6 Q#include <linux/platform_device.h>
! q+ ~. R+ _ w: l/ n- c
A3 _ F. b" w$ L: I y#include <asm/mach-types.h>
7 M& V9 J$ Q7 M. j: I1 ~( J/ b#include <asm/mach/arch.h>; }& I1 U& J+ f3 s& v4 ]
#include <mach/da8xx.h>
8 |7 p# z1 W& s' w#include <mach/mux.h>7 k2 j0 ?" Z& J/ l+ n3 \
9 ^" o" h, H2 m+ T#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 p' g% I$ v& C; E- d9 N! o" ]
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ ^0 d( S: B* f+ O#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ ?) `3 I1 d8 B) r$ r9 e+ H
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" O: ~ j: V/ g$ b7 h+ I* x" v' L0 R3 q# y6 C
/* assign the tl som board LED-GPIOs*/1 q& F' n6 N L V4 D
static const short da850_evm_tl_user_led_pins[] = {) V. m7 w) Y$ e6 g4 @5 g7 ?
/* These pins are definition at <mach/mux.h> file */5 t: ~( n. `1 [: z/ Y; b6 ]5 H
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) R# P7 n- R3 F/ y" s$ | -1
( a7 g2 l: f" ~};
( T9 e; O/ E1 q. z, t8 Q3 i7 o6 P4 }8 ^# @8 X
static struct gpio_led da850_evm_tl_leds[] = {
% ~" M! C$ H9 u( H) i) Q9 { {
o! e4 _9 h- j( A .active_low = 0,0 w7 e0 j+ g- v/ W: O: G
.gpio = DA850_USER_LED0,7 M+ b: H2 Q( ]& D
.name = "user_led0",5 j) f4 q# d7 {4 ~# x, s6 f
.default_trigger = "default-on",
6 U. M& N7 J0 x0 y# `6 l }," M1 C* t5 y$ ?' ~) Q6 X; p
{
; ]; E: Y3 a" m8 a ^& N y .active_low = 0,
# U# T. I4 L# |9 q! d .gpio = DA850_USER_LED1,9 F4 z+ _. l* x+ ~
.name = "user_led1",
; X7 C" u- p# x6 P$ Y w3 H$ W" j3 V .default_trigger = "default-on",& P! o7 G/ a% D7 f8 { ~
},% b+ @/ _0 F0 Y- J4 f/ a
{3 T9 I9 H4 C2 z# y
.active_low = 0,8 v4 x* W2 e$ E# Z! V; w
.gpio = DA850_USER_LED2,
& H( R5 v% ?' q }: Y .name = "user_led2",
a: e2 D" \) C, L9 b, k: x .default_trigger = "default-on",
9 v2 d/ H& T& k7 r6 z& I4 { },
6 F! V+ \: n, `0 z {
( o: I9 ?. E% g% Y4 }; S .active_low = 0,
. V7 c" B) y; D .gpio = DA850_USER_LED3," p+ ~" |! b. N# H2 _: F
.name = "user_led3",1 L! Y" Y1 }4 V8 g: f2 j
.default_trigger = "default-on",) `( I% f8 N& u/ m. i
},
, y! ^; ?4 z1 v4 y, d};& u: d) h/ w2 ~; g( t9 s# q' H
2 X9 \" b. j% u( `8 W
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 K+ y! j! |2 \ i! S# M% f .leds = da850_evm_tl_leds,
' L2 M$ \1 P* x9 W3 V3 a, O9 {5 e* A" c .num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ A' t: f" P( K$ \- @1 U2 ^; b6 _
};- U# G7 l0 C; f2 f, b& ^3 `
# i, i2 H9 r# |3 `4 N" u
static void led_dev_release(struct device *dev)
9 z+ u5 V7 }$ |8 O" o7 [, F* T{
% R7 i1 C5 b: ^% j. _% j};
; R2 a+ z0 {, Q8 V7 Z5 T$ Y4 U" Y* M* x% T2 I$ m
static struct platform_device da850_evm_tl_leds_device = {; m& @1 u j* O# K5 u* `
.name = "leds-gpio",& {0 E& }0 B1 N
.id = 1,
' w6 S# [$ O1 G6 ]# N) Z .dev = {) u1 e# c1 E2 L8 m" i1 v
.platform_data = &da850_evm_tl_leds_pdata,
3 r1 Q5 `: t- @ .release = led_dev_release,8 b& _/ E) X! J" Q
}# r2 g, n1 ?1 u: I
};
% @9 \5 q8 Y6 L6 H) f0 J. P S& w; a3 i. L, u
static int __init led_platform_init(void)" o3 s, [/ d1 s
{
# T2 |' g" ]) y V+ n& W. F) j int ret;3 b1 }! a0 C* W u
#if 0
0 [" }( \6 \" a7 K ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) ^7 d2 n @* {$ a9 g
if (ret)% \, P! T3 E' x( w! T$ g
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 i, X! @# w3 i7 R
"%d\n", ret);
1 w, {) m: J9 o#endif
4 u) N0 z7 O# J% W ret = platform_device_register(&da850_evm_tl_leds_device);
! B7 Z2 ]" ~( v0 b if (ret)/ v o% M) K ]" J% b
pr_warning("Could not register som GPIO expander LEDS");
& P0 E& K1 W. ^% K7 T7 N else. b% |& j; F, F* R8 L: ]4 i
printk(KERN_INFO "LED register sucessful!\n");' v# C$ ]7 k+ V* q6 y) D
d" v5 `8 h' @1 T& t
return ret;% j/ m# U$ L9 t% @. n( q0 e- u5 P
}- g, X' G6 k1 d5 Q; _
' B) o) C' N' q
static void __exit led_platform_exit(void)
; C; ]7 I: h& C: D9 `{
0 z& ~8 |2 C$ Y- K platform_device_unregister(&da850_evm_tl_leds_device);
9 h O6 J! i( ^6 m7 e M) @
/ P# K _$ k" w printk(KERN_INFO "LED unregister!\n");9 t% `! W& R! Z4 W- C6 s4 Z
}
$ ?& o: c! M; d' N* C, q
& [6 U. I4 Y, K* p2 B/ u& Lmodule_init(led_platform_init);& Z, A% e# y7 _# w" q7 M
module_exit(led_platform_exit);
$ z0 h5 i; F* p
& F8 k7 E% x, V# YMODULE_DESCRIPTION("Led platform driver");
3 Q3 w. n# A1 h3 ^) v: l1 AMODULE_AUTHOR("Tronlong");
. Q7 \1 b0 n1 ?+ H# b+ GMODULE_LICENSE("GPL");9 D" |* I" }6 Q5 B, g! {2 L2 E, L
! [' I6 ^$ Q& P5 }$ m* ]! s3 B& _- c
|
|