|
|
求大神给下面的程序做注解,请稍详细些,谢谢。! N* |, Q$ p5 l8 s5 o
#include <linux/init.h>. S ~3 d7 L1 t( H' K
#include <linux/module.h>
5 h9 M5 M7 U N7 f2 T( T0 W#include <linux/kernel.h>' ~$ l/ L# ^4 h: T
#include <linux/types.h>
5 u+ z' k- ?6 A: g#include <linux/gpio.h>
# H6 o' W t0 K% {#include <linux/leds.h>
. Q: Z9 d: }' U8 m6 ^#include <linux/platform_device.h>4 T% }( a0 S, T- d
& I( u5 r; F# V% ]& \
#include <asm/mach-types.h>* e/ R! H7 c# W) l% Q
#include <asm/mach/arch.h>! \5 G/ V: o" H3 ~5 ]1 r
#include <mach/da8xx.h>1 p: E9 Z j0 G/ [; i
#include <mach/mux.h>. ~2 W; k! T$ \: m2 ?; |3 |9 b
+ q6 [5 z: G! x; N
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 ^! i. ]+ e9 o5 ~
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( |# L4 _# i" p @: g+ L- N#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" W* @' y6 V3 x) t. t u7 [& P#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 S: x/ p" w8 I
0 g9 V) t# {7 |0 s0 N/* assign the tl som board LED-GPIOs*/
" j. |' X8 @* j& c, }static const short da850_evm_tl_user_led_pins[] = {7 O; a6 ?9 M- I" n9 M: a) Q
/* These pins are definition at <mach/mux.h> file */4 q; R" I" j" a* i3 r$ c/ W4 B! z
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 ^+ x: a& T% z% S+ P -1
/ L0 A& R' Q2 w# A( v) R};6 Z, _ F. D' P9 R' t3 a/ z2 N. o( e
. q6 ?8 X8 r. K, r( t
static struct gpio_led da850_evm_tl_leds[] = {! V Q2 g: \/ u
{( | Y7 u/ a& g6 a
.active_low = 0,
% ~ d! B/ A4 \! _( x2 k$ o .gpio = DA850_USER_LED0,
" P6 ]+ {; {- c* E& ? .name = "user_led0",
+ v7 v: n4 \/ {! @+ g .default_trigger = "default-on",/ m+ U# v/ _5 J- Q
},$ l. R4 a$ H/ q
{
) W3 ~/ g6 i3 J .active_low = 0,: x2 `9 r4 l. b' T2 v
.gpio = DA850_USER_LED1,
2 i$ M: u# D4 e$ J- t+ j3 _ .name = "user_led1", B* v# z, R$ g9 G
.default_trigger = "default-on",- o0 Z& _, N4 X& T4 d, N1 n
},
+ ?) A6 R- M9 L/ _3 D8 G {
- @0 k, |' [3 E* x8 u .active_low = 0,6 K i0 L& @7 y
.gpio = DA850_USER_LED2,
1 F5 w% _" }- n; K6 c, C6 n .name = "user_led2", I& J: R! Z8 {6 A/ }
.default_trigger = "default-on",: Q" D! i6 U! U" m+ b
},
6 @; w* `7 K( M {
) k) d. e( v4 t: ?, |. s .active_low = 0,
- [0 u0 t {$ Z7 W6 {7 h .gpio = DA850_USER_LED3,; T7 d- {( V' T- h5 C
.name = "user_led3",
2 C1 X1 |9 C2 B0 @0 G5 | .default_trigger = "default-on",7 ~, s& g+ I' c* I0 |
},, |" |' I, z {
};
$ `" I# G' h0 X) R7 i+ d K
$ X9 f9 [+ g" q5 |( N. g( ~2 D; Zstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 u' F( C2 T( ]7 K. e
.leds = da850_evm_tl_leds,6 t, t s2 B" y' @1 R$ s. O
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 x9 t/ t- u2 {};
8 j4 P7 ?9 a) g6 P5 B0 J9 s
; \7 g& }0 Q2 X% Cstatic void led_dev_release(struct device *dev)7 z2 U, n! A7 ?4 V5 h) t% u
{* h9 n4 I3 C4 W
};
" ~. D0 R# p, n; J) t
' c6 H5 a! B: @) S( l$ A$ b/ r5 Ystatic struct platform_device da850_evm_tl_leds_device = {! }) H R1 `* j( ~
.name = "leds-gpio",
" F$ v; u, B9 e4 ?# w4 e .id = 1,* K- z/ k! a- @0 J, k$ ^+ _
.dev = {
" e3 j* ^ U& D3 A1 N .platform_data = &da850_evm_tl_leds_pdata,
- y" O/ E. X1 c2 u0 p& ^ .release = led_dev_release,
* B2 n' _5 V+ w: v: c }
1 |* W0 Q% ], y4 `) w( Y- \};) t6 l9 {. c3 I: G
; D7 u/ Q+ n6 p2 J- K" ystatic int __init led_platform_init(void)
3 P" `& y% m& R4 U{
) l( V- E# V- t, h int ret;
/ i8 j! Z% _3 q+ u- r i#if 0
G$ a6 \3 `6 W% z7 Q4 z ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
" U! ?) R7 Z/ A- E if (ret)
( v! r J3 |4 T# ^) b pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 L7 c9 r- X8 V "%d\n", ret);/ z, i8 a$ A. p- [9 v$ [4 o- s( D( s
#endif
! B9 |$ b' Q Y, k; C, a3 C& }5 E ret = platform_device_register(&da850_evm_tl_leds_device);
3 }$ p- D C9 a; o2 [/ _ if (ret)+ }, `+ L3 }) t& P2 q0 r0 N
pr_warning("Could not register som GPIO expander LEDS");
0 `! f3 }2 x' @$ e' ]( x else- z! G1 E& p2 O2 \; a
printk(KERN_INFO "LED register sucessful!\n");: R9 S% Z k; S
8 [. |$ w4 P: N3 { ?! o( d
return ret;+ t- S4 v% }. f
}: b, P' c- y6 y3 D# F
! ~: @& u+ }. z
static void __exit led_platform_exit(void)6 ?1 ]4 [) N' D1 @
{
$ W, g }3 A v4 _+ x; x platform_device_unregister(&da850_evm_tl_leds_device);4 a, ^1 `. O3 m8 y5 B0 Z
/ D0 N3 \" j0 ~5 c" s
printk(KERN_INFO "LED unregister!\n");. e" l' V+ h7 M/ w& _9 X" k
}
- x J6 T5 I& k
6 v1 N) w% z8 G' ^! Amodule_init(led_platform_init);5 d. S& P, T8 O: l4 ]& _
module_exit(led_platform_exit);- S5 L- D( j) O, Y3 e; o! Y% R
" `8 T! d2 s6 N" o- i, C! v- B
MODULE_DESCRIPTION("Led platform driver");" ?5 {" y, K8 ~ S' j
MODULE_AUTHOR("Tronlong");
5 c$ w" h7 ^$ u- _ H# \MODULE_LICENSE("GPL");: h/ N1 G, [% l9 ~- A( I; m: E, w! @
5 r- N) C' k8 u- ]3 p
|
|