|
|
求大神给下面的程序做注解,请稍详细些,谢谢。7 G! k) ~' D, Q a, S1 |
#include <linux/init.h>
% g) L5 B8 t9 I. H' s#include <linux/module.h>
, k, n- e& T0 E, v3 c W#include <linux/kernel.h>
, [5 p( P! E) A#include <linux/types.h>
6 y- R" {2 @/ O# m6 _#include <linux/gpio.h>
( H2 @' \! v' o+ T( L$ _#include <linux/leds.h>; D1 J8 H9 L! c) G
#include <linux/platform_device.h>$ \( o1 a/ l' i. w) x k d
7 b5 @3 D6 E( E& h
#include <asm/mach-types.h>+ I* V/ B% x. B1 `; H# e2 f
#include <asm/mach/arch.h>
/ o: E) T/ K0 p" B#include <mach/da8xx.h>
; W3 v* c0 x7 ]2 Z#include <mach/mux.h>1 S1 ]1 r# d7 A4 d2 X" w3 n+ n* R
: t! K5 ?3 _3 f% G, {% E, b; w
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 M* {- X: R8 H/ J* A8 e#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ t6 |% B- S" }+ s- m
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& s. \. L3 f% A. c. V+ D8 |- e% j8 S! L
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- {, R4 c# f+ o9 S% r+ L3 N! G' L) ^% a6 B0 V" X( O* U& ~: I0 j
/* assign the tl som board LED-GPIOs*/
$ |3 a7 L* A4 Z, g+ n2 u2 Dstatic const short da850_evm_tl_user_led_pins[] = {' c" ]2 ?" S7 o9 O! z1 q' K
/* These pins are definition at <mach/mux.h> file */
; M' I1 f% R( n+ M9 [! H DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 l" ~# q- ?; ~: s -1 T+ V8 q! v$ u* X1 K* U) s
};
8 {2 s6 c% U# R1 {- \& U/ O+ ?! _3 A! q6 X9 M# c7 S
static struct gpio_led da850_evm_tl_leds[] = {
1 e6 q% D3 J. D8 L3 {. t+ O/ _9 V {; o9 v- o1 B) C! w6 Q6 {' k; ?, m6 A
.active_low = 0,3 K9 g% o% n G$ Z
.gpio = DA850_USER_LED0,
2 h% g* v! x( I6 R .name = "user_led0",8 U& R: g3 ~9 b7 g0 N+ K
.default_trigger = "default-on",' t$ A: |6 A/ a, z [" A. V
},
5 k! F4 y8 ~. X {
1 ]; j& A; D2 t* l5 S .active_low = 0,
0 D$ r {% E6 N .gpio = DA850_USER_LED1,( f4 [# w p$ |; ?, k
.name = "user_led1",8 C$ ]4 m4 J8 ^' I7 P; a
.default_trigger = "default-on",: E, [8 C# G* Y% h( K
},
& U" @( v3 s& i% z {
3 R) b7 N$ p1 |4 z- o .active_low = 0,
* l1 r9 T% }: ~4 h+ z. Z .gpio = DA850_USER_LED2,5 z. O& P( m) @, S0 H2 g6 e* h
.name = "user_led2",4 X' a e" _4 {# I. p$ p- q4 y7 f
.default_trigger = "default-on",, r4 S' C3 o5 x9 u/ w, c
},
G# H$ n$ N, X. o {
# A$ q( W* p3 A+ q- v3 N& k) F .active_low = 0,% `# y S |& y- r8 G
.gpio = DA850_USER_LED3, ]. R1 x( X$ m1 g
.name = "user_led3",
& p/ M% _: |/ l# [ .default_trigger = "default-on",
& y; d _& I! ~ R0 `& n7 Y. V5 D },% z" f( ^4 x$ R6 R S2 P2 h: X
};
( e) H+ J& j; N8 S9 v. e8 d6 x" k* _2 M$ r6 ?
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, I4 g" u" F# |, \4 g1 j% R .leds = da850_evm_tl_leds,) Z5 J5 j3 ]5 |; x& ^7 L1 ]0 [( C
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
2 z# u, i) c0 q O};7 z/ B9 I- w2 ^* L
) y: X; Z. T9 I3 S
static void led_dev_release(struct device *dev)+ W4 s& Q+ g+ @" f+ u* U
{
5 K4 v" n2 r, B7 ^};/ X6 h9 v$ p! s" k G# ?: {
9 u& v; w" | h0 H( l% B u: _5 N/ l. `7 v
static struct platform_device da850_evm_tl_leds_device = {/ a# T! o+ H, l2 k1 \1 g% C/ h ?
.name = "leds-gpio",
( d8 j3 h, t& a- ` .id = 1,
% f% B3 J' g7 k2 F .dev = {
- b' |* Z' R% E .platform_data = &da850_evm_tl_leds_pdata,- k( L. L1 A1 T3 L! K4 B4 k) v
.release = led_dev_release,1 Q" p. v& R3 z& ~* \) B
}
8 S& X, P' Y3 M* @# C};
# I" s$ R B5 j2 N) q. I) A# ^. P/ ^) B# U
static int __init led_platform_init(void)
2 ~% O4 h' d0 b, o8 k{
, k3 X9 k* g- A; K int ret;
0 w7 x& {5 X7 a7 }* _# L#if 0
7 Q4 {3 p0 R( E' \1 Q: Y+ Z M ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) Z: c8 [0 A' v, R9 I
if (ret); a/ g8 ^$ C+ {+ O g
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
j0 T* K- ]- K+ D: Q5 t# C5 } "%d\n", ret);& P7 N) z2 l( }" p
#endif' E$ G% K* ?# t) I6 o" _
ret = platform_device_register(&da850_evm_tl_leds_device);; w. H& Q9 R7 r4 f3 l) k
if (ret)+ q7 V0 k7 F/ o) f
pr_warning("Could not register som GPIO expander LEDS");
( e [- \; b" O& E% g5 c) z else
, o+ }8 a- m9 m3 h printk(KERN_INFO "LED register sucessful!\n");
# f: z* O+ Q2 Q; ^
7 I$ g! Z+ g: m return ret;+ C( n, I5 K w: d' m1 V" r
}
: _2 t9 Y4 u c8 {0 g, [. ^
L7 C0 ]% `( mstatic void __exit led_platform_exit(void)0 I6 j A5 _- Q3 h
{
& ~* l4 Q8 |' s/ a platform_device_unregister(&da850_evm_tl_leds_device);
3 r, V, c: m4 ], o( @9 x, L) L$ k v
printk(KERN_INFO "LED unregister!\n");
+ c4 w: v. h- c0 v1 V}$ Y. |/ p9 w1 A( B- L& Y% m
/ Z' H- g6 l3 s5 e# U
module_init(led_platform_init);
, @, `7 \# b( v1 wmodule_exit(led_platform_exit);7 _: v' Q, W" {) z% F
/ u/ X# V% M& u$ u ~
MODULE_DESCRIPTION("Led platform driver");5 }. h8 I- x3 k4 B8 g+ r/ k
MODULE_AUTHOR("Tronlong");
; m6 V, |5 @+ F6 tMODULE_LICENSE("GPL");
9 J* |6 O; t; y8 R+ M1 b- {: C: q
0 S# ~8 D1 m% M* ?# Y9 N |
|