|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 B& k# X0 X, A+ S
#include <linux/init.h>
( }: J4 u6 k* F: W' g#include <linux/module.h>, i v: `% \) k! ~0 D+ W1 X
#include <linux/kernel.h>5 t/ f9 ?; w3 o1 G) ]+ _) I
#include <linux/types.h>5 g0 x9 a, F8 I" w2 _
#include <linux/gpio.h>8 J$ _8 d/ O% i# W$ x' v
#include <linux/leds.h>
- _. ]5 @' @6 z) Q#include <linux/platform_device.h>( z8 ^* G; H) |
% H' t5 G* W* B) d4 }#include <asm/mach-types.h>
, b7 I) _# ~; H0 Y; k1 [#include <asm/mach/arch.h>
% n) _5 g" t0 `4 {4 R#include <mach/da8xx.h>& x8 [& {4 W, }
#include <mach/mux.h>3 @+ l7 d4 f3 o$ ^% W# J
7 v! y2 n! h9 o4 f! H ]4 `#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ Z/ g/ s; [% x7 a3 Z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# Z3 `& h% `+ U, o#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 |. |8 h' {7 u: _% z6 E1 M
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! m1 }$ z! A+ n; B, K7 q
/ a) J! Q9 F# e: ~0 L9 b. Z7 I% L/* assign the tl som board LED-GPIOs*/
& e( B5 R8 z6 W2 g7 Estatic const short da850_evm_tl_user_led_pins[] = { A4 _2 h7 S3 r- Y* z( d2 |
/* These pins are definition at <mach/mux.h> file */, |' s6 g* X. p' p4 ?0 K
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, J) h' X! K/ e& e8 \
-13 d8 l! P: b# v7 m# _/ @$ t
};
+ Y2 m1 B2 R/ F: q5 \* B( A
( z9 a4 U3 ^5 ] Y* o6 ?- o' \static struct gpio_led da850_evm_tl_leds[] = {9 C p4 e) b3 ^9 A4 [
{. ~0 I4 F, l0 ~0 ]8 r
.active_low = 0,
! q7 o) Q U- O5 e' \ { .gpio = DA850_USER_LED0,/ B* U( f9 n5 P1 y# f
.name = "user_led0",
4 W! B% q0 j! ?0 u( n# D. h' [9 @ .default_trigger = "default-on"," u, `5 s1 W7 z. \
},
+ J7 X" A4 D( r4 ^ {& L& h, Z {
1 v9 g3 y& H8 @- L" j" _7 \ .active_low = 0,. j1 w- X' B4 w9 K
.gpio = DA850_USER_LED1,5 c) _+ E% B7 x% I/ C' S- J* m7 R. M
.name = "user_led1",& t7 } v% O8 ~" M' K
.default_trigger = "default-on",
4 L7 p8 t4 Q0 I `' b; @ },
5 H& t3 x9 ~. K7 Q8 ~ {
/ Z8 \% I. t& B9 C1 K* F0 Z6 x .active_low = 0,
! C7 U) F, c: K: w# j7 S4 I/ Q3 ? .gpio = DA850_USER_LED2,
% \" J$ f; ^" G/ ]4 l$ M .name = "user_led2",1 Z( A! O: F# R* r* ?' ?
.default_trigger = "default-on",$ V1 { M+ ]* c6 C# i; {1 i
},
( y9 p9 n9 Z9 f {
8 t- ^$ _, N& g1 P .active_low = 0,1 b8 k9 |+ M) o6 D3 H @0 p- x
.gpio = DA850_USER_LED3,5 t2 I( g) p# A8 g* ~5 _7 l+ ^$ k; v8 P
.name = "user_led3",. H, R! q& M$ S, ]$ k3 }
.default_trigger = "default-on",
. e; a/ C% j2 K% `% i+ t },
. p+ g# B2 ~0 n7 n" [};% G& a; {7 [, [, |' o0 f) v
# P3 }9 M- s" |. k. `. x" r: @static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ D" t: x9 z# }8 l$ v" x .leds = da850_evm_tl_leds,. b4 D! Q) h9 O4 s" f
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' N0 Z% B6 N3 W* r) E};* I/ ]/ d4 B% }# Y) S3 Y
6 P! T+ ?7 _8 q7 {static void led_dev_release(struct device *dev)
. y' w0 O0 D8 c. f( F( Q9 S{6 w T+ t9 f, r8 D. Z
};
, A5 Q7 S/ S" o' r {. m6 M4 s1 z& U9 }
static struct platform_device da850_evm_tl_leds_device = {1 Z; j& v6 e7 n4 x
.name = "leds-gpio",) g, r+ N, I" _1 R+ ^
.id = 1,
! e- R3 ?& ^& j: a0 |' d .dev = {
( W' E! v4 I8 G) h" w& h+ u .platform_data = &da850_evm_tl_leds_pdata,
) ], g4 R; L% q. j) J) u( |& T .release = led_dev_release,4 W7 y. o& G3 R$ b* z/ Z$ t* z
}' S- P2 R* b, b* _8 h" j- D5 ?
};; U5 \7 A% \+ K, z
- ~2 u0 n( A- ]$ s8 ^
static int __init led_platform_init(void); v/ ^- B1 O+ z% _
{4 @8 i! r& r6 S* J$ ^
int ret;5 d8 ]' F5 y X& ]/ ?# g. b
#if 0
+ q6 C- S# ?3 \+ O ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);2 p- k: F/ P" A! ?( D
if (ret)
2 N9 b( C8 G# c B, N* f5 M pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 b. }; n3 J+ _/ w) d! E
"%d\n", ret);
/ J. b( O5 {" h#endif7 E, j8 w h# n, N* {
ret = platform_device_register(&da850_evm_tl_leds_device);
[8 g9 o( ~) M- a1 e& o if (ret)
$ i# k# ~) v2 F; [0 E pr_warning("Could not register som GPIO expander LEDS");1 ~! C/ C6 r- h; x
else
5 c8 D' K; @1 y k4 F, A printk(KERN_INFO "LED register sucessful!\n");
5 H7 K* h" M5 i' D7 a3 L5 F$ y( P6 l% u/ G
return ret;' _: U- J9 i8 T* d! j6 ^
}2 Q& R# t( R) u' W; f& Z" j
- n3 c3 l" Y( A% h; B
static void __exit led_platform_exit(void)8 I1 n$ }2 C( X3 y. R8 C! g% P
{
2 \; Z W) d3 z9 g! G" @( E platform_device_unregister(&da850_evm_tl_leds_device);" {& N& t" L3 N( ~
: o; e7 U/ h# {# T; y. B
printk(KERN_INFO "LED unregister!\n");
- _3 Z! T) i/ u1 G}5 u# ?. r0 a# q6 J+ `
2 s! F/ y2 @0 g. i
module_init(led_platform_init);
4 D' F: [) o. ?* mmodule_exit(led_platform_exit);
) A( B: K" J9 n9 G3 ~! C; b
% v$ J! \1 b* S" f, j* GMODULE_DESCRIPTION("Led platform driver");
# n& }: M* V+ t/ yMODULE_AUTHOR("Tronlong");
u% K& _# G1 S+ I% m5 b; f% jMODULE_LICENSE("GPL");% x! M( U' s( B5 a3 T: j% o( x$ B- [
7 P+ o: a1 u: C& W/ b7 R8 c
|
|