|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& i* a$ @1 @- h- Q
#include <linux/init.h>. E% l9 A2 g' C0 n/ _" i8 I, O/ A
#include <linux/module.h>
( ]4 V Q% M9 m9 ?! A0 m0 Q#include <linux/kernel.h>
8 D! m! j( m3 e2 q' L8 W' V% B8 g#include <linux/types.h>
' y( _; I; k: {$ ?( E% [#include <linux/gpio.h>9 a0 c0 _- W# U
#include <linux/leds.h>" a n9 X* r! J) `2 B
#include <linux/platform_device.h>
+ o/ l6 Y6 v" {; N3 j( Q; m; N/ _0 b+ G9 i2 T0 V {# N+ X3 l4 X h
#include <asm/mach-types.h>
5 Y( A- L( k* _: X: g#include <asm/mach/arch.h>
7 v: o0 K: |. t5 d. E. e#include <mach/da8xx.h>. s) t" M4 z: k5 c" V; b
#include <mach/mux.h>
/ o0 G( j$ B. O* W5 s' Q$ N. w& V) ` s8 ^* B& Q3 y, |
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% g6 J, D. r) ^7 F! Z7 R+ y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); ], Z* c) n: Y" l
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)5 v, `9 s2 e9 y c
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- Q- B( ?, ?" N$ ?) c, f% j
- N* ?4 |: e, J7 [; U5 L$ V
/* assign the tl som board LED-GPIOs*/
W+ U+ |: H- U9 {static const short da850_evm_tl_user_led_pins[] = {
) i6 [, D$ c# ^% u. V /* These pins are definition at <mach/mux.h> file */; h. ^ [% G+ L6 _- G/ R' u' P6 x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," \' s' g2 i; g) y4 ]+ T. B
-1
, S: T: x& E; z& _* M: _1 N};' n* | H: _; D6 D
& h) l O# q$ a) b$ Y5 gstatic struct gpio_led da850_evm_tl_leds[] = {; O# {. t, f) ?$ F, v/ M6 K5 K
{/ Y" H* q: Y0 {% Y& k
.active_low = 0, Z0 g9 S8 x4 Q1 ^
.gpio = DA850_USER_LED0,; C2 ?+ }8 _ M2 m$ X
.name = "user_led0",
* n/ i, @8 c# M+ g+ D .default_trigger = "default-on",4 w. A( Y2 y9 F3 t1 n
},
" D" r/ l- s2 V" ?4 j; `: z {8 i4 i: V+ b6 d7 j# E# k
.active_low = 0,
7 t9 A5 V% o& r+ [" c4 ?$ Y1 y .gpio = DA850_USER_LED1,
. x* F3 |& k, L1 u: z .name = "user_led1",4 r2 U `$ o+ W ]( f( P6 j# Y
.default_trigger = "default-on",/ [& O9 s5 v k" ^3 T1 c
},
' b. m" a1 w7 _# \: r# }* Z {
9 O. J2 n: Z! K7 ?2 C# B# v/ p0 h' v .active_low = 0,
4 e0 ~5 y' B2 S8 T .gpio = DA850_USER_LED2,) [* D: E( Y0 \5 l U* U
.name = "user_led2",$ l: h g# v. x& m! q# _2 J5 {
.default_trigger = "default-on",* G8 v5 G; j( Q( I/ D6 R, _
},# Z# d5 q; _& P: O0 F: O
{
. Y1 ~' j* ~7 J; T0 | .active_low = 0,
( ^; {6 l3 M$ t1 U$ f+ U .gpio = DA850_USER_LED3,
! N9 @$ d- a5 g3 b .name = "user_led3",; R3 c6 V5 g4 ~( H. `( g. T
.default_trigger = "default-on",
- q" C+ D# r2 \( t2 D6 ^# L4 r p },2 X5 h- Z6 b y# t; ?
};0 v" ~* ]+ M* q
: C8 @- K, L3 i3 t
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
# g* s: L0 t0 _5 z; T+ B+ Z4 f7 Y .leds = da850_evm_tl_leds,1 p6 h5 B" D4 E2 w4 V2 ^- {
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),& T; h1 C+ f5 T# ?
};+ X8 {/ y+ v- B
1 z. ]' ^; h& d' Q5 g& S
static void led_dev_release(struct device *dev)
- w9 ~9 |( z8 \8 l! P0 o. w3 E{3 i/ ]: V7 W% m4 X" b
};
) a7 e. g+ \' `2 ]1 Z) z2 c/ v+ U9 v: n: A3 G0 A" @5 _) n% b U5 F
static struct platform_device da850_evm_tl_leds_device = {, k8 J H( H1 L1 C% m
.name = "leds-gpio",
8 j5 y' `6 t1 i .id = 1,' I% \9 _% }2 S
.dev = {
1 w2 r8 I" V0 `4 E. h+ X .platform_data = &da850_evm_tl_leds_pdata,; U6 i+ Y, ^+ M) k/ H
.release = led_dev_release,8 ]/ H* _5 e) f0 a7 w
}
0 q; Y. G5 r7 s, T3 K- T; W/ r! w' u};' z; u+ H7 {" n7 I2 q" M
+ d, Z# r/ E& d: E# C/ k4 `static int __init led_platform_init(void)
& D5 G% S$ H! o0 D! T/ x& c& _2 ~{3 w( T' k8 ^* P! E; C+ N1 k' ^2 |; S
int ret;7 L2 F# d- R% A. h
#if 02 |, a9 r" z6 T. U+ d
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);2 e" M ~: T' t
if (ret)
* `5 G1 t! }7 r pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 f# p" C1 c) ?
"%d\n", ret);
+ J7 j6 z1 q" l+ j#endif( l6 C( X2 E7 d0 g! J# g }
ret = platform_device_register(&da850_evm_tl_leds_device);
- d& u7 |5 `: F) d2 ?1 t4 g if (ret)" _$ J# {5 |5 g' B3 g+ \4 u* b. z
pr_warning("Could not register som GPIO expander LEDS");* v' i- s8 y B7 Q2 r. }6 i( e6 u7 H
else
* j9 g$ Y; B. t: Q; X- E1 p printk(KERN_INFO "LED register sucessful!\n");
5 r) d, [0 L: ~! w& m4 B( X3 y" b) _) Y1 I- z, j
return ret;6 C) H2 e S" W9 T5 j6 ^
}
9 W9 T3 ^' c8 P2 n4 q( k, i9 Z I
static void __exit led_platform_exit(void)
" B _4 f& L) ]) L& h) n{8 Z8 @3 ^/ j, U& K3 \1 f' L* H
platform_device_unregister(&da850_evm_tl_leds_device);
- m+ a1 L( f' r) C; O
7 d" P0 {2 m+ ^) R/ f$ e9 o- e% ~ printk(KERN_INFO "LED unregister!\n");7 e q9 i3 T5 \! C
}
7 W# l: O3 s- ~) T0 k3 z, p# v' D% I. z* V7 _% `
module_init(led_platform_init);
4 f" i% @8 e- |4 S& Ymodule_exit(led_platform_exit);
; F1 v8 ^ M; x# S, B C9 {6 P" c% f S9 w+ S6 X" u* l0 D% k; B
MODULE_DESCRIPTION("Led platform driver");
1 [( `' @" s6 m- O$ c( z5 K" x B. lMODULE_AUTHOR("Tronlong");
' B( I& a; q8 a7 }" o: t, cMODULE_LICENSE("GPL");
/ R5 p! a+ }9 W* A
! i; O, g) H# h1 X9 K S |
|