|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& D5 e* [' O4 [. y/ z9 n; a7 d( P3 n
#include <linux/init.h>; y! p9 V* O8 w$ h' `
#include <linux/module.h>
% A5 a3 E; R' g( r$ q/ T9 u#include <linux/kernel.h>
, i& L7 z. j$ j! m* k9 V#include <linux/types.h>
% o2 `9 h3 e: @" C#include <linux/gpio.h>) X) Y4 g+ s/ z8 ~" h4 g
#include <linux/leds.h># [' D! n& c) b4 D' R
#include <linux/platform_device.h>2 B# `: R4 b' A; C4 t6 q& c( r" v
d' |. l. v6 J/ D6 a/ {#include <asm/mach-types.h>$ f9 v1 k0 Z; ^' D! T
#include <asm/mach/arch.h>
6 e- m) \* s6 Y#include <mach/da8xx.h>
" X8 g0 J% ]% ^+ d#include <mach/mux.h>
8 c( ?$ \* C, S/ e0 b0 L& _' u: A/ O
4 Q8 m% n3 t% u/ Z5 G8 L#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ g9 x% o5 S0 A& Z' E
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)4 g; ~; `/ g+ I. y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
Z' y! A+ T- i& r) i8 H#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 N5 r5 g2 l, ~! I4 r
6 r( E+ ?# t6 O6 w: a/* assign the tl som board LED-GPIOs*/& D4 J( @3 a$ V; Q) T8 U
static const short da850_evm_tl_user_led_pins[] = {1 G4 S% a$ H) |
/* These pins are definition at <mach/mux.h> file */
4 V' y/ }. C T) X5 M) a DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; E1 {0 T( Z. R0 C' }4 {7 Y
-1' i; `: b6 Q2 C9 }% L
};) `3 R, k0 b4 _$ d6 A7 o, p
6 u! g4 z: S* q2 x5 W+ z+ _, I: q7 |static struct gpio_led da850_evm_tl_leds[] = {$ l: D9 D' t$ I# U0 p& J+ L
{
- x( Z; ?% ^0 G- r t: f% h .active_low = 0,: T( a D$ T% Y( B v
.gpio = DA850_USER_LED0,2 S! x2 z1 S' k+ f2 ~5 `8 j9 J8 x7 D
.name = "user_led0",* O" q* A; [) h6 i/ b
.default_trigger = "default-on",, X' q/ u8 x" T$ ^9 G* e# @4 t
},+ W3 G; v- K- P
{7 f, z' P! d" c8 c- O
.active_low = 0,/ t7 g; _1 N9 \ |! g
.gpio = DA850_USER_LED1,* x6 {& b, N; y$ `( c; [
.name = "user_led1",, w% C" t* w( r4 B3 ~) j- G1 p5 j
.default_trigger = "default-on",/ z2 s7 c3 D' {$ w- B
},+ ~! G( Z) _; D; Q
{: t4 A8 J" Y8 {$ s* w" U! s4 ^9 T
.active_low = 0,
7 B2 y7 f8 @4 V4 ~ .gpio = DA850_USER_LED2,# B- [( f/ {1 }
.name = "user_led2",( `! a# H5 E3 V! @/ D
.default_trigger = "default-on",
7 A0 O: N+ X2 u! C, M },
4 m0 _% ]# S1 ~: c; L, x6 X {
9 @6 X, b6 y5 z4 Y" `( y$ r( v4 N .active_low = 0,
6 [" H( R2 ] e- z7 O1 b, z) D .gpio = DA850_USER_LED3,
2 T$ o/ D- l& |. H; n& V# ~ .name = "user_led3",
8 H' [+ k7 ?" e( J .default_trigger = "default-on",
. D! |% V' z% e1 N5 u$ B },
9 ?- D4 O9 s5 ` E2 F- u* E; @/ y};' Z& r+ ]+ b+ z/ Z
+ f+ H8 A* K% H0 M7 ]3 h; @static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* ]4 |( I6 z, K5 I" p3 _- c
.leds = da850_evm_tl_leds,
- i. v' ?2 |+ X9 m% Z0 p .num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 l5 `( F0 ^$ {1 d( \
};
6 w. d# X% d5 X' F* V$ V, j4 _
$ |! [( X* d( K8 Q9 u$ ]) u+ qstatic void led_dev_release(struct device *dev)" Z w+ n/ g8 ]- Z
{
4 n/ c; J0 }( k0 T0 @};/ u* R" S. I% o0 n: _
) P: V% }: ^0 v6 ]# c+ { c
static struct platform_device da850_evm_tl_leds_device = {4 L6 s: z- o R+ c; Y
.name = "leds-gpio",
8 t0 ^2 r; B7 V) ]$ L& u2 F .id = 1,
" _+ V, i# ~0 I .dev = {2 H. ]) S9 _0 E/ I
.platform_data = &da850_evm_tl_leds_pdata,0 I G! X1 r2 R
.release = led_dev_release,! W) ^8 Q$ x7 c4 e
}) q7 @: G5 u) w2 ]
};
! }. ~+ `7 Z; }0 i% G, q. _8 B" d+ O
. @: n' J' g; j. z. t5 N4 vstatic int __init led_platform_init(void)8 c' B6 r* X0 W$ i# ]1 B7 W
{
0 R, [, g1 s$ a' p6 |$ d int ret;: @0 \/ Y; R) y" t
#if 06 D6 ]' Y- [ X2 ?+ o3 v
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( N9 k. C$ U, D D# @* g, s if (ret)3 _8 R5 K8 @; g& O/ l: }
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 ?! g% N" [1 |; w& A
"%d\n", ret);
) j: `2 t& r$ a, `# d$ n$ h#endif
: n" }) ]8 H+ b" t" a& U, J; v ret = platform_device_register(&da850_evm_tl_leds_device);
8 Z# w9 W% Y/ L8 p! h1 T if (ret)- `5 y) i" K" M" K
pr_warning("Could not register som GPIO expander LEDS");
8 F% z( E6 ^- X Q, f1 L! S- k V else% B5 m* Z/ z7 u9 L
printk(KERN_INFO "LED register sucessful!\n");6 O, b6 n! ?; h& T
1 l& h# T& r* l5 C" a# x
return ret;$ G& w( c7 Y6 Q
}
% j& A/ l$ _5 D9 n3 b$ @1 V: l3 { B) W4 ?! S8 M' v
static void __exit led_platform_exit(void)
& K3 A% Z, S# X9 O7 U{5 Y/ i& ?/ F# A% I/ {* ~5 w, t
platform_device_unregister(&da850_evm_tl_leds_device);
) p3 _) x; j* O2 k( I' w& g6 a* u1 `7 m/ F* }, m0 _; j( v, v
printk(KERN_INFO "LED unregister!\n");
- s8 r C" j* g, `! Y}0 [( p; l. c8 a4 R a: L) ]
* u1 y2 |$ r+ U9 X& A k3 Jmodule_init(led_platform_init);- n% ~8 M- F' } Y$ Z
module_exit(led_platform_exit);' ^6 A* b+ ~4 W+ l, N
6 p& _6 E3 |' T6 d5 ~; ~MODULE_DESCRIPTION("Led platform driver");
- [- J; O& S2 O I: wMODULE_AUTHOR("Tronlong");
9 l0 w: ^1 A. F% b9 PMODULE_LICENSE("GPL");( k5 T9 n1 U) c0 k% _- B. t- ] ~
! Q2 g$ c- I9 I9 f' ` |
|