|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 m1 f% _9 ?5 W# _* Y
#include <linux/init.h>
, [8 a# f( J5 E+ K# R#include <linux/module.h>
0 s& t, T/ R* i" W* Y#include <linux/kernel.h>
! n1 b, X& {* [4 j0 k/ A5 j#include <linux/types.h>. B7 h4 ~0 U4 D: b: H
#include <linux/gpio.h>+ }( G3 V# ]) Z { @. L3 k2 Q$ T6 ]% [
#include <linux/leds.h># U! E7 D& d+ x' S3 c- `5 m( I7 D
#include <linux/platform_device.h>
3 i) X% D1 j6 t: H( \3 o! ?( {
1 X7 f. [+ u, _, Z# X#include <asm/mach-types.h>
2 e, U3 C: ]5 E, f#include <asm/mach/arch.h>, k7 E7 S: j$ e. W9 [. f, J0 h
#include <mach/da8xx.h>
: H; |1 k- u$ d) a/ e# K1 ^#include <mach/mux.h>
+ {& Q$ _9 E e* m
+ N( W/ C9 [4 c1 E1 b: ?* \#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 C4 m/ i4 a& k
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)- @ ?- i& A( q6 G2 V# g; R
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) v. i( D2 Q# X* p
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) b2 _7 ?" R9 n: I; |2 a
- A$ G( J0 |7 z" }+ X' W, l
/* assign the tl som board LED-GPIOs*/ X& ?' a# Z. k8 a
static const short da850_evm_tl_user_led_pins[] = {5 x8 I g0 t# e5 |3 d
/* These pins are definition at <mach/mux.h> file */
/ ]( k9 w4 c( d' k. ?4 x2 o DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,6 W$ s: J, Z2 f. O. r3 q6 R. l0 c
-1; g5 q! O; e( X# f6 s2 i; X* i
};
- o8 K- u; U4 ?2 l& H
: x! Y& G! J% Y3 h% Rstatic struct gpio_led da850_evm_tl_leds[] = {+ z+ {/ y- E1 W/ D( s1 I2 F
{
! M) }1 B9 x+ j: P/ D! t% |' { .active_low = 0,- B4 S9 t9 w2 S3 L2 y( _4 W' z
.gpio = DA850_USER_LED0,
! e( ~6 ?6 L8 h+ x/ g .name = "user_led0", E3 V, Z) m6 ? C+ \6 [$ g1 E
.default_trigger = "default-on",
/ v" |2 x) {1 G( d/ Z1 y' g, X. z },* M( V3 |% Y4 ~" W. l
{
# E$ t. @& r6 d/ ^0 [ z) X .active_low = 0,
2 E1 V' T# t, T4 G3 [ .gpio = DA850_USER_LED1,
% c+ ]9 [! T+ g5 h3 |5 Z .name = "user_led1",
' h/ B* l0 _& z, Q0 F .default_trigger = "default-on",% @8 x, k+ d, h/ \! B2 ^/ h
},& C9 Z9 `7 w0 f
{/ z9 ^* M4 U* z; T5 z+ }, Z1 H' h
.active_low = 0,) [3 Q; A; x7 R) x$ t
.gpio = DA850_USER_LED2,* [+ ~! D" L+ `6 R+ V
.name = "user_led2",
% f' I6 z0 o" f/ X/ j5 } .default_trigger = "default-on",
, ^) D2 ?7 N" L$ e7 l },
4 `% R2 N5 T3 O4 V4 F5 k: r! Z s) z. z g {
) S1 e9 x% r$ D9 Q$ c: i .active_low = 0,
/ |- N( I G$ S .gpio = DA850_USER_LED3,
# `7 O4 O. i" p7 T( X- J .name = "user_led3",- p/ G6 _4 s# Y9 s# k0 H) h) e
.default_trigger = "default-on",2 ~6 T! q8 H" A, `; e, ^' L! c
},9 Q& w0 d" B2 P$ U
};7 P) q# A4 X) d+ V
3 U& y. o6 W/ F! c4 b
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# k5 _( N7 Y1 L9 p, a. f
.leds = da850_evm_tl_leds,
7 w' n3 G+ A5 z- a% v .num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ f$ a. a( G+ C4 g: M
};1 n3 s: x5 g# i7 E4 Y
% ^' x2 ?( k- u8 p# M+ istatic void led_dev_release(struct device *dev)$ i6 N7 c8 V, O2 C- _; [7 F
{
5 z8 E5 \9 h/ u! [};
5 g/ P$ Y4 T7 I/ }, _' ~) X* o+ A% b
static struct platform_device da850_evm_tl_leds_device = {
' s+ j6 } s6 c7 I .name = "leds-gpio",
( X" G, P6 v) e9 J( @) R8 Y .id = 1,
: y# {8 l7 [4 |0 ~3 v0 a/ k .dev = {6 _( f/ ]3 N- k9 S( P3 [( y" @
.platform_data = &da850_evm_tl_leds_pdata,
3 g! H6 q) V" i; i& X .release = led_dev_release,7 P# G( Q7 b0 O4 b5 Z
}
3 e! V& `, `1 P};: s% d- |9 C6 j. N- T3 K0 q
$ h9 t, L' j, c2 T1 W) E# o
static int __init led_platform_init(void)
+ `1 b; Y9 |6 ~0 ^( M- N J. {! k{4 w& u% h z E
int ret;5 p) l8 |( i) N2 K8 Y
#if 0' Z6 D! D! f4 Q, a; w/ k& U: L
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);+ ^# q8 }& b" \' B
if (ret)
N, i( P7 y3 q4 j pr_warning("da850_evm_tl_leds_init : User LED mux failed :" @/ n- K0 p0 U& u( ]
"%d\n", ret);
0 B5 L9 |) A9 E' |) ~7 ?#endif
/ n" [: I8 e2 X" E S7 j1 n ret = platform_device_register(&da850_evm_tl_leds_device);1 ^# L; y2 h: ]( a0 d% d
if (ret)
/ m/ |% m8 D9 n; } }$ s; L. N: g pr_warning("Could not register som GPIO expander LEDS");
' K/ O% M' Z; T* j0 A else0 \4 e% M; N, K# K' y' l0 S6 r; Y
printk(KERN_INFO "LED register sucessful!\n");
- D6 a. o" O2 ?* N* n% Y) i4 D
2 \1 c/ d, j! j, v! S6 i+ k* |3 H return ret;0 o- r6 O. G( I' [
}
$ N7 N x- y0 _
& ]. V( n7 {0 ustatic void __exit led_platform_exit(void)5 R5 q2 a/ d( l$ `- d
{3 f* {& k/ {3 @( h$ G1 A7 _3 K$ T
platform_device_unregister(&da850_evm_tl_leds_device);
! }8 Y, l: L4 O3 q# R
( ?) I, S8 ~4 p4 P4 W6 a* g* o M# F1 e printk(KERN_INFO "LED unregister!\n");
# u7 o) e: a; B6 {& I}6 [8 S! n; {& Z( U5 B1 Q
, @# p& Q9 s- e$ ~
module_init(led_platform_init);
9 Q8 Y: F/ [7 o' E1 x* tmodule_exit(led_platform_exit);3 G$ C) T+ D2 [
+ `7 {/ W$ F6 ZMODULE_DESCRIPTION("Led platform driver");
& ]4 _, x, e7 s7 S" IMODULE_AUTHOR("Tronlong");. z3 f+ G: _# C" e0 T, q# A
MODULE_LICENSE("GPL");
+ m/ o) D I. a4 y! u4 r4 c
$ @9 L: W6 W/ n. @7 H' o' Z |
|