|
|
求大神给下面的程序做注解,请稍详细些,谢谢。- W+ B7 u, T1 Q1 \# Y
#include <linux/init.h>
, ]* o# I) O$ x0 |! R#include <linux/module.h>
% {1 n% C$ ^3 t% d#include <linux/kernel.h>
" e$ t4 ?. L- |2 f% g5 U9 v#include <linux/types.h>
7 s: [3 }; g0 Z! u#include <linux/gpio.h>
: n" d$ A0 O, i/ h#include <linux/leds.h>
' B( z, x. {. }& s; O4 O9 Q, \#include <linux/platform_device.h>
2 i, m8 [' h2 H: Y4 D: _; @: h" X/ R, K
#include <asm/mach-types.h>
7 F$ G8 F6 m) X9 s( T* i* b#include <asm/mach/arch.h>
1 U8 p9 d7 t( K0 O# J+ W/ _2 U#include <mach/da8xx.h>
% ^* _/ u: l0 B0 v; d4 n#include <mach/mux.h>
/ n: [. l5 e$ S' A4 e
- h& v Q5 m$ n5 `#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ d+ e( {1 ?, N/ U- q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 i; |) G6 K& x" `9 a/ R7 i% t#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)+ T' z, a; M' q
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! s0 \" H- T) U7 E! q6 t
+ j" u; ?% d9 l# U R* G- P6 s0 C/* assign the tl som board LED-GPIOs*/
7 ^7 p7 \7 k! G3 |static const short da850_evm_tl_user_led_pins[] = {2 u" _" g$ b6 v( M6 X9 T
/* These pins are definition at <mach/mux.h> file */
) T3 l+ l# s0 B2 K DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. W/ U7 X4 |4 j+ f) Y! z. E4 p -1
) \$ F' H4 F4 ^6 u! E H};% `) A9 h5 Z6 e2 b
+ K3 O) i* m) N# o$ S. D5 x9 Dstatic struct gpio_led da850_evm_tl_leds[] = {
$ ^ F5 O* C* g# ~. E7 | {) y+ c8 w9 A; i9 r/ N5 _
.active_low = 0,& `+ M6 Z7 b1 S- Z& ~7 d, p
.gpio = DA850_USER_LED0,
! B0 c$ l4 V1 ?2 J/ Q' B .name = "user_led0",
6 p( k7 E: X# T4 }( a9 w .default_trigger = "default-on",2 B$ S/ l5 g; V, p+ @5 T3 a" v+ v( R
},
/ O% s1 G& M3 z) f G, Q {
# Q1 f- [4 Z# t# ?+ { .active_low = 0,2 C* X" a c* F! y! n8 |* |
.gpio = DA850_USER_LED1,& \& L" y8 K. V9 Q* N$ h( o$ ~6 q
.name = "user_led1",/ t$ @9 e8 w' F! Q* c% R/ w3 K
.default_trigger = "default-on",% [( Z# R: \/ R3 z% L% F
},
1 Y" C8 D5 p# x+ K5 W {
# | M* o& q( r0 s .active_low = 0,$ n( z2 e1 k) p1 W1 m
.gpio = DA850_USER_LED2,/ O, t C T, L' ^5 H& e+ r8 ` `
.name = "user_led2",
! E ]" M" I' c) H( X! {6 ? N( ~ .default_trigger = "default-on",
+ k3 a: x3 x* W },3 c! Y1 f, A: j' C& n
{
$ i" R4 T0 N$ i! v2 G& v .active_low = 0,
6 ]6 y2 y' B7 Y6 p .gpio = DA850_USER_LED3,
. k3 ?& ?) R f7 U8 Z .name = "user_led3",8 n$ |9 h" G/ _- ~& ~
.default_trigger = "default-on",
1 ]; N2 U/ V5 l* |- e1 `# n1 m u% \ },
3 K4 g a: M0 e};
0 `* I, G7 g# R+ k5 y5 K, \7 S$ V ^, v+ `! q3 u# v% N
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: ^4 _# O. P$ z7 |, a5 c$ c" N
.leds = da850_evm_tl_leds,# u6 w+ J D% y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* Z) u9 d! h2 q- O, F};
- i, |: A$ j T. Z2 c! e
" q" P+ L! f v; E+ }- H) |6 |* Mstatic void led_dev_release(struct device *dev)
0 S: G! i3 U3 Q" |) F{
; G0 j% k; _; Q};5 i: C$ ?/ S8 t% ^) O$ P" t8 G
- J1 l* N7 E, \3 X% ]static struct platform_device da850_evm_tl_leds_device = {' n8 n6 w4 C) T$ \' C8 q' r6 P
.name = "leds-gpio"," H8 C1 X' X# P- d
.id = 1,
, F7 }* a& }! ]( C, K( p7 u' N .dev = {
9 y7 X& C/ u# p$ S3 \+ L .platform_data = &da850_evm_tl_leds_pdata,
% p7 n; g3 j8 i8 h .release = led_dev_release,# J3 o7 O; ^8 w% ~0 D5 V
}+ k& q7 U* D' D. z; U/ z
};3 D! q; x O- C% E: ]" T4 R7 H
0 V9 S8 a* t8 _# }static int __init led_platform_init(void): o' |( m% y- v$ u, n( ^
{
- }5 |" U9 y2 h int ret;6 f, v0 g1 d w. R; y
#if 0
4 ?/ t8 t2 E) a ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* S/ p8 V9 h$ B% d+ S% N5 r
if (ret)
4 ^& K& Y6 f: M' S' H pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 B F; @' `* Y% G, b+ s "%d\n", ret);
' k. a( _. G% y2 j# d- P' i7 V: x; w#endif
, G( \/ i1 R7 g1 Y f5 J# R ret = platform_device_register(&da850_evm_tl_leds_device);' ?1 }, M2 x% k
if (ret)
6 d4 g: T3 L; b8 I pr_warning("Could not register som GPIO expander LEDS");
, ~6 q6 S/ R7 S! \# | else9 I: ?7 ~: c1 _; Q7 m( M7 g7 j
printk(KERN_INFO "LED register sucessful!\n");
! p0 `- l* V- G5 H/ y5 {# E- L3 h; {- t. b6 r2 Z; y
return ret;% W- F- s+ q. X6 \, L
}
+ _$ b/ Y v" ]0 Z0 W
% L/ K( Y' u" I; fstatic void __exit led_platform_exit(void)+ c2 Y6 ]7 E+ c) y/ u' U8 d
{
) M2 w6 q {6 s f7 \, i7 Z& x platform_device_unregister(&da850_evm_tl_leds_device);
* [0 a1 Y, |9 {7 g3 L
' G5 |% T# r ~4 Z; \' S printk(KERN_INFO "LED unregister!\n");3 Q. t- z" m, q$ L
}
0 U; w' _8 E# l r- a5 f
% u" ]6 n5 q) M+ G4 Dmodule_init(led_platform_init);6 M+ T' G( Q' m! x! |* g
module_exit(led_platform_exit);( A) X% B' A4 A7 X
) L' N9 F' f' k. G5 @1 A; E
MODULE_DESCRIPTION("Led platform driver");: G) \2 o3 S/ K2 s
MODULE_AUTHOR("Tronlong");( F4 y/ K; ?9 p8 s1 S
MODULE_LICENSE("GPL");
3 |4 ^6 O. }4 _+ n( ]$ ] W' ]
: m' C0 T, u$ g) Q4 w; M; M |
|