|
求大神给下面的程序做注解,请稍详细些,谢谢。) v) \* O* U; X3 `# A: j3 a
#include <linux/init.h>+ _/ s9 z( T9 B0 M9 y0 N8 K+ T
#include <linux/module.h>. m2 m. G: v' O4 q. B
#include <linux/kernel.h>
# t9 p! W6 e3 M#include <linux/types.h>
* R& x k# N5 l. k8 O, S! i#include <linux/gpio.h>: j% `+ Y; o" p8 @* y3 M" h) I
#include <linux/leds.h>* T5 d8 q. }9 [, X
#include <linux/platform_device.h>! y0 u+ a: ~$ }& C3 J. |
, y# k1 L! W3 J1 C6 c9 d# ?; u; W#include <asm/mach-types.h>
- i( {9 P7 G: ?/ w#include <asm/mach/arch.h>( G; r( \0 e7 K7 x4 I
#include <mach/da8xx.h>* U. C1 A9 B8 c) A7 e: p
#include <mach/mux.h>
" v5 c/ x! b5 d
0 [4 e( w5 W/ d0 _) e! Y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 U, \: q$ `" l/ e
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 c* v9 ^& p" I4 Q. W4 B
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)! ~1 Y: L6 u3 f3 x2 T3 D) ^
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 `6 Y' c; b" q, I+ B. T/ `
% c" p% W- B! r8 @2 ?+ i/ _/* assign the tl som board LED-GPIOs*/
4 q" G: k6 ~( c' \* c" t: cstatic const short da850_evm_tl_user_led_pins[] = {
" o# ~% d- k7 X3 b /* These pins are definition at <mach/mux.h> file */" q2 M" z1 i( P/ i" y) z5 X4 d
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* [. r. @- s" w% Z9 ?( M
-1- g( Y8 @9 H" `1 }4 m3 K
};. C3 g C# C: R, D# z) \
9 q% d- O5 v! V+ a
static struct gpio_led da850_evm_tl_leds[] = {
1 K& _* Y }+ m9 b8 T {
- V1 q9 L- d# v! Z/ W .active_low = 0,+ e3 A0 `+ a* n+ I5 y/ {
.gpio = DA850_USER_LED0,
7 B# q" @; W* v; |' ]) ] .name = "user_led0",
: B: \+ \4 z. b5 n( T% a .default_trigger = "default-on",9 v2 C: ]0 B* c1 f1 e: A2 }! m
},7 D1 c( K7 u& s4 Q( q
{
' q1 R- n( w5 H, M# |: D .active_low = 0,
( w: i; H( U& [ .gpio = DA850_USER_LED1,6 k; Z, V; n1 K% f4 Q# ?/ ~) Q# Q
.name = "user_led1",
) q' X& ]8 F# U" }9 Q5 n .default_trigger = "default-on",
. t3 o# _! j, q! _, E9 p4 C },' f _( }8 _1 s$ a- z6 ^) k3 f
{
/ z, [* P) q1 e/ j' V* q5 l .active_low = 0,6 ^6 A; n" O) k/ }( \/ @) M3 ]
.gpio = DA850_USER_LED2,
) h6 r; S. `) D5 d1 Q4 z v( _, t .name = "user_led2", l% d+ g5 l) W# d
.default_trigger = "default-on",
! W) i$ e! E$ B0 g* t( Q; z },% E+ D! G6 m6 Y c& v
{
2 ^% y. p8 W/ T% `: g1 E .active_low = 0,6 K0 z4 c+ k1 k, a& I
.gpio = DA850_USER_LED3,
+ c) ]$ Q& z; D; e. t .name = "user_led3",$ Q; P# s5 u5 w6 @" Y
.default_trigger = "default-on"," a; U, b- K7 r$ B: K
},1 o: I A( X2 [" D
}; ]+ d2 I) c: |
! F3 B% Y- N: W' X. }+ nstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {8 q8 x$ ?! H0 K7 d) b F
.leds = da850_evm_tl_leds,
" G8 K9 Z( r) p- z- } .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ U9 Y) C4 g+ M, X2 r. w};
! h& j- O2 `2 ^8 j) Z0 q# Z4 C
F2 D" f4 M2 H% e) a( F1 y4 ^static void led_dev_release(struct device *dev)$ y, i. V* F+ X M; T) p
{" n# S$ A$ J3 l, N& K" f' k
};
6 V' n$ A' G1 F7 \; ?/ i- a) l9 u& R% Q; C- r2 p- b# \& h( H
static struct platform_device da850_evm_tl_leds_device = {
2 s+ P" f' N! I .name = "leds-gpio",( \2 e: r4 }; l, M% o* G1 p
.id = 1,
9 G( v B( h1 Y: p% J9 O- F4 t/ d .dev = {* L! b# U9 A4 K/ R& ]- m3 e" F
.platform_data = &da850_evm_tl_leds_pdata,8 z1 l4 y7 _! ~+ R$ Y2 ^6 t
.release = led_dev_release,( n6 ^; T# l6 h
}
- D( W# ~0 r: J p2 j% M};6 D Z& W8 G0 h' \9 M
0 O: a; H6 {; E& s
static int __init led_platform_init(void)9 g6 N3 G6 e% G" z
{- l& ~5 b$ R7 i4 r w- r
int ret;
+ l$ G6 j" ^ _6 D/ }#if 0+ O: T* q7 U& V, `' v
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);0 D: e, v+ D/ e, x
if (ret)
/ D* y! H. E; j3 j+ Y$ `6 L pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- s* o' q; L. c: O& n; Q
"%d\n", ret);" d. y" e, a! W2 C1 H( Z
#endif
/ Q7 {4 O2 O/ j- T7 J8 m) A ret = platform_device_register(&da850_evm_tl_leds_device);
9 b3 @* i( H0 @ @4 g if (ret)
# {# D% w1 c# C7 |4 w. X pr_warning("Could not register som GPIO expander LEDS");* q4 D: W! f' C( e: Z4 O# X
else2 H/ B2 {. \. p' f( n1 V/ z, F
printk(KERN_INFO "LED register sucessful!\n");
+ ~9 _/ f. H, q* |# Y& e3 R7 W0 Y, u8 u% p
return ret;
( x8 Q- n7 @5 a! {% v" z2 r}7 M9 [+ S0 W- l' _! V0 a
6 X7 c; g0 B8 Pstatic void __exit led_platform_exit(void). q2 j3 k! n; q& h
{
0 |. [( _3 }% B6 C4 e/ L platform_device_unregister(&da850_evm_tl_leds_device);
+ b* K% a9 J0 r! b* f4 E1 W; D: o% U0 q8 o2 g; k
printk(KERN_INFO "LED unregister!\n");
6 @& F+ L8 o" C! i}
5 e5 T1 V9 l$ f, v8 A$ [( K( {$ Y+ C& Q2 p
module_init(led_platform_init);# Q! v3 c! c+ I
module_exit(led_platform_exit);
4 `( J. ]0 n$ E/ [3 ` q
+ i2 a6 v, O$ O) M, GMODULE_DESCRIPTION("Led platform driver");1 ^8 X) k4 Y: w
MODULE_AUTHOR("Tronlong");' t# m4 I4 e6 P. M# r9 p
MODULE_LICENSE("GPL");3 f9 f3 G5 f! y: n. P: Y
- ]# V! s' z* O" I2 q
|
|