|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
O! J& n$ u, F# A! a#include <linux/init.h>
# Z; o0 m* ~3 B" T#include <linux/module.h>& F4 ~1 ]# V. P" D& L! V' b
#include <linux/kernel.h>* g/ U, }8 }1 B8 D
#include <linux/types.h>1 z& N1 l# s# `3 E9 H
#include <linux/gpio.h>' h& k+ G; H* ^* Q! U' a; k
#include <linux/leds.h>3 q; P$ M+ q, N
#include <linux/platform_device.h>, t" q; z" Q7 g9 ^8 C+ r% a
8 x- r! c% H O#include <asm/mach-types.h>$ B: g) ]. p) h! i) K
#include <asm/mach/arch.h>
4 o1 u; u& m/ B; d. l6 k#include <mach/da8xx.h>
& t/ r' D! h1 `7 y1 B. m#include <mach/mux.h>
0 q. w- ?$ g8 b( p1 c( d7 s- A
2 M+ a$ f3 i. W* Y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 N$ {# L4 n0 Q# U3 O
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 o7 P5 c& p0 \. E#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& m4 @- ]$ J7 B* k
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 u6 g* h6 ^9 C# A. O& {6 v
+ ~, N+ ~! d+ S
/* assign the tl som board LED-GPIOs*/! K2 W# u* e; h9 u: X6 A' H
static const short da850_evm_tl_user_led_pins[] = {
6 _6 g$ J5 s m: [+ d# m% |1 d8 B1 i /* These pins are definition at <mach/mux.h> file */
& _( i2 L4 j7 c# h DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) v- a# g7 _5 s- x7 w( W5 ^/ a+ ` -1
. b V1 W# | l$ ?};
0 B: t" N0 C% G8 h+ ~4 y( }( ^2 ]$ A8 K7 a7 u& Z
static struct gpio_led da850_evm_tl_leds[] = {$ ?1 _. m, k1 s, d! m, a/ g* l
{8 ^& j* Y! D, z- ~4 M$ t' d( B
.active_low = 0,2 I* G6 l) ~# o7 _4 n
.gpio = DA850_USER_LED0,
8 d. S7 L d. o0 d4 B .name = "user_led0",
/ I, F9 i) H- ]" M. U' h .default_trigger = "default-on",
' o0 ?/ r8 M6 E, E, m3 N! D3 C" w },
9 K0 {1 _: K% L- U0 Q1 A; \ {
5 f3 d7 |% {; V( W .active_low = 0,
, f5 ^8 [& \: S .gpio = DA850_USER_LED1,2 f( s; X" H' b7 Q& c
.name = "user_led1"," [& g0 M; R. {* J7 \
.default_trigger = "default-on",( t% l0 ]. U o, V$ a
},9 H6 t; x% Z" X/ I9 z% D
{' |2 A- s: i1 @+ ` `
.active_low = 0,- ]0 F$ f" v' R* z; t5 `( N
.gpio = DA850_USER_LED2,
J/ k$ H, Z# Z: ~ N! {. A( q5 Q .name = "user_led2",
+ `+ \/ ^0 v% h9 R2 H .default_trigger = "default-on",
" F* X0 t2 ]' E1 M2 Z* w$ X4 n$ j },
& `" M3 L7 m5 |1 ~( ~: L$ B- D {) k' d( P4 T5 w5 L% G
.active_low = 0,* _4 @- m1 s7 b% E3 p- B6 t7 c
.gpio = DA850_USER_LED3,
' j' S8 |$ h5 c$ t& C6 n' l .name = "user_led3",3 [3 M x, C. _6 t. |
.default_trigger = "default-on",: j2 X) N5 Z! t0 m2 L8 l; s9 U
},+ e& C4 P; c) T3 I. r" V& k, M
};
- _- Q* u. d. i! n" m4 m2 x. T& `
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" N8 _& L+ j* j4 j3 r
.leds = da850_evm_tl_leds,% B: z$ S8 t; B7 b5 h
.num_leds = ARRAY_SIZE(da850_evm_tl_leds), F6 A! P e2 V9 o
};7 u9 h- @6 \ U& Z# J4 p
% h+ v7 r1 {, u* qstatic void led_dev_release(struct device *dev)) l% ^+ \' @5 M& B/ G4 K
{: q0 Z$ u4 z8 J* H. x. g
};
, F7 D: \) \+ W" {( q6 j& G1 Z) r! b# D. }/ k
static struct platform_device da850_evm_tl_leds_device = {, ^3 z3 [' d* r! @+ V" A- f
.name = "leds-gpio",
* y: m. v2 d8 P% B% f r .id = 1,
: S. R3 d+ j: j( S6 s" m' U .dev = {
. F5 R- l* _8 R C .platform_data = &da850_evm_tl_leds_pdata,
5 ^/ l4 I. A+ z( j5 r8 F0 g .release = led_dev_release,6 m& {3 ?# d* y8 R: B
}
& e5 ^) b! ^4 m7 u4 y% Z0 x}; T+ L a9 g, h3 H6 C4 h0 k
) l* _. G6 x* Y* G: d- }static int __init led_platform_init(void)
0 {) k+ T" d* Y) u{7 \( O6 N+ m, r2 W- V& A4 u4 U
int ret;6 c$ T1 n6 ]) _7 j/ l* _
#if 0
; t% v g( p1 O/ B" a7 R ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- v: c/ Z: E* _ if (ret), M, r! U, J, t6 t
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
3 ^" A( u' N' U( j "%d\n", ret);
! {2 R3 b( K6 M9 h, S2 Q# m- V#endif6 y& x% S4 p& C
ret = platform_device_register(&da850_evm_tl_leds_device);
9 b0 g) E r- }) \/ H" U if (ret)1 q1 ^! r" |% @8 }; p. ?
pr_warning("Could not register som GPIO expander LEDS");' I7 {4 }' {% ^! _% \5 d, C7 a
else
" z, a/ m) J5 L0 d printk(KERN_INFO "LED register sucessful!\n");% D0 D! [% P1 k4 j3 b$ S, p
+ l) y* n6 y# v! j0 I7 z$ n
return ret;/ C8 M0 u1 h' K" e* L6 {* [
}
B, d# d1 a0 j/ {- F4 m5 l \& a6 g/ r
static void __exit led_platform_exit(void)
+ [- L2 g+ A, f{( J5 @% d& G4 X; L: t* E( I
platform_device_unregister(&da850_evm_tl_leds_device);
- q: B, t3 F4 _9 p* x7 d6 p+ P0 A% |2 a% f# C/ N! K% y
printk(KERN_INFO "LED unregister!\n");
& x8 F1 l( q2 H! C}
1 g& b0 m* V. B
6 l* A3 c& d- u/ P. bmodule_init(led_platform_init);
" |; v0 c" ?6 C- J; zmodule_exit(led_platform_exit);4 j/ A5 ^) L: {+ U1 n+ \' O
4 a% |9 u: M: v* R+ D- b! j
MODULE_DESCRIPTION("Led platform driver");) A5 C: v9 Q8 m: a8 G( m
MODULE_AUTHOR("Tronlong");$ E$ t, _% {( e) O# h
MODULE_LICENSE("GPL"); p; h% M8 J( {) \3 V
' g/ ~4 p4 I# P2 X
|
|