|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( C: d t3 O8 w' s. V: r& D, s#include <linux/init.h>
8 G( l, ^$ p) _3 G#include <linux/module.h>
3 W1 M+ t: Q; Q5 k# M& i9 Y#include <linux/kernel.h>
2 g7 c% x# H' Z6 {0 h#include <linux/types.h>' _0 q7 @/ K* b+ \$ S' p8 v
#include <linux/gpio.h>
z8 X5 f* y" Q7 E' h2 L#include <linux/leds.h>' G$ s/ f8 d8 Z1 |) I4 v) h, b+ V
#include <linux/platform_device.h>- ]4 z& E- \* u4 G8 }1 W' V; H0 i
`" ~- l2 d! |" h, P9 }#include <asm/mach-types.h>0 E* u+ V# i3 y8 s
#include <asm/mach/arch.h>$ A D0 D5 i- n: d
#include <mach/da8xx.h>9 @- w3 T, k+ H W3 U
#include <mach/mux.h>
4 M4 z( |- ?3 f t9 |- e1 i, \+ c9 D/ Q, i3 m0 c i
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- Z' [8 t N2 n) X# L- |: Q6 G
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# _/ ]* l4 Y, {9 b9 @#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" ?: P& D: |1 m9 \/ U0 V
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, _1 i* }! v: |# C, P& s$ \9 v6 h$ l6 {. j
/* assign the tl som board LED-GPIOs*/
2 v, E( r* u$ {& u) O0 n6 P% Dstatic const short da850_evm_tl_user_led_pins[] = {! w( Z4 m* l0 n7 a7 `* h* A* n
/* These pins are definition at <mach/mux.h> file */+ Q/ o8 `% ]9 x7 }1 b
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
V& `" P2 j; L. z- H& ?, s -1
0 K( W- y8 Z0 J( B};
0 j9 X+ M0 U0 b, ~% D( ^! c4 e' Y# D9 w/ r- a
static struct gpio_led da850_evm_tl_leds[] = {$ D1 Q* p u, Q% X: P* [$ I. n
{8 k T$ o8 x$ N0 T9 V, o/ l
.active_low = 0,/ F; d1 a+ ?6 E* Z1 _6 m$ M
.gpio = DA850_USER_LED0,4 j& K$ ~+ }" |" [
.name = "user_led0",0 k0 G$ i, h1 S; q/ A
.default_trigger = "default-on",9 P! `& E# `* x! @7 U3 I
},! w) d1 o E+ e# c& H
{( n) a" \7 ^/ ], [5 _! Q, ~- L
.active_low = 0,
8 o4 o0 t, S& i. u0 ]8 I; d/ e+ e$ ` .gpio = DA850_USER_LED1,
# R& ^. i) l6 ^/ i& O) }2 ~ .name = "user_led1",5 J; I/ w5 j, N" z2 m! _! y# Z
.default_trigger = "default-on",+ z. x& c1 Z( v ?7 v. O
},
$ g/ k, ~1 q' @8 ?# \2 l {
5 }! O+ N. i2 k) h! X .active_low = 0,. }* E1 [: ~% Z, }
.gpio = DA850_USER_LED2,
+ Q3 }; L3 T9 X! V8 L) S .name = "user_led2",2 m& h/ y+ z/ Z& ~* ?2 f% f
.default_trigger = "default-on",+ V) q0 s7 v, S2 z
},
( J2 V' }/ P& Q& ] {1 a) q6 [! ?3 F
.active_low = 0,
$ K; R: @0 m5 v .gpio = DA850_USER_LED3,
5 _5 M2 l7 ]1 H9 W) r! ^% V .name = "user_led3",
0 t/ E/ ]+ x. i) u3 A6 A' c+ L g .default_trigger = "default-on",
, r: y' I9 C2 M8 ]- [# J+ u% b, g },
: F7 X9 W0 @, B# `" D& v};
% ]$ e; V3 D- M0 ^! M
/ q- e* O/ I _3 k3 Cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 N4 V6 G) u2 b9 O; s .leds = da850_evm_tl_leds,. l# L P; H2 L% r; O
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),( M' ^: a- J& m l) K g/ c
};5 t# T4 y3 \6 X$ i- Y' j
9 H) H% S* e O* J P5 \static void led_dev_release(struct device *dev)/ ?8 u% L5 z6 h! e; l
{; m1 l2 `* [2 i) J% c
}; ?8 C. o' o; U( K" w
& M' i* O' H0 h2 W
static struct platform_device da850_evm_tl_leds_device = {
: m8 e) F: Y* H .name = "leds-gpio",! _( X. B4 N% }( U+ D. O# i; P, u
.id = 1,% @! X9 i8 n% F8 e7 V' u
.dev = {7 z2 Q' W5 b3 z- H, V. W( f0 `
.platform_data = &da850_evm_tl_leds_pdata,
# V0 j2 j8 c* H" E .release = led_dev_release,. f. p4 w; w1 |2 L) Y; G& z' w
}7 C& H, r4 x+ ^
};0 S, H6 D4 u9 @ v. M/ z
* F# F/ {$ Z$ e/ j1 Bstatic int __init led_platform_init(void)
. `3 P' b; A/ o9 I( ~6 Q) H{; d8 y( F6 S$ g( v! V9 Q
int ret;5 D! D" g3 F# G3 P
#if 0
- k) c, R8 J6 ~# O2 S: A ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& L# |: S* m- j( d; e o$ w
if (ret)
. e! s4 Z- a3 i$ u pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 ]" F N. }. Z9 g4 M: j
"%d\n", ret);
0 G) o; L( D0 X5 Q#endif2 o# b- m# m, k. m- G
ret = platform_device_register(&da850_evm_tl_leds_device);
9 b8 c! I6 x, C% @$ S. ] if (ret)& k# s& T& c7 ^; ?3 x
pr_warning("Could not register som GPIO expander LEDS");
) c% M7 m# n$ d/ O! ~! T; w2 v else; H. M2 a8 Y/ M( w; _! _
printk(KERN_INFO "LED register sucessful!\n");6 c8 H v; M/ n! p" ]' V
$ \" i! j4 S& R/ _0 l return ret;" p: {/ f2 C ?/ n+ g/ U9 Q
}
1 N) P& N. y+ U( C' t. p4 N
, \. j0 Z( t9 ?* v& l) H3 }: L. vstatic void __exit led_platform_exit(void)
: }/ k0 d+ \; l. K h7 g. j{
# q0 ~- k! U0 ` platform_device_unregister(&da850_evm_tl_leds_device);
; G1 @ o. i y+ e6 K1 N" |& w$ S O1 s' Y' Z
printk(KERN_INFO "LED unregister!\n"); a. ~+ G) T* r, {$ k8 y U* V
}
( i) E% D- L7 M/ N$ W6 u m3 ]* W+ ]0 l* y" R
module_init(led_platform_init);2 L$ t1 ]% a+ ^7 e; N" B/ }
module_exit(led_platform_exit);2 V3 B0 Z$ W3 x" V6 ^. H! u
! w6 m, a# d( x# _7 vMODULE_DESCRIPTION("Led platform driver");# P7 v8 N9 S/ L+ U* ?" j
MODULE_AUTHOR("Tronlong");
* W) G' h% z# o7 T; XMODULE_LICENSE("GPL");
) `+ S8 o" E& A! d+ F
0 W5 l; ~' Q9 s( j' w |
|