|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 ]- e) v5 V& P- \" H! ]
#include <linux/init.h># z) ~9 H. }. x3 O9 K8 K* E) u
#include <linux/module.h>
$ C- \0 j2 v/ q- Z4 q- k#include <linux/kernel.h>3 t8 N2 ?. L3 U# `8 V1 W
#include <linux/types.h>
% S9 ?8 E2 b* V7 ~$ P#include <linux/gpio.h>0 h9 S; ~* e! K* V! p3 K
#include <linux/leds.h>) }* e! F$ A7 A0 \+ s0 O
#include <linux/platform_device.h>, S7 \& w# Q; `! \1 R7 ?
! g( Q) ^5 D9 A0 `: ~#include <asm/mach-types.h>! M5 d) z' N: E
#include <asm/mach/arch.h>4 r6 X5 N! s1 c4 v1 Z2 e" H* V, h
#include <mach/da8xx.h>* T& a# x6 x; V1 y& A( z" m: }
#include <mach/mux.h>. P4 e2 K" E! z+ W7 \! z
6 ~# n5 g$ L" `& z9 \: r* D
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 k& o$ {" M% u A
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 _3 ~5 q. G7 J$ V
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
W, J$ E o1 `2 l) C3 z- Q#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)8 @, J: I* r5 I! ^' Q0 S
6 }* W3 c- W2 _; T* Z8 P) Z/* assign the tl som board LED-GPIOs*/8 t ~, u' e n: n
static const short da850_evm_tl_user_led_pins[] = {7 p5 H5 R% L2 t: j1 f3 B0 T
/* These pins are definition at <mach/mux.h> file */" C, L, r7 m6 Q5 w3 D j
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
! r0 @) P& D; @3 g3 g# L -1: d$ o0 ~$ B5 u- s! e
};% U1 v9 D$ l1 K/ C) K/ v/ N9 o) B& b
+ z1 a7 i- T9 w2 c, k( kstatic struct gpio_led da850_evm_tl_leds[] = {5 T. J# \3 n0 r2 h/ m5 B) |% U, i
{
: \$ R) z1 w# P% h .active_low = 0,& d; p- H' X' z4 k) S
.gpio = DA850_USER_LED0,
" B: a! D$ {9 m2 W: ~ .name = "user_led0",
7 t) @ r. L, R3 c \7 ]) X, X .default_trigger = "default-on",
: p2 S" @! y3 Q2 T+ H% c },
& B9 m1 S1 K" x, t, g/ J6 k. F/ e2 J- d {' G& b' u8 s; g4 W( c
.active_low = 0,! c7 I- ^- b+ c- R1 I4 \
.gpio = DA850_USER_LED1,
( j6 B6 ]. b7 S$ V4 L& t3 q. {8 Y .name = "user_led1",7 O0 L5 [: @% F8 e
.default_trigger = "default-on",% ^# I3 X4 u9 _0 @
},
1 {# T4 t7 k6 _! B+ ^* l3 F/ c/ P2 E {0 Z# G: c( Z F2 D2 ?" I
.active_low = 0,9 s+ T; f9 c4 ^1 C
.gpio = DA850_USER_LED2," j8 [8 X' X8 j" D+ w0 r) T
.name = "user_led2",
1 W0 L: V% R4 E( [! y0 v .default_trigger = "default-on",6 C0 _4 F; g0 S* T8 A3 h
},8 ^4 v3 e: s5 y9 r* y9 p5 u& v3 g
{ H# _2 E& C$ r- i# k+ H
.active_low = 0,6 j9 \: z; K' l+ v. l9 o7 e
.gpio = DA850_USER_LED3,
" ~/ G. q' X" y: X9 m W+ ` .name = "user_led3",( a# g b9 I7 r q7 W
.default_trigger = "default-on",0 j" V d3 Z5 W- Y1 F' l. N
},
/ w& B6 p8 [1 t3 v( w0 t5 g};* F. N" d3 b6 ?% O
! O V( H/ j) o3 L' I0 P, u
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& l$ J$ A5 [2 G9 e .leds = da850_evm_tl_leds,
}" ]2 q6 _) p .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; u: P8 f+ u# |9 {9 \7 o' L+ |};" v8 `$ B5 ?0 t" G1 P$ v5 o9 c" l
/ B0 w& ]3 n9 N" |static void led_dev_release(struct device *dev)
; s0 B) _3 G: u7 t3 T( w$ ^6 u{
* u6 \ C# u& h% |7 G" n};5 q* \4 f! m+ `. f
: Y4 D0 C$ Z! O5 J8 {static struct platform_device da850_evm_tl_leds_device = {$ R4 f2 d3 ?: x& x- X
.name = "leds-gpio",
9 r% l& Q2 W( h# W$ d$ B' s$ b" H .id = 1,
& U0 x! D+ n: n .dev = {$ ~$ K. q- d' {* S' |4 I2 K( i
.platform_data = &da850_evm_tl_leds_pdata,
+ O% J k, N7 l# Y+ e- @3 [3 j6 T .release = led_dev_release,
6 d) {' g& f, z* V }
1 V \. e3 p9 c& e% o) c. K! U8 |};; s- e: w' X9 L2 l' t
( X4 e: t( _! c8 _static int __init led_platform_init(void)
! r7 C, k7 o1 O6 Q{
5 }; s8 `' z9 H' C5 v* S) P- l int ret;- }& {0 ~5 n' M% N8 k- k
#if 0& n+ p2 I( a! H$ {6 f( i
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); ?: k8 L" k! \" u1 O# w. B, Y
if (ret)
* j- M) d; @8 | pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# n* z( G- X2 O. x "%d\n", ret);; f- X- w) F- F9 A$ H+ s
#endif. \$ r; V3 Z: ?. l* X: W, U
ret = platform_device_register(&da850_evm_tl_leds_device);" s, a4 f. o% s- G5 W& p. P3 H
if (ret)
! n; d$ e8 R* V( a* P pr_warning("Could not register som GPIO expander LEDS");/ r# d; g* q. l) }9 i# x2 b
else1 `! ?5 J( B O
printk(KERN_INFO "LED register sucessful!\n");
( }# X) u! V& x. p7 [. V8 x' E8 N) N" I8 c2 }. K% ~4 }6 L
return ret;
2 m8 `& j1 i9 s# T3 g6 G}
6 d( h7 O* _& ^3 f
- n# G% Z7 w, p3 v Sstatic void __exit led_platform_exit(void)
) \7 E! o7 D7 |; K) ^{) ~9 p) S9 h* m i0 W/ X" G$ U; J! H" t
platform_device_unregister(&da850_evm_tl_leds_device);
]9 S# \% K+ E
5 X T# \! \2 M. j printk(KERN_INFO "LED unregister!\n");
* U x4 A; I/ `1 _, e* a U# s, Z}3 I) U2 n7 d6 d2 w! u2 d( E
) A& I1 e" o! I7 T5 imodule_init(led_platform_init);
& J e( t1 J; s! u- g5 [$ tmodule_exit(led_platform_exit);
+ R7 E: C$ _9 Q+ J
( h! V; v; f2 HMODULE_DESCRIPTION("Led platform driver");
7 o1 A5 D7 Q, a' W7 ]9 v! kMODULE_AUTHOR("Tronlong");' O3 B4 V& G2 n: T# ]2 y
MODULE_LICENSE("GPL");
0 ?$ B6 V7 v; i' y8 L6 i8 N- n2 e/ p7 W8 x5 s4 ]
|
|