|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 Q0 E7 E( K4 q0 e8 }: m3 B4 ^
#include <linux/init.h>
4 m+ l$ g3 @! Z2 P9 q# l#include <linux/module.h>
( R/ i! h+ g* @' I% t8 A; G#include <linux/kernel.h>
$ W; e3 F1 q6 v- }6 I \ C7 w; F9 l1 q#include <linux/types.h>3 a* c) p( t" s: T1 l
#include <linux/gpio.h>1 m; w; |& J" a4 a
#include <linux/leds.h>6 ]1 S8 j1 h* _' ~
#include <linux/platform_device.h>
1 u- R: B' F+ x% `
/ e* {4 \! Z b2 e" N5 @" w/ L#include <asm/mach-types.h>
7 \, B K( ?, a8 [#include <asm/mach/arch.h>) c; P! ^/ b. q4 R8 ^
#include <mach/da8xx.h>+ ~! d9 j# @9 s% X
#include <mach/mux.h>2 y8 H" c2 l7 [; X- z3 f/ K
8 u* F( e3 S7 R: K d4 a3 w5 K#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" K3 c& p8 j2 o1 U, k1 u) B
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- |; y; j# n* ~& E% {5 \#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 h6 ~1 M2 F) D' O. k
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ ]: \! ?# { Q* ~
6 ]! u6 j1 n7 I* y# @6 @2 |/* assign the tl som board LED-GPIOs*/
6 d& x& b6 C2 U5 d6 Ustatic const short da850_evm_tl_user_led_pins[] = {
) V& \4 r5 M: S9 W0 p; R7 D! L /* These pins are definition at <mach/mux.h> file */( B3 }+ Q6 `' V" H y; k# V0 [
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 z* }! s- a' ^; L8 J
-1$ s, m& j k1 p
};1 c/ a2 q* P/ q( Q$ }5 K3 \
. S" S2 b$ ]' q1 }$ p0 j4 Istatic struct gpio_led da850_evm_tl_leds[] = {" e' k8 A0 O, Q7 E4 Q+ q
{7 Y% Y% q1 e/ ^9 z. r7 U0 V
.active_low = 0,
5 m1 j0 W/ v0 ]6 U2 q .gpio = DA850_USER_LED0,
" d' s" m' c! _* h8 i' d .name = "user_led0",& O' P* m3 s `7 O
.default_trigger = "default-on",
* K0 x- b Y; Z+ H/ L; X },5 [, F) o: W/ G7 r! U% |
{! P: G# {9 k5 |8 _: y
.active_low = 0,0 `3 m$ L7 ~( G9 n
.gpio = DA850_USER_LED1,+ Z& X) A$ x# A& E2 y) J5 }9 I
.name = "user_led1",+ ]* W4 \' e7 X% }9 N1 V0 c
.default_trigger = "default-on",/ G2 h4 O& I0 h g. h8 d
},2 J& _: c; @' G5 h* \6 i; m
{, e' [* h5 w' ^: k( r4 C
.active_low = 0,
/ m8 T1 s! Q- ~/ b/ M& n, M M' |3 R .gpio = DA850_USER_LED2,' ?# p L3 n; K0 K4 x3 J' m
.name = "user_led2",
9 g7 Z6 e1 M- ^# Q: O .default_trigger = "default-on",
2 B7 u+ v6 u: V" h; a8 W6 j },
/ ]' q) H$ T: @* }2 A {
, a! F" F8 n# `8 w5 }4 \9 Y .active_low = 0,
0 _) N+ z3 k: c .gpio = DA850_USER_LED3,( S9 T/ T5 i* M! ~ x2 I
.name = "user_led3",# W/ ?( b5 k; y: W& t( v3 M; j! p. ?
.default_trigger = "default-on",
7 H: I6 j5 i0 I3 F; {0 h },1 f+ O" o4 t2 K2 ^' N, ~. L
};
$ f- Y$ x7 w! p+ }; d& i4 V* L( p4 j5 u$ z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* S+ \/ H+ [# B
.leds = da850_evm_tl_leds,
4 ?( |2 X/ I9 D& m/ A, J .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
8 { Q$ H/ M! O- z e- d2 W3 [};
; y5 W7 E- `# c, e, N* u1 V: ^) v# t0 `0 F [# M H. J6 _
static void led_dev_release(struct device *dev)
! t) h* L B4 ^3 Q, b{2 ^ p+ [5 n, ~+ G
};1 K3 b2 y9 b! U/ A$ i+ G
5 i7 O# V0 {6 D3 N0 w# Y2 c% E' l
static struct platform_device da850_evm_tl_leds_device = {( [2 m2 D- D k$ w8 F, N
.name = "leds-gpio",
$ M& m' E8 R3 Z1 J* H .id = 1,* P- D/ a, [4 {# W
.dev = {8 N0 A% _4 a% a2 \" }
.platform_data = &da850_evm_tl_leds_pdata,
! J: H& d" z- V- o .release = led_dev_release,; W" n8 _; q' L
}
5 h) c' [. l- m8 [};
4 |* ?' a8 y6 e: A( p, f3 f
9 o, f2 L: \, ustatic int __init led_platform_init(void)
$ s6 p, i4 z" p{4 S. ^: e2 M! t% m' K
int ret;0 k7 P, m8 }2 k* ]
#if 05 w* p6 ]: Y& ]/ B
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
$ k/ M2 t' y/ d# L4 E if (ret)
2 I' H% i, a3 s! S pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ o; n& |' s+ V& y; L5 T! i "%d\n", ret);/ {1 L6 X: a1 e# t
#endif
9 s4 v4 X1 Y1 i X% B. N ret = platform_device_register(&da850_evm_tl_leds_device);
* g2 L$ I- i5 j/ S" S+ Z if (ret)1 B9 Y* }6 x/ g5 s) S1 J
pr_warning("Could not register som GPIO expander LEDS");" e# r8 `( L; T& T8 C
else
3 X. A, R8 A& B" P printk(KERN_INFO "LED register sucessful!\n");
k& r; s# V+ t9 R/ `! Q0 V) E" @+ [0 J$ F
return ret;3 c5 U! e6 A0 N% }; Y
}2 E# l7 J" v' S& K6 K& X
' i4 z/ o# l! o2 q5 J( k+ N2 o- U* [static void __exit led_platform_exit(void)1 s3 U) z; m1 }( i$ i# V
{5 W- k) g' O& L, ?- E, H
platform_device_unregister(&da850_evm_tl_leds_device);
% z. P" a5 T1 W
: }3 R6 {2 E; w- S! s! X printk(KERN_INFO "LED unregister!\n");+ B. [# a$ ^: Z9 l
}
! V6 o2 U1 Y2 ~9 t' |% z8 l4 Q1 n! F6 h. w& [ n
module_init(led_platform_init); z2 Z' f7 O3 b- C" O" Y
module_exit(led_platform_exit);
* a2 Z* z0 Z5 k; I4 S; @/ Y/ H7 u7 w8 U; g
MODULE_DESCRIPTION("Led platform driver");
# v' c6 Z7 s- f/ v7 MMODULE_AUTHOR("Tronlong");. l( J" b# M4 S+ X& ?& y
MODULE_LICENSE("GPL");& `( x y/ X2 ]. y) E- \9 N0 q
9 o% k+ @9 R( U8 N( Z, O! l9 C8 Q
|
|