|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& S( u( V6 q5 V7 p; q
#include <linux/init.h>
" H* \, e u1 p7 W( l+ e+ b#include <linux/module.h>
, J2 L* ]: S- g" d2 Q5 s#include <linux/kernel.h>
7 t" Y5 h9 t( r, z' v' n#include <linux/types.h>) C: _6 d4 p0 q9 h9 S4 \, g! b% r
#include <linux/gpio.h>
, g; h7 W; e$ Q( b1 l& ?#include <linux/leds.h>
" x$ Q! b% \1 u) X, N$ n#include <linux/platform_device.h>
+ F5 z/ X4 k+ W7 i+ j- g0 w+ W3 L8 V8 {- p5 f/ x; d5 v1 T, k& u
#include <asm/mach-types.h>
/ D o) z, q- L5 ]#include <asm/mach/arch.h>
- O9 r8 n4 `+ w+ @+ A#include <mach/da8xx.h>
$ z/ [$ a" @8 f) \* d1 M# G#include <mach/mux.h>/ U# J& `4 v1 D. l% C
0 N% w9 X$ y! f/ W& ~
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 `5 ^, [& Q' s9 `' o" ]) I
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" n* ?: [$ {9 e) T0 ~, {- V#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 u' Y5 i5 _+ ]- \#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* ]3 d" K1 A+ q! _( j1 m1 r* A
% o" D, x! S |, a2 L/* assign the tl som board LED-GPIOs*/# H v; g% d) a6 R9 C4 b
static const short da850_evm_tl_user_led_pins[] = {8 M( U. q/ D5 {' X/ \2 S: \8 x& L
/* These pins are definition at <mach/mux.h> file */! j( E0 j8 \4 l
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 I+ s' }6 p" e5 F6 k: [, r
-1! \9 M7 j0 U( a# r( o7 u
};( {# M0 n$ a4 }, Y: l+ s i
9 ]0 l! s# G3 a) K# |
static struct gpio_led da850_evm_tl_leds[] = {
. m, Q5 D+ M* ~, i( }$ b {7 e* }& @( h1 x' W- |8 P9 @5 y0 z4 o
.active_low = 0,
' H* M# x& t2 J( O. W1 e7 ] .gpio = DA850_USER_LED0,
( ?4 r- h" o0 j( ] .name = "user_led0",
: w3 |6 A8 ] i! U- ^ O .default_trigger = "default-on",7 w. v* T7 m5 O
},
9 E- O1 H! o$ m, f' z- p' c {
" O# u2 H5 q9 k: Z/ c- y .active_low = 0,: {; U9 G8 w; k& g# p
.gpio = DA850_USER_LED1,& C5 |0 ]: J' u$ f
.name = "user_led1",
( q5 T. M4 w1 q, B9 M9 [5 v, _ .default_trigger = "default-on",' T3 {& T; D1 B( F$ `
},. s. i* p% A& P8 H! {0 X
{
: s4 g! B- f6 e9 L8 a" u& h .active_low = 0,& _8 S: C+ j! S4 L7 Z( d7 P
.gpio = DA850_USER_LED2,. A9 A8 b7 U" y! M! y8 l2 l W
.name = "user_led2",' X4 e' [' o# e- l
.default_trigger = "default-on",& Z1 E( F1 `) s p* A
},
v) Q, m4 G; A( W$ H. P& x {
0 B/ w- O+ W" k* t4 b .active_low = 0,+ E/ a& L& `( B. P
.gpio = DA850_USER_LED3,
2 `6 C! O3 ~* z) p4 r; @3 I .name = "user_led3",' g2 f8 @6 O# j; c7 V7 x2 j r
.default_trigger = "default-on",
5 z" [. m& k" e. j( G% l% B },
3 N6 U3 |; a0 J+ }% w4 ?! r; X};# S. x3 m7 M6 a6 C3 y M
) w: U# h x' d! k& y& f2 Y3 istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; {) Q6 p9 B0 \$ ?2 o1 e0 I0 h3 t
.leds = da850_evm_tl_leds,
; V, j) T! G3 F. @! g0 n0 Z .num_leds = ARRAY_SIZE(da850_evm_tl_leds),! g; t. C8 d1 p: W
};
2 G/ x3 V5 f6 T9 k3 e
" x% W. @0 k) H6 c7 ?3 |static void led_dev_release(struct device *dev)
1 ^0 j* H, \4 V" P9 e{/ S" |" D0 \* Y
};
% r* ^9 h/ h* M& n9 P
9 X% P5 l+ h& ]) l! r' B: F ?static struct platform_device da850_evm_tl_leds_device = {5 }: d' F; d. j/ Q
.name = "leds-gpio",: U/ ?* S- h% r
.id = 1,! f2 H7 r; d& a2 D! W
.dev = {+ j5 S* P( `) h5 f5 K5 ~$ s( V
.platform_data = &da850_evm_tl_leds_pdata,
+ r7 ^. b; b' g .release = led_dev_release,
: H- b" i, U) A }. K. K1 y: x) u: k6 K0 H
};
/ u1 X' U2 @0 V0 K: b9 ^" G. h) \' {6 f. x: F1 N5 C
static int __init led_platform_init(void)* G7 c9 s g+ e& s, S) ~ u! }+ v( N1 w
{2 o% g! V: ]" K3 E( K% l% S
int ret;
, }7 S4 q3 _/ v4 I4 H( |5 f#if 02 h& ~/ h" l7 u* W- |
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) t. M5 Y. V5 \
if (ret)
2 Z+ p# ]3 A, v @9 q! X( `- ]. l pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 O. U6 K; t* ^+ V "%d\n", ret);
1 n) }6 ?$ T) Q2 J#endif
: J: V( `7 ~1 `& S& @, ]4 n ret = platform_device_register(&da850_evm_tl_leds_device);: E6 ~3 _# N- v1 t( D
if (ret)) I+ N: E! C5 I; Q" e( p% ~
pr_warning("Could not register som GPIO expander LEDS");* G9 h2 p# ?8 p: z' Y
else' a) u* l5 w& E
printk(KERN_INFO "LED register sucessful!\n");
8 ?8 |* h6 Q$ q0 [; `+ o& E8 @! M5 g- d5 C; L3 N6 K! J2 B' W5 {% `7 p& r" r
return ret;0 Q, Z3 Y7 n% W& D y
}" f5 b. r3 a' U/ I
; S7 B% i6 D" d: L& n2 |" W8 E
static void __exit led_platform_exit(void)# c# T0 c3 U; U2 b% K+ l& a
{
" v. H$ k; x8 D5 Y' p platform_device_unregister(&da850_evm_tl_leds_device);
Z/ S& c6 q* ^* J( }" t5 _3 h h5 @0 j0 f3 c
printk(KERN_INFO "LED unregister!\n");- n" r5 G$ x% Z# j9 Z4 b6 s
}6 z A& ]2 o: L& W# q2 |- D' ]
4 a9 {0 \: W: y6 v" ?& q) j A5 Wmodule_init(led_platform_init);" u; p% t; h! Z
module_exit(led_platform_exit);! H0 z/ g' c) }$ w' P
5 b& H6 `9 r4 `0 @; Q; E- Z; m
MODULE_DESCRIPTION("Led platform driver");4 j' H! }. L4 ?4 N
MODULE_AUTHOR("Tronlong");- f" r0 k% j, P! O) n; m2 R4 j
MODULE_LICENSE("GPL");7 ^+ x+ P6 e0 k' X
7 i9 @% q* d" ?+ A F1 F, n |
|