|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' a3 O7 | V: G" ] D2 }
#include <linux/init.h>
( C; x* j7 k C7 h% b4 r9 T/ y2 D#include <linux/module.h>
3 ?6 P. d, P' r2 _% b#include <linux/kernel.h># E2 U3 b) r# f
#include <linux/types.h>% E4 f3 p8 N; b3 v/ ]
#include <linux/gpio.h>
7 l% P* |. r2 ~#include <linux/leds.h>/ D9 z) ]8 g" U7 M( O; w: R, M3 h
#include <linux/platform_device.h>
0 ^. P8 `3 O+ |
9 \8 l7 [+ @/ Y" Z' l- F6 s#include <asm/mach-types.h>
( L9 P( X5 Q# c$ C#include <asm/mach/arch.h>
( b( N b& U1 w$ [% m- `& |5 E0 Z#include <mach/da8xx.h>
: {, k. E/ `* ]#include <mach/mux.h>
+ i5 z8 c1 o W c' `. D) A1 N. y7 n
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% C5 o6 y3 ^8 O8 J5 O7 R; j. E/ z& w2 {#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( P2 D- x& M8 z9 r2 Q5 k
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1). [6 P7 o `' M* i& @' d. d
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 z4 ^0 a1 f) ]" Y
! L& G0 y, ?4 j b: @' U& Y7 l9 P2 R7 Q/* assign the tl som board LED-GPIOs*/1 `, t0 m3 I# I: Z
static const short da850_evm_tl_user_led_pins[] = {3 ]& [4 F6 [+ s4 P: O0 O
/* These pins are definition at <mach/mux.h> file */8 [/ d5 B9 x5 V
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 m5 o3 v) g( z+ ^4 J' g" P7 h6 M) _ -1
" C1 w1 L0 ?: k0 I};1 B, h" R* c; Y! W8 C) w8 ^2 T
' w+ P% r8 W0 W' N5 _# u( H
static struct gpio_led da850_evm_tl_leds[] = {
# q! A, k. ?7 b0 o {
/ B4 R+ M: g5 M- {- [* [! a. m2 | .active_low = 0,
1 G8 J: h* n* y .gpio = DA850_USER_LED0,7 G, }% D4 C! k, E* ~" a# b
.name = "user_led0",
' S5 _( L% s8 o .default_trigger = "default-on",
/ ^( k7 b0 |+ B) S" F! D9 Y },
W5 A% V+ w C, r {2 p" u. ^1 o7 {2 \
.active_low = 0,& y& t# b* \: z( g" c5 j8 W' z. R! ]+ I
.gpio = DA850_USER_LED1,9 i4 `# P! c% b1 n* v. y
.name = "user_led1",7 K4 q/ _7 _: a9 O
.default_trigger = "default-on",
) y7 u, ^& \. Z2 h c) q9 F* i },
' H8 d, H9 ~# Z! Q# y, R% C {
5 T+ I$ n$ f8 w$ I: M" W* R .active_low = 0,( u5 d/ M) H6 [0 a" c3 ]0 I! u: W/ c
.gpio = DA850_USER_LED2,
( V4 z7 ^* B) g6 S. B .name = "user_led2",; F# b6 e* P: y# O
.default_trigger = "default-on",
/ M e" `" J' L3 P9 P },. A% c9 \% x# A8 h
{2 u; z; I$ @5 B
.active_low = 0,5 ~. [% X2 u# W- R+ x
.gpio = DA850_USER_LED3,
/ Z" }9 y0 p5 V% E) l .name = "user_led3",
n- D/ [# [& R+ N .default_trigger = "default-on",
7 N; F6 d9 I3 b: i }, M$ X' K' [3 y7 Y
};% A" \: C3 d p; T) |
. {$ r# k8 Z7 S" tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {4 C) u% l) n% U1 y0 |/ S& J% t
.leds = da850_evm_tl_leds,2 U" S, O7 A6 H0 u8 v
.num_leds = ARRAY_SIZE(da850_evm_tl_leds), @8 o" u/ @0 [( }' O3 X
};7 c5 j6 q3 L7 v( @7 S2 E+ U5 \
C5 L( w% Q: `4 o0 D6 }! |3 L* n$ h) Vstatic void led_dev_release(struct device *dev)
1 z* ~0 Q. b- J. L9 P{9 K6 h1 n/ [+ |5 }7 [7 p
};
: u, N0 v+ [. o7 A
4 K) ]" ~* `3 B7 T# I! Y7 i$ Pstatic struct platform_device da850_evm_tl_leds_device = {
$ E/ ]# I. B) v5 F5 ?3 y .name = "leds-gpio",5 b8 f, v, ~: S
.id = 1,
j) `6 ^5 D8 Q .dev = {, s+ ~ s. [3 n! ^9 Z
.platform_data = &da850_evm_tl_leds_pdata,& G6 u% D% ~$ _* E/ I& E$ Q
.release = led_dev_release,
J+ C8 U8 Z, v+ x" L( {' b8 Q; v }, ~% E- I. E$ a* k
};. t& l4 d& C2 V2 d; H* i
% A5 q" `! |, u- C" p0 Ystatic int __init led_platform_init(void)0 e& o; ` `5 k1 ]* P2 i; E& X
{
$ v2 F+ c' z/ }1 @, A int ret;, p* s3 I. V! j S2 ^8 p/ v, D/ S
#if 07 l N9 S. k' p# D2 Z8 G6 Q4 w
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);2 t" R5 z- g9 `) _8 n% }" K
if (ret)
3 F% N8 j( y# k, e/ `: ^ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ T. ^/ L) Z# S1 F% j5 w3 x4 e "%d\n", ret);
+ U$ j' E4 s+ F) Y: c( b6 |% Q _0 Z0 W#endif( T/ `( I* a# Z( ?5 `
ret = platform_device_register(&da850_evm_tl_leds_device);
e7 e6 [: G/ e; n3 z4 Y if (ret)
9 t5 @# f& |( _5 _ pr_warning("Could not register som GPIO expander LEDS");# C5 {) y4 o1 {' k0 t$ r6 M
else
. M, f4 @8 w& L7 A+ P/ h printk(KERN_INFO "LED register sucessful!\n");
/ T5 Y4 Q# Q$ r# |! G2 Y' c, v- |% f- d; N
return ret;* A0 H: V' v$ U e! M0 v6 T
}# A5 S3 _8 v2 q; `+ T! ^% s
; W) Q- D s8 Bstatic void __exit led_platform_exit(void)* T( p. m" D/ u! _0 o8 e* N- ]) Z9 D
{0 V. g$ W6 @6 H4 A4 U
platform_device_unregister(&da850_evm_tl_leds_device);
. ]$ u' S' t4 y9 @/ {- d0 X# A8 `: `6 }, {
printk(KERN_INFO "LED unregister!\n");, g( H) l2 P! H) e; }1 Y1 B; T+ p) ?
}
N& n0 S+ y0 J; N1 k: f# S' e% V3 {! X
module_init(led_platform_init);
$ }% F V, f% umodule_exit(led_platform_exit);) U7 b! ^- z9 C7 Z6 p# z7 @
" J8 z5 f" I4 A; K9 v4 T& ZMODULE_DESCRIPTION("Led platform driver");2 g' @7 p. I* f' p
MODULE_AUTHOR("Tronlong");; D* T# Y: f) H& B. m' f
MODULE_LICENSE("GPL");1 z1 d# K: F0 i3 R4 P& x1 ~( N
' P% O! Z( a- i4 I |
|