|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; T" D' [$ G: X# R) N#include <linux/init.h>3 z+ K( N7 K) D2 ~( Y, J- u
#include <linux/module.h>. P: b7 ]. b! R. Q
#include <linux/kernel.h>' ^9 `, M! C) l8 e
#include <linux/types.h>
0 x1 H6 v: ~! L P#include <linux/gpio.h>! A4 t W7 F9 G2 ^
#include <linux/leds.h>1 h+ c+ B' o; d) `
#include <linux/platform_device.h>- R( U, K9 o7 L; R ]% [
- {& ], S+ a. j w
#include <asm/mach-types.h>
) c( p, M( ^+ W#include <asm/mach/arch.h>7 ?1 {' j. R4 b; q
#include <mach/da8xx.h>( ?; _/ R6 _5 n/ o5 q0 K* ^" F
#include <mach/mux.h>
* @9 S; W- _6 n8 i% ^9 O- N: ?! ?% o" t; U" v
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: s" q: }& u" Z% ?3 O+ q' Q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 k& W& N+ y3 z) h+ o; {$ B. n4 \
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), }" g+ @" H9 m
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). k' z! }3 j! i) M& A# |! W
N; q* p" v- d& ^: z
/* assign the tl som board LED-GPIOs*/) N) D2 ]2 ^$ y3 c4 i$ ]9 h
static const short da850_evm_tl_user_led_pins[] = {
5 e4 J7 l. k: {: W /* These pins are definition at <mach/mux.h> file */
; |' d% P3 E3 }7 y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ E7 n/ R& z4 y
-10 C' Z1 ~4 s' Y/ A& D, ~. C$ `% }- o
};
" _& i4 E: K h! ~$ l4 h2 w. w1 d& i
static struct gpio_led da850_evm_tl_leds[] = {
' S$ S: K+ T" S* B {# P0 i6 z4 r) s/ U/ K
.active_low = 0,5 A- g+ J8 D/ k8 D
.gpio = DA850_USER_LED0,- v" o! L, @# t% B/ i; w" f
.name = "user_led0",
: N& P- t: Q; [" P1 Z: J .default_trigger = "default-on",
% b7 `. }, M; ]' j K },
+ B) W0 c: T+ | {% t5 ^$ z0 w8 p5 [% Y$ T! P
.active_low = 0,
0 d) I$ x% J0 \ .gpio = DA850_USER_LED1,
- C# o8 J; F( }6 Y( [; k .name = "user_led1",
0 q9 }2 m' N8 B1 B .default_trigger = "default-on",
: g$ r& J& V$ B/ d6 M0 W },
( P% P0 v6 }- n1 C0 z0 o! e {$ E$ ^6 W" ^0 J6 n( d3 k* v
.active_low = 0,% s+ h7 ^3 B& C$ r; b9 G
.gpio = DA850_USER_LED2,2 b; x7 w' V& j6 v
.name = "user_led2",
7 V: \0 ?; q; R9 @/ C, P1 j .default_trigger = "default-on",
6 E( E( ]% X1 T$ l' o },
) n( h% U" ?0 E& F* H* ^* s5 Z, B1 \ {
0 H1 ^9 a7 v+ a6 s( V .active_low = 0,: k: ~3 s9 s+ s ` G5 |
.gpio = DA850_USER_LED3,; M, L5 j" @- J. U# K% m$ X, A
.name = "user_led3",
- }4 L, |7 q4 Z* d% O .default_trigger = "default-on",
$ E% q8 x% L2 A },
, g1 J6 G2 y3 ~};
9 |+ {8 R. n# m
8 Y. e# ]6 @( d3 }5 ]2 ` v/ E' \static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ Z/ B* {5 ?1 y: i/ [
.leds = da850_evm_tl_leds,3 o! B5 Q5 _& Z; z& s- B
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 }# M5 S( `$ K* p. r0 s5 x6 J2 O! P7 w};5 M4 Q4 ?% d+ ?9 q* I
1 M7 g; |0 [' P- s% T5 p# ystatic void led_dev_release(struct device *dev); @* Q3 @5 A; m& o
{ L' c. M9 G( n/ j' Y$ ^
};/ G/ y# J# [6 ^
% t; p6 E+ u, L$ a- b% C
static struct platform_device da850_evm_tl_leds_device = {9 {( \& k+ F3 O8 z5 ?
.name = "leds-gpio",
9 }0 m3 y+ n+ Q .id = 1,
- C( [7 R3 y) k& `8 c .dev = {
# x9 ?& l$ v) S9 S0 L7 _5 n .platform_data = &da850_evm_tl_leds_pdata,
/ T8 p, C! q/ c9 P. v .release = led_dev_release, g- U$ {+ y2 R6 D" g+ [: D( H
}
* e( K4 u1 T# j4 a$ v};) W4 }/ r) g% T \6 P2 X
2 G* t' M6 ~; \3 [) \
static int __init led_platform_init(void)5 W2 _& F, N6 B5 u3 H% V* }
{8 K) |) W- {+ r& [1 j: d: l/ s. j
int ret;6 a- ^6 D* }7 x
#if 04 F9 i# d0 W" z5 B0 [
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) w0 X+ ?6 B4 G, t7 |
if (ret)' Q0 B, z7 m- Y" m% T
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# {: w- F4 W. u "%d\n", ret);
# r/ g, g9 @$ b3 o5 x$ e2 ]#endif/ o3 `5 _2 k4 [0 i' r$ j
ret = platform_device_register(&da850_evm_tl_leds_device);
) }2 j$ Y4 E6 J* O! U# T if (ret)- w5 e K& J+ | c
pr_warning("Could not register som GPIO expander LEDS");
" j, {. V; n% C! y. [$ V else
1 `- r7 Y9 j7 T) w |2 l" P3 t$ ] printk(KERN_INFO "LED register sucessful!\n");3 ^$ \8 n0 l% ?9 w* x
% U: W- i& s" s+ a* T! c! q return ret;9 j* y6 h8 f5 D9 \4 V5 q
}8 f% F6 V7 z3 s% x1 j
( Y# @4 A/ C6 i( xstatic void __exit led_platform_exit(void)3 e k( L3 J& E+ j
{
$ e0 S% I& t% Z4 g platform_device_unregister(&da850_evm_tl_leds_device);: j6 t O; Q" |, S# C% Q) r" W
8 T c7 \/ Q9 ]) _
printk(KERN_INFO "LED unregister!\n");
' O3 M1 M2 D. G+ T0 H}5 w! q n4 ?7 o5 M$ z' I8 p( L4 T
" m1 d9 R" k% A$ y6 g$ pmodule_init(led_platform_init);
" x& w& g! w0 }+ i |* Cmodule_exit(led_platform_exit);, j5 l+ \8 [- i& N& @! ]4 v
Q N( g# r/ f# JMODULE_DESCRIPTION("Led platform driver");
! |9 P7 T4 n1 y* z- }MODULE_AUTHOR("Tronlong"); L% d0 K" l: ^+ _4 h
MODULE_LICENSE("GPL");/ L4 O2 P$ r! e* X7 ?
. |$ p& G& Y( q5 `) y! L9 ~
|
|