|
|
求大神给下面的程序做注解,请稍详细些,谢谢。: R. u8 x/ w. O+ v( e) q
#include <linux/init.h>/ |7 P% Q" G/ w2 |( _& o
#include <linux/module.h>8 d/ g R0 M) D3 J" n% x. y( m
#include <linux/kernel.h>% @3 u4 H% `6 X( i
#include <linux/types.h>
: A. z1 }% }3 o4 W% k' W7 N#include <linux/gpio.h>( Y, \% ^( Z8 D" {
#include <linux/leds.h>
/ |6 ~0 q9 M3 M# [- u5 L, ?#include <linux/platform_device.h>
% _4 t8 K- K2 U* n+ {) t, a& c- A
#include <asm/mach-types.h>
' h: l8 y7 m/ g8 z/ M& [+ ]' o. T6 P#include <asm/mach/arch.h>
' U6 k- `2 t' @$ p, z; x#include <mach/da8xx.h>
' n/ p; |% b0 i7 r6 i#include <mach/mux.h>
' {" Z* b+ i3 v; F9 f/ u) n$ E) J' j0 \/ b
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0): i2 x Z( r1 C' N" V/ G% s5 L8 {
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), N) J) C, b! Y4 Y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 z/ X4 b" z! |, r! k0 m; [#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ X5 B/ @$ |- I9 C5 k$ r3 P/ d8 A, j# j3 F: ^4 W
/* assign the tl som board LED-GPIOs*/
" F5 y* R+ u$ q) }- q3 Cstatic const short da850_evm_tl_user_led_pins[] = {
' g& b# K2 ~/ |7 N$ U: |7 ^ /* These pins are definition at <mach/mux.h> file */, P: C C* ~2 S: v
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ ~7 D) c1 I( [& j& u: {4 R
-15 Q9 y+ D3 T% y2 V
};
5 k5 I+ W) ?* Q: P+ k7 x) E) w4 |& Q; d% a1 I. @
static struct gpio_led da850_evm_tl_leds[] = {
1 ^2 _, c N/ j( Q f ` {
% ~. X- s$ z5 J .active_low = 0,
$ {: f0 f" o; @5 ^/ M .gpio = DA850_USER_LED0, y* j( _% J( b( l4 W
.name = "user_led0",7 h3 B2 }8 F$ Q# F+ X% j+ b
.default_trigger = "default-on",) c% V% i! T! ~! U. o: M4 B, v( W2 M3 c
},
: u( X! }0 m8 `5 Y5 v7 X# l( J2 k- i {
# b1 ?# Q: x/ y2 [( ^( L/ M .active_low = 0,7 t! \4 F% b9 {. p) o
.gpio = DA850_USER_LED1,
8 D: q' R' d# O) O/ W# \, ?6 v .name = "user_led1",
8 s. g3 e/ C# ^* @% Z+ j .default_trigger = "default-on",
; Q7 b* z$ e; f* y, M: |5 e7 u; \ },
+ f' X# U% h6 C {
( _5 O7 o- `/ ~: g .active_low = 0,& J( o) C% a" K' B
.gpio = DA850_USER_LED2,
, w& H" G3 Y; Q .name = "user_led2",
' d/ K1 a( X i8 h* p .default_trigger = "default-on",2 l3 d0 P, w' b9 R7 u
},
3 t; v0 Q* t* E {
- y3 f" r! D, s* f .active_low = 0,
: I. G |3 b1 l .gpio = DA850_USER_LED3,# L3 {8 }$ }: h1 J& _
.name = "user_led3",
# F- f3 a& p7 q6 g$ E+ } .default_trigger = "default-on",: d: B: S9 D; A
},
% D1 \+ U% B- r# s& T5 s};6 P7 n9 p7 M' m6 {2 M# D
8 [/ {# u! q. f8 _6 H' Pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {8 P1 ~2 T( A& I
.leds = da850_evm_tl_leds,9 @. ]- x; ^6 p$ x1 C. H
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),: P( G7 ?6 a% S) F! l' c1 j1 W( a
};
0 A1 N; X& K7 L, @7 z# ]0 C. J+ L9 K1 c. _' C4 H
static void led_dev_release(struct device *dev)
& `# M; e, \& {3 p- Q; e9 l* A, a$ {6 {{
& }2 a2 ]# m7 r5 L# I};
- J# D/ e# t( o' p" A
: s% E& t! r+ P! _6 m: ?static struct platform_device da850_evm_tl_leds_device = {! [4 N3 t. R4 U: p
.name = "leds-gpio",
2 `5 z" v" i5 ~( E* T2 O2 [8 s .id = 1,$ i0 Y, d: R, i$ ]2 {& ]& E. y
.dev = {
' C% ?; P' _* a- R+ v- D/ z, M/ z& U1 E1 q .platform_data = &da850_evm_tl_leds_pdata,6 t' \! V! @5 g( _
.release = led_dev_release,
* O$ `2 c5 M. d; Q8 | }3 a, r5 Z5 G3 E$ [0 g
};6 _# t: L* ?& e2 J1 \$ i
3 o: q& ]2 m" \% d' q3 x
static int __init led_platform_init(void)
1 y. ~% B% L% _- o- z. ^; E{
2 r4 B6 X; _7 f, W int ret;; {- n& Y' m, `: S# R
#if 0
# N# e9 h0 [& r' e' k ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, Q' W4 [ `2 i& d \, Q/ ~ if (ret)6 O7 U8 q# p7 m( I
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ `: T7 s& V# o: x
"%d\n", ret); u7 X" n: L9 l' q7 t' v
#endif3 u$ M! P7 ~6 \! c7 W# V2 m7 i# ^' d
ret = platform_device_register(&da850_evm_tl_leds_device);
4 v+ w+ \# t2 H3 J# d if (ret)3 i) d* b6 l" r, S0 @$ J: [' q# |
pr_warning("Could not register som GPIO expander LEDS");
8 j( S' W( U4 A& N4 B5 \ else
" E# f+ u5 v( F# M. x& D S7 d printk(KERN_INFO "LED register sucessful!\n");4 {+ E; S9 S+ l1 A3 S' w; V1 c6 [
3 Q- G* D2 A( b6 O return ret; h7 _( d* \ e" i9 m/ ~& T8 j3 T
}' k1 H3 I- r/ p* l# f" p
' J( E) C( s: G, ]% Jstatic void __exit led_platform_exit(void)
6 n" N5 d6 s0 O2 r/ ^3 A) E: j{$ C) a) E. V, k5 a4 J9 ^8 o1 J
platform_device_unregister(&da850_evm_tl_leds_device);+ O9 [' r. \+ ?. K% H4 T; x
; g4 G4 n% `8 n
printk(KERN_INFO "LED unregister!\n");
9 U* G7 Z, x* T: g+ X$ }, e7 e" o}
; v! B e* H. ]. i5 t
$ q' G. \( B9 o) p/ d; ymodule_init(led_platform_init);
$ _6 j9 f' K! q7 x# P. [+ Hmodule_exit(led_platform_exit);2 o$ W/ m# k1 a7 w, \7 ^2 U6 ~
" B. S. q7 j @ xMODULE_DESCRIPTION("Led platform driver");6 U- ~! z% s3 X S, ? t
MODULE_AUTHOR("Tronlong");
1 z' z, e, U# {/ }) WMODULE_LICENSE("GPL");
" k# a+ K9 X; t$ a! q0 ?9 z* c4 U* @
|
|