|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 |, v6 _, Q; L
#include <linux/init.h>* T8 t4 B/ ^+ ]8 `
#include <linux/module.h>+ y! d B1 g! N3 {: O) i
#include <linux/kernel.h>$ d4 K% Z: T- p1 c! R8 E
#include <linux/types.h>
! q+ B: v8 c) N: | u$ N* L#include <linux/gpio.h>
2 Y _! K2 ~! O: f% X#include <linux/leds.h>
* `( K2 p4 ~# i" z3 F$ L- o#include <linux/platform_device.h>
0 }6 G8 P) f- [$ r# i, @! ?9 `7 T, X+ d& W7 U6 t! Y: z
#include <asm/mach-types.h>
. `6 K; g2 ^5 S5 S2 G) [#include <asm/mach/arch.h>
0 d7 Y! a6 W0 b! y& }3 I2 ]#include <mach/da8xx.h>: ]6 s+ ~7 _& L
#include <mach/mux.h>2 Q' n1 ~- K# d
% \7 T1 b1 ]9 }1 z- [8 L
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
4 A2 m L6 C L7 M; c/ {. z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)* ~0 k3 B0 ~# e
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 j+ s7 V3 ?; k, n3 q6 N3 u% \#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 Z. ^( P/ x. I3 z9 p8 B
; [8 G) f& {5 s5 F' J5 W
/* assign the tl som board LED-GPIOs*// Q& _8 y( T3 z& B$ |. g$ L+ M) t9 d, H
static const short da850_evm_tl_user_led_pins[] = {3 r" u4 j6 H: Y; A
/* These pins are definition at <mach/mux.h> file */) S) \+ [& g; F/ h4 M
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 T k! q: F5 @) l" f% i- H -1. D+ |& P2 O& `: v0 `% p+ B2 ]
};
: J) R3 g4 ?) R T/ j$ I$ `, z, N9 @; d: W( Q. w8 j8 {5 K
static struct gpio_led da850_evm_tl_leds[] = {
8 }2 M' D5 \+ }5 Q+ X" ` {! ^0 h- z. \5 o+ C
.active_low = 0," H+ E5 i8 }, C6 ?0 I6 p/ Y
.gpio = DA850_USER_LED0,
: c, J* J/ k2 |1 o& h' [ .name = "user_led0",, n) {1 S# C& b; I J$ i( |# V
.default_trigger = "default-on",9 F5 g O. x1 S6 D; _! F
},
) G2 h5 z9 O* ~; O( U {
* ?8 a" V$ K$ Z7 J9 J4 g .active_low = 0,# U' u- u* G8 M3 O/ r0 |
.gpio = DA850_USER_LED1,: ` O2 s3 `( z1 S; G' b
.name = "user_led1",* D- A1 @3 W+ [# R4 c2 C' I
.default_trigger = "default-on",
" V, z6 u; E3 B$ B" K },
, W5 D* D/ x) x& T: n7 |7 ` {
9 D' @8 y5 I' v; m .active_low = 0,) D9 l/ O; ?# Y- P
.gpio = DA850_USER_LED2,& l7 L$ L4 O4 u$ y' N6 p" S
.name = "user_led2",
/ K4 r. u, o) m$ y1 W- S& v .default_trigger = "default-on", Y9 o5 w) H: R# i C; A
},
: v) B8 y2 W4 O0 C/ Q2 x9 d: \ {
; ]% V1 J' m9 J6 b .active_low = 0,; g* Y) F% r. B- ~% Z" o! f0 r
.gpio = DA850_USER_LED3,
4 k0 E) I2 K% @7 u, d. x .name = "user_led3",; h1 _% B1 V9 \7 b- k1 x) ^$ Q; A1 j% J9 b
.default_trigger = "default-on",
3 ^' J. o0 C+ \- T) x0 y },
" W$ l, \, N f/ U3 ~};
) d, }+ d7 @ {/ ^( k) S& V
0 k" R/ d& S, f; ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
# s" W E. s$ m .leds = da850_evm_tl_leds,+ u2 m% n4 \: Y" q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, n9 {+ n1 E; C. h};
6 S5 j5 q( s# h! u m( D: f6 \- p3 t* `8 H9 j0 l$ q$ ?. w
static void led_dev_release(struct device *dev)0 O" {1 k& v3 _- A0 o- e
{' b- H! q5 V4 h
};9 S) V4 S- V/ j
9 n2 o3 `& r# t" }. Ustatic struct platform_device da850_evm_tl_leds_device = {+ A' U: r. y5 o$ p5 D# `
.name = "leds-gpio",
X0 W% d4 Z( b0 r) q .id = 1,, t9 a5 n7 T6 ~' X. ` }4 r
.dev = {6 D: J$ I# x" [% S) \3 B! C! Z
.platform_data = &da850_evm_tl_leds_pdata,
_+ z' B& K. V4 a7 s .release = led_dev_release,
. i" X: x2 l+ a7 f }
+ K+ }# q( L$ C; `3 c" }};* G8 Q& r. a: l- v
/ E- f2 H3 E$ G8 @& ]1 Kstatic int __init led_platform_init(void)
. C( i: Z7 W% ^: R* m0 X0 F) m' U{
% L4 {" p5 G4 h% m7 i0 b int ret;
# s6 }! a$ t+ ~4 S- L#if 0
1 u/ t) m1 P, X. ?6 A ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
8 L1 j' F: o/ w* e1 E7 e if (ret)
% N1 I+ D' ~ N; h5 U; { pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) _; }6 e% }4 I$ J$ f6 h "%d\n", ret);
. Q" I9 v- R4 u2 e8 g+ j#endif
6 h, D7 {6 M8 Q p: I ret = platform_device_register(&da850_evm_tl_leds_device);
" K! f6 c% a7 {( m if (ret)0 Q3 a/ g/ E+ y
pr_warning("Could not register som GPIO expander LEDS");$ [' X9 G5 u* R& d. c8 o9 u: `1 E
else
' }+ i; S- T* u, s1 g9 d printk(KERN_INFO "LED register sucessful!\n");
* I$ |" |3 R3 e& ]2 g6 V% G
$ Q# d/ A8 H- {4 Q8 m* T. r+ G return ret;
. I+ o7 z% n2 x}
# }7 Z' u' l- I8 K: b& i4 a0 t/ ?/ R, B
static void __exit led_platform_exit(void)
7 _5 M" M- H- ~& J+ G! W) p{
# ~8 F) i" @: ~; h) L7 Z platform_device_unregister(&da850_evm_tl_leds_device);5 D8 Z& l/ e: e" x0 P2 [- g8 x/ J
$ ]7 V5 R$ O2 O4 E) @- a9 w- E( t! ^ printk(KERN_INFO "LED unregister!\n");
, ]6 T# ?9 v: J9 C}
* F" b9 h8 c: f# ]5 Z
, \, K8 m; j& D0 D; V1 V+ C( m! dmodule_init(led_platform_init);
9 K& R, Z0 I$ |module_exit(led_platform_exit);
5 z/ \% Z6 [2 u, k0 Q* \
/ r- Q/ g- T5 R+ U0 Y4 {0 RMODULE_DESCRIPTION("Led platform driver");
4 e% s. b1 i2 I. J1 c% H2 |# pMODULE_AUTHOR("Tronlong");. U0 a0 k5 M6 o0 j {" ?
MODULE_LICENSE("GPL");
! W5 r2 ]: q& }7 x% u
4 f5 b9 }8 v: w( Q3 w0 @6 ? |
|