|
|
求大神给下面的程序做注解,请稍详细些,谢谢。- q$ f) ]. u' g
#include <linux/init.h>3 @! P0 d# i$ I4 |" u, X- O7 |
#include <linux/module.h>. {3 b* Y/ i1 a; a Q
#include <linux/kernel.h>
# g. x/ z# }( `1 F#include <linux/types.h>
/ ?- \! W" S2 _7 }9 N, v#include <linux/gpio.h>* K3 U, T/ @& b7 Q! y i0 t
#include <linux/leds.h># X2 ~/ d! w' T. p u1 K
#include <linux/platform_device.h>/ a, I9 u& a/ i x+ E0 C
h* F7 M. }/ Z) ^2 K0 ?# l
#include <asm/mach-types.h>
3 C7 O8 h1 A6 @) _$ c% N- ]9 y) C#include <asm/mach/arch.h>! `- o! I4 ^# o" [/ r
#include <mach/da8xx.h>
$ m5 A9 Y2 r+ A& @8 D% B7 u, v2 o#include <mach/mux.h>- z6 M, W# a3 G8 h" v9 z, g; `
: T4 S$ j" E8 G; N9 `0 h9 n; M
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' d h9 n3 V# A, X
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: n5 ^6 A: M) g$ R. m1 [0 J#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! k0 d- A7 t, X. z. o- n- s#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% k/ v, J: t& r3 ~. ?- F+ L# ?& T, i% a6 P0 k2 C
/* assign the tl som board LED-GPIOs*/* C( L n1 f' V$ X4 u& d
static const short da850_evm_tl_user_led_pins[] = {
6 I+ T. u0 ^( ?) H /* These pins are definition at <mach/mux.h> file *// x3 h0 I$ M& j
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
$ B% U- I0 y4 _ -1
+ A; d8 o: a' D+ W3 G1 m9 j! G, a};# ?; j( ~- \+ Z
$ C7 F1 `+ H9 R/ R
static struct gpio_led da850_evm_tl_leds[] = {
! a8 w" B3 |( f; o$ Y. l4 L {
* P: {" E1 A6 N7 p .active_low = 0,
" \% z! {8 @- q# e .gpio = DA850_USER_LED0,
( g H3 k/ `4 g. d. |3 [4 K: N .name = "user_led0",
# W- c- e! M) J# ]+ ^6 {' d .default_trigger = "default-on", _- W$ @# k6 F$ Z. q4 L5 S0 r/ F
},$ M" k9 F" v/ p6 C) e! T2 J$ H
{
0 ~' g1 h, t5 F1 o! A7 C .active_low = 0,
- Q- S' Q- g9 i .gpio = DA850_USER_LED1,
: I4 r1 H6 ^! @4 W1 D .name = "user_led1",
8 W' j0 d* E9 R) k .default_trigger = "default-on",
& V/ T4 `: \5 E2 }( I% g },$ e3 y4 e: h8 X# s$ J5 v
{
! W: \/ y4 T, ~; S2 `3 h9 `" i .active_low = 0,+ O" g+ a R, s! ?0 R, z! Y
.gpio = DA850_USER_LED2,
4 u+ p" R* n% p$ J .name = "user_led2",
/ [5 B2 C# p) k9 `& v$ D" y$ r4 } .default_trigger = "default-on",8 n) @. D3 L! I5 s0 r h( L0 a& ]
},
- A* `$ X( e8 H {
0 F9 w' x* r3 i# @ .active_low = 0,
1 ~0 t h1 N, C: w& O .gpio = DA850_USER_LED3,
; Y9 E. _/ `9 z: ]2 }+ J& P$ N .name = "user_led3",/ R. _2 {: ~& N
.default_trigger = "default-on",, G8 z6 y7 W/ v! z. H4 H- k; S
},5 k; z1 Q* G, H/ I; [! ?
};' u$ ?0 c* S5 C8 V' ]
5 ~" T) r& f' J5 @+ V6 {static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 C7 g7 |! F: S- C
.leds = da850_evm_tl_leds,
8 L" K \2 z7 ]! U .num_leds = ARRAY_SIZE(da850_evm_tl_leds),) g5 _8 v5 V- r! ?
};
5 E% J. p( K9 U
6 l4 p4 _$ q. d5 Y1 W0 Mstatic void led_dev_release(struct device *dev)
/ ?5 R x8 @$ r' {{( U3 L I/ n; w- V8 x5 w
};; E5 @, v J5 @) Z2 S
8 R: e% y/ n0 T1 F& c. J* ^3 I6 o$ mstatic struct platform_device da850_evm_tl_leds_device = {
, T. L3 p/ X- a0 l .name = "leds-gpio",
1 _+ J; `9 b6 g' k% ^" R .id = 1, e& s P' S. o: F
.dev = {" b7 [- u) g1 ^. R$ F# N
.platform_data = &da850_evm_tl_leds_pdata,
( P: v! D: G4 M$ f+ M9 @ .release = led_dev_release,
* d( F$ K7 u% B6 D/ r4 j }8 J* f: Y2 c1 e" D/ x
};4 Q& |6 T! V) c
* C5 |# A/ Q* `* `) e
static int __init led_platform_init(void)
9 p2 @: U. \- }" [) }8 m{, T+ y* N. ^* N. v0 c# {4 v6 N* I- ]
int ret;5 h! L3 B6 O: g+ u
#if 0
/ M" ?4 m0 n8 l% v; v. P2 T4 Z ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- T) h( c/ s* _) p5 r9 E if (ret)& v9 D" y0 T& W: A( G$ E
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 }' M" k6 \$ |: b- R) M: n
"%d\n", ret);
8 W6 [8 E) e j. T% `; [ {#endif
; P |$ M$ y' i ret = platform_device_register(&da850_evm_tl_leds_device);
# B( Y! ^5 S4 j6 B if (ret)
9 p4 k9 G) {; _0 _" Z3 ~ pr_warning("Could not register som GPIO expander LEDS");
6 u* N7 c/ I% d6 \; O4 L else, s, b" B8 D4 z) E, ]9 O
printk(KERN_INFO "LED register sucessful!\n");
) O: u2 D5 d R8 ~8 v
6 ~5 r; y5 C. x% r return ret;
* z4 P4 F) [% g: Z' ^1 W}- }) ~* m$ p9 h6 d a7 L
) ?& @5 @7 K+ u% u# P
static void __exit led_platform_exit(void)
& W7 i6 w! T7 ?{
6 F9 C; z( J3 p platform_device_unregister(&da850_evm_tl_leds_device);
7 Z- `+ m! i S
) a A! u. \6 o3 D3 `; U6 G printk(KERN_INFO "LED unregister!\n");/ A Q! e V; m; |
}
- t* h( M$ K# w& K6 i& B! I
2 V5 Q+ z$ S' g3 F7 V" T( [module_init(led_platform_init);2 y2 g/ W2 f2 r6 b8 B/ @
module_exit(led_platform_exit);8 E3 T O# k8 `/ M! n f; B v- ~. o
" e. g1 n. Z" U8 g/ R" G6 B- g" MMODULE_DESCRIPTION("Led platform driver");" A, ~! T3 [0 ?7 a
MODULE_AUTHOR("Tronlong");
9 ^) e1 [: u$ p$ R/ K7 n& UMODULE_LICENSE("GPL");
8 e$ g u" K* c0 E' o$ E4 |. Z4 G9 o0 b! }
|
|