|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
) R+ [: I: F6 v; ~. j, w `* G0 A#include <linux/init.h>
, A$ D& F! ]6 U9 B" w#include <linux/module.h>
& q, Z8 c' `9 K, W* t#include <linux/kernel.h>
" D1 V+ v Q6 c. t#include <linux/types.h>
) C8 @) \# F! U9 T( J1 d; ^#include <linux/gpio.h>/ @) M6 z0 _( _ U* Y8 r- i* W( ~
#include <linux/leds.h>7 t" B; o/ C3 a- W, \2 S
#include <linux/platform_device.h>
. x7 L- p, a7 ` a8 u
% x6 Q7 [3 Y! x% c/ M- E& V#include <asm/mach-types.h>* t7 d$ Y& g9 @+ r! v) Z
#include <asm/mach/arch.h>
6 d& _. J: p" U#include <mach/da8xx.h>) g9 M, ^( s5 [& s0 `
#include <mach/mux.h>0 p: ` X6 _3 m8 e# [5 S0 y- e% q
+ f$ H3 o1 n' Q9 c: f( j! Z: q. L! O
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! y8 g- K: l0 X. p7 M
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 O+ u# G" R. l3 Z4 k5 G/ ~
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
1 t$ t+ g4 g0 H8 s1 q) R. `+ {, `#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; R9 {9 T& H! H; e. G- K! A7 E
/* assign the tl som board LED-GPIOs*/
/ S: _. N+ E& ~, v% f. N1 Xstatic const short da850_evm_tl_user_led_pins[] = {: w5 q8 A- l+ e8 ~
/* These pins are definition at <mach/mux.h> file */' {; w3 z1 s1 r( Z4 d
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ d" u" m3 ^8 x5 L! ^ -1
6 \1 d* @; I- p- `};
4 V+ q. P0 m& P4 C( |' K. U) F! Z2 d
static struct gpio_led da850_evm_tl_leds[] = {, j' Q3 W( F8 I
{
+ N" Q6 I( U* i8 Y, t4 |& c' m( Z .active_low = 0,
+ O/ S, C( y0 Q9 H .gpio = DA850_USER_LED0," V" Q$ {+ h# G7 i
.name = "user_led0",) G& a/ \! g; Y/ E: |1 m
.default_trigger = "default-on",
. r! R7 G, i2 B# D4 [ Y0 _. {5 ? },
& w! Q$ q N8 T) w9 F( { {
) E: h+ R* s& k .active_low = 0,
; z& r( }. L7 f/ t5 _. v .gpio = DA850_USER_LED1,+ \6 A* b4 w! Z
.name = "user_led1",. p' H* I: J3 c4 x: F, O( _
.default_trigger = "default-on",7 S8 U- \0 u& ]( v* t5 G6 F
},
( W9 Y" u4 |. X& R \ {
. b- r: ~, n3 s0 I+ S .active_low = 0,7 `/ g; ^; I4 J, j, E: n0 ^
.gpio = DA850_USER_LED2,
3 e, }$ C f& `! o- P0 M4 c .name = "user_led2",
1 H& V) d$ t/ ?" x .default_trigger = "default-on",
3 O+ F( a' i/ E& V( O& w8 a0 [ },
+ I, P, Z8 M4 {5 w( L( `9 P z {9 J m- j- n2 c/ E$ S& A
.active_low = 0,
. R/ K/ l+ G+ a J' ^0 x3 s" o .gpio = DA850_USER_LED3,# {2 n% b2 Z/ h, [7 B
.name = "user_led3",
3 u: E' V) L5 L* X. I2 e6 l+ d .default_trigger = "default-on",4 e% [: w M, c
},0 B% n* T' a! g3 W% ?6 k2 p
};
6 T. r6 a" b1 x4 U
0 w! ` ?8 O( _1 r9 A. Nstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: ~& t/ z1 h/ N" T7 F .leds = da850_evm_tl_leds,* ^* G; y @# h" M+ s
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),. a: ?3 b& G! S" M, q& p. N" o
};: q# m$ r2 d [9 V4 j) n
& `9 T. F# d% [4 p
static void led_dev_release(struct device *dev) n4 H) a1 A' z! C( a, ?: K
{
6 F' y# C* t5 k$ o. @$ ]};
" C2 U2 r; T$ \( A+ i! V
" [, c8 s. b* ~5 ~* P! a. @; bstatic struct platform_device da850_evm_tl_leds_device = {
# ~ C9 U% |: [8 U2 X .name = "leds-gpio",% {: ?) O: o& ^- n# W- h! r8 t0 Z
.id = 1,
( p3 Y& I! y; T6 B. t0 r .dev = {9 T) v' i/ J' c# i( B
.platform_data = &da850_evm_tl_leds_pdata,
9 r- d3 k+ K9 F2 Y& V .release = led_dev_release,
+ [) `) o" u* Z+ s& p# A F }
( C) m; F6 ~0 N};
' ?; [; {5 K9 {9 w0 W2 ]( ^6 V' H! ~" O! ^- f
static int __init led_platform_init(void)6 m9 T" t/ o2 s
{
) t& j- t" c4 P4 a" }3 u6 u int ret;. b: r$ m( P5 c. [
#if 0
- Y, d( h0 `* S: h/ o, _ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
6 K1 L: k# C) C" M* U7 N if (ret)8 \+ r( R5 F! B0 r( |) ?
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 T! r6 ]* y- ~1 V5 x9 [" g4 G "%d\n", ret); S. }! n7 @' |: t
#endif- G u; F G7 b# w* {' L0 E5 n3 m
ret = platform_device_register(&da850_evm_tl_leds_device);0 b7 G* l# F5 e- G0 T5 {% u3 |
if (ret)8 E5 \( J% k3 ^* {* A; F
pr_warning("Could not register som GPIO expander LEDS");* o/ a+ X8 m2 N8 X' f
else+ S3 p3 w7 |5 C; F3 i$ s) r6 r% R
printk(KERN_INFO "LED register sucessful!\n");. t; E3 Z9 N X
7 Y( p Q) e& r2 n
return ret;
' v7 [& X# x( y5 L' k4 [0 ?8 u3 n}- b9 {+ C! [) h2 C
% u0 h( B( f2 q) B. \2 p$ f+ ^static void __exit led_platform_exit(void)$ R7 f: i3 q' m4 x8 w( Q4 G: C
{6 u. y5 S7 u; \- U% i% R
platform_device_unregister(&da850_evm_tl_leds_device);. P8 H: I8 G. S; R/ s
( e) ]0 g9 G$ d% S7 n" M printk(KERN_INFO "LED unregister!\n");
' \) g/ i K; t9 j}
3 N1 T" N, S8 O6 i6 D% ~( `5 Z% \) d% u; Q5 t
module_init(led_platform_init);- g3 s, y. O% w; @2 X+ O
module_exit(led_platform_exit);
l& D5 \5 b2 L/ D. [, M: ~0 R+ g9 M( h& \, e' H0 Y
MODULE_DESCRIPTION("Led platform driver");
6 T' y- L7 }2 XMODULE_AUTHOR("Tronlong");1 o. L2 t2 R1 x2 g
MODULE_LICENSE("GPL");
: w& ]2 w4 S/ p }) v6 x% u0 q3 H3 u
|
|