|
|
求大神给下面的程序做注解,请稍详细些,谢谢。- Z" A6 U) [* K$ s" \7 Q H4 D
#include <linux/init.h>1 U0 S7 \0 E$ p7 c
#include <linux/module.h>/ A* s. w5 e0 u3 v' O: y
#include <linux/kernel.h>8 T) U( j1 {9 l/ A
#include <linux/types.h>
) [: W! T$ V+ F#include <linux/gpio.h>
2 O& a& t/ x1 }#include <linux/leds.h>0 S" `/ y4 @0 I8 e
#include <linux/platform_device.h>$ q# T4 L% e! V
; s* x( M7 t8 O: S#include <asm/mach-types.h>
' O) r$ R0 j" l* X M) X& v#include <asm/mach/arch.h>
, Z: }" u4 X. b% F# p#include <mach/da8xx.h>$ N6 j8 R5 c6 v7 {) h# I
#include <mach/mux.h>
$ c: Z" L1 j, @ \ o+ p( U' `, y$ D' x9 _# a' S7 c; r
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
* a z3 ~3 B* g& @#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 L9 D. M5 q: \; v* w
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) h: P }7 K% L) T3 G
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 {; Y! U! B7 u6 M
1 F/ O+ t. ~- B/ S7 t# J/* assign the tl som board LED-GPIOs*/3 E8 V# o9 v: S5 P/ |2 Y# ^1 X" l" ~
static const short da850_evm_tl_user_led_pins[] = {7 j: \1 m; x9 l3 O! C
/* These pins are definition at <mach/mux.h> file */& E& j3 s4 n7 T% f
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 q/ l- p( b4 ]5 G5 F
-1
3 U+ x! [5 [2 G9 p9 L" U+ R& z};2 \ @; k$ a: |. M
X' r3 s' j3 ^' R: Zstatic struct gpio_led da850_evm_tl_leds[] = {
9 _$ K+ ~# d. r |" [1 ]( ^ { P5 [6 \: s# Q$ [) Y9 a
.active_low = 0,, [: L, k; g4 I1 q, L
.gpio = DA850_USER_LED0,
0 r& W. H5 D7 t' v; r .name = "user_led0",
# y/ z2 q; }% { D8 S1 s/ L4 Y% m .default_trigger = "default-on",! \/ g0 f& t7 P/ {+ J. L
},& P) ~% q1 ?- j: R
{4 ?4 r: S2 t3 j( n' U5 i
.active_low = 0," H( n( _& a* [7 y$ J3 i( A
.gpio = DA850_USER_LED1,
9 y" ?- n5 H! [8 p .name = "user_led1",# s' }- y$ d B; x7 S3 c
.default_trigger = "default-on",
`3 n i$ Z% I+ ~/ N },1 h0 t, G7 \. J1 y% c& v2 c* u
{
& c* k$ e+ E/ l& W f' M .active_low = 0,' h% [3 [# \; E4 R% Y3 n1 P; d- g
.gpio = DA850_USER_LED2," ?+ r1 x# }# @. I
.name = "user_led2",6 H# [% U1 U7 A
.default_trigger = "default-on",
( {# n1 ~0 G+ N },
, q k5 m# V* D# s( \ o2 U& B {& _: X. C. D; l$ ?/ f+ n
.active_low = 0,5 A! O0 U* u, [" [0 r1 F
.gpio = DA850_USER_LED3,
" z/ e2 B9 P* A9 m- g7 }; W' O0 W6 i .name = "user_led3",
+ D; C1 x- U# J1 J0 D e .default_trigger = "default-on", J0 h7 f; y, p' z8 B
},9 s2 H' F, v; {9 U& G
};1 a! W* M! ~! ]& j& ~( p
. I i9 Y% z8 t: ?. g" \static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 o; k- V5 A& T* g3 W .leds = da850_evm_tl_leds,
& |8 O9 P" A6 |: D. I( M .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 w' j9 y3 K. G( H6 g}; e8 Y& ^( l* A" Z
4 h, x0 J3 B- r+ g
static void led_dev_release(struct device *dev)
6 t$ u4 U9 F& F% H/ k0 J{! t J% `3 s6 y
};
4 \# |6 C; z& y' z. m) Z3 c
* b. ^- l; G$ e% O4 e8 S2 Jstatic struct platform_device da850_evm_tl_leds_device = {& y2 M5 q+ a" U& y
.name = "leds-gpio",
* O0 _) C$ G7 [! ^0 k .id = 1, \5 V. N) h: ^
.dev = {
# B8 g" P1 x7 m" ^" i& r .platform_data = &da850_evm_tl_leds_pdata,
# U+ |* m# N; M .release = led_dev_release,
1 X. g* ` W5 Q9 K }( Y! U, }$ M" o2 ^
};, z5 X& |6 U/ l
9 |" a t) x4 Z, Mstatic int __init led_platform_init(void)
: s3 s9 |- j4 ^' q9 |' p{
% D* \! ?6 t4 [5 i1 w9 V int ret;/ a( A# a {' c3 E) G1 N* M
#if 0
8 m0 a* y- a' _; @, i; V' [ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& I$ S4 X1 r; N B( S) i7 \3 c
if (ret)
( I3 [6 R& A7 e# r7 h5 R8 F pr_warning("da850_evm_tl_leds_init : User LED mux failed :". a9 J' t0 i' Y$ k3 |
"%d\n", ret);
: ?- r" g- q$ B2 m( b' v#endif) p$ b4 C. i4 j+ O! s
ret = platform_device_register(&da850_evm_tl_leds_device);4 o: N8 m5 \& O0 A0 { u- R
if (ret)
+ y* |5 z/ ^' S- i6 Z pr_warning("Could not register som GPIO expander LEDS");& J+ U* ^/ S2 U0 o% J7 w
else
& L# t4 L5 h; j8 { D) X8 q printk(KERN_INFO "LED register sucessful!\n");& H/ c* e$ x- C8 R6 W
" _" V- F# [! A# y4 E; X( ~9 y* M return ret;5 R; N9 F/ F* R/ p& O0 h" F
}5 b [* B8 H6 U/ _) F
5 b1 V0 N+ B- \static void __exit led_platform_exit(void)
+ @1 t9 r$ n) Q% W! c; T, p! v{5 s: F, j K8 @5 \9 O* Z
platform_device_unregister(&da850_evm_tl_leds_device);
3 ^7 s" M' c3 ?6 t9 z' p: q7 Z4 R3 ]& Z
printk(KERN_INFO "LED unregister!\n");
2 y0 L+ x! W# ~5 T/ |. s c! D9 F) @}
) \8 M" S* q6 b1 {2 d' g" y$ u) K- \/ D+ _" C1 T, B8 ?9 ^+ e3 l
module_init(led_platform_init);% y$ |, ^8 `! ?, L- k! U5 k' M1 G
module_exit(led_platform_exit);
3 g8 t* g3 j( m l6 k! D
/ d' J) @. g k @7 V( s4 \+ NMODULE_DESCRIPTION("Led platform driver");7 ` O `- R9 q
MODULE_AUTHOR("Tronlong");; y. I' x" Q2 [$ }& N
MODULE_LICENSE("GPL");$ I% o% }/ V7 o# r" q& n
7 x @* [6 g# T5 s5 C# E/ B |
|