|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 F \2 ^* R4 P7 R#include <linux/init.h>
% f. F; J2 `) M4 y! H$ ]& m#include <linux/module.h>* e- z. J% w$ U* h) w* k
#include <linux/kernel.h>
- T7 X/ v) b6 |0 S, \5 s* \0 i#include <linux/types.h>
' w3 S n( f* M) t4 e$ x. Z#include <linux/gpio.h>
' s, q0 d* k8 f, Q# N) r3 r! {#include <linux/leds.h>0 I4 b8 d( u3 O
#include <linux/platform_device.h>8 Z5 e- W& i6 ?! N
8 ?: r1 ~% k6 M3 L' U#include <asm/mach-types.h>
7 ~$ o+ {4 M3 j0 L/ }8 Z* j5 a#include <asm/mach/arch.h>
) D9 c* K( y9 e5 R#include <mach/da8xx.h> [5 ?9 p" y: }0 P
#include <mach/mux.h>) j# v. F: K% V" Z' G
+ _9 ^4 n+ }1 |2 b! q#define DA850_USER_LED0 GPIO_TO_PIN(0, 0): T$ P6 i/ s. j* p* R8 h1 z, W
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 Q3 {0 ?: Y( R5 o7 r, C
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) r' G8 U( g6 z9 L0 O#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ s2 d/ A. V; e+ f' U& t5 ~, |2 z) x; t- ?/ d+ j( |+ G
/* assign the tl som board LED-GPIOs*/# o( c$ V# }8 ?
static const short da850_evm_tl_user_led_pins[] = {
1 a0 X3 F( n/ A, d /* These pins are definition at <mach/mux.h> file */# { x& D* E; {( d
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," q8 ], w% m- g! s g" e" A' l h
-1
8 u/ O% X( X. T0 Z" k};
# _ S+ o3 s: U$ U1 Z1 E1 O% d
7 [% K' \5 ~4 J0 I( Dstatic struct gpio_led da850_evm_tl_leds[] = {- G+ L" @$ w$ R0 l+ u
{
5 w# h6 P/ _+ n1 t, o .active_low = 0,
1 L, ?" t( ~9 ?( A .gpio = DA850_USER_LED0,& R2 p3 t& y2 \! {0 @6 t2 B
.name = "user_led0",
+ i( D& P: F+ q% \9 N( I- `3 p .default_trigger = "default-on",! W! u0 ?8 i% R* n8 |! ~) m6 x
},8 m- h- h+ |1 Z" ?& Q
{
% ]8 o: V& ]+ b2 L. a .active_low = 0,6 q7 j7 A- p. y, Z
.gpio = DA850_USER_LED1,1 F8 |9 O* W: Z( V3 v
.name = "user_led1",
Q8 o9 i! o4 \. R% | .default_trigger = "default-on",; ]6 _% e8 x0 ]; P" S
},& U& n( H$ `1 _& @5 e2 d
{5 f2 r% ~- L: z1 q
.active_low = 0,
4 h0 D9 B" T1 D8 r2 r* u. }$ z" g" e9 O .gpio = DA850_USER_LED2,$ V" Y. C6 Y" Y3 {# \. i, `
.name = "user_led2"," C+ f2 J4 f7 ]6 E* M) Q
.default_trigger = "default-on",+ \- @$ U& b4 X) n N4 }; Z5 _6 p
},8 p1 P# g5 Y6 X# a3 l! |
{
! L8 i" Z5 n0 m) p) s .active_low = 0,
( Z8 l, t, N4 P, z5 p& ~) { .gpio = DA850_USER_LED3,
3 \4 S- t9 \! _ .name = "user_led3",
* w# o" A* k/ o- _9 z/ z9 ~; K .default_trigger = "default-on",9 J' n3 U4 C9 f S) j3 J( N
},
$ y4 q( ~ [1 w};2 n; c7 t! c$ V1 p) Z. ]
0 h9 K. J' v% q, a E, T
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {5 ]( V' v3 ?; s* g& P# `, ]
.leds = da850_evm_tl_leds,* F- y+ k O5 T- I/ G3 c- T
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
- u( S2 C. J- O9 t};
: q( a* S4 H" e9 B3 y' S% k9 d9 |& `0 V$ j1 O, `# g. u& n- w& J
static void led_dev_release(struct device *dev)! v( ~; \* l5 R0 H
{
' u2 ?% f3 I x) U, c1 p7 _};
- N" N) W4 i1 M1 V9 D8 f* z2 n& F; w- e
static struct platform_device da850_evm_tl_leds_device = {
9 J$ r0 x4 L" H+ a" e. B5 F .name = "leds-gpio",9 |7 R5 r( |1 Z/ W! {
.id = 1,
5 ^. X( a, v9 v .dev = {' M7 J; c' C) Y) R f: W
.platform_data = &da850_evm_tl_leds_pdata,3 x' P) L% h! y
.release = led_dev_release,
3 @5 y0 T7 u ~. F/ k# Y9 z* v }
+ F1 r& [+ z6 L};: ?5 f; c5 [; z1 a0 k# y
' }( O+ _8 j- k
static int __init led_platform_init(void)" f8 [$ k! P; }/ F8 a
{
& x @# ?! K7 N# P+ k int ret;
- g6 I9 w2 |4 s) M% |8 q4 ~+ V#if 0 \! Q/ L& m" G
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- K* Y( j' y$ v$ i3 Z if (ret)
- c9 ]( y+ B0 w: y pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 o; R- f6 ?+ ~4 d2 j# t* A
"%d\n", ret);
8 B* Z3 |6 P* k: ] J/ }3 I#endif( W/ V, I1 h: {( A8 A
ret = platform_device_register(&da850_evm_tl_leds_device);
% Z; z+ h& g- e" U, C if (ret)$ t. g+ X, M% ^
pr_warning("Could not register som GPIO expander LEDS");
% o8 b6 h5 e9 x9 f6 A5 {( i& ? else% q" s4 G. h3 |8 `
printk(KERN_INFO "LED register sucessful!\n");. z3 J5 J1 W) k/ x
: M3 g5 U1 w5 g return ret;# w# _7 {0 g, E2 f/ ~! W: s
}3 t( {$ ]# Z+ p5 F7 Y
; e* V8 T% ~6 ^% B: j
static void __exit led_platform_exit(void)
C1 A, h R& Q{
5 Q: S( L8 _( W6 w. S platform_device_unregister(&da850_evm_tl_leds_device);
1 `. T! I8 L6 B. Z% j: Z
' d! A% [! o, J/ M; d8 M printk(KERN_INFO "LED unregister!\n");5 ?5 j# r9 w8 m1 a3 ~# a' m' l( ]
} V: n, X' C9 Z% v9 v
: Q1 q# e& T B( H# i( [4 H2 B
module_init(led_platform_init);
# k& w$ x+ n2 \) T0 ^module_exit(led_platform_exit);
1 x5 v5 H7 T% s, w+ w
/ G/ z$ W5 J/ ]5 l& M# eMODULE_DESCRIPTION("Led platform driver"); u7 W! j8 h( e! k" K
MODULE_AUTHOR("Tronlong");# _ V# w6 B) O' l# f* E
MODULE_LICENSE("GPL");
* N' [6 m8 `# n+ g9 R3 t/ a L2 b( g
|
|