|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' x# W% y6 t# p2 m# K+ |
#include <linux/init.h>" A: ~" v# d, U5 z9 y% p+ }
#include <linux/module.h>
+ z: r; ` R( |, G q#include <linux/kernel.h>4 ]% i# O6 A3 }7 H1 L7 o% p
#include <linux/types.h>
5 @$ N5 S7 c6 F#include <linux/gpio.h>
; N6 u7 |9 ?$ K; E4 U, H#include <linux/leds.h>
& F$ Y2 u- k# ]% l2 X2 o#include <linux/platform_device.h>& E- \1 M2 E) B* H
+ H" C n2 s$ D1 h: E {#include <asm/mach-types.h>9 I$ b: A, F: m* ]7 \- J0 q! z
#include <asm/mach/arch.h>
. U1 h/ k* x3 s: c. G#include <mach/da8xx.h>
& C" L/ c+ K+ l) w- n#include <mach/mux.h>0 p& w( z Z( l( Y6 r
4 w: K' B/ V2 e- U/ O$ i$ v0 e6 \7 F
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* S* W8 k! c; h Q, Z
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) q2 L% _( M( v6 {: z
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% [8 h6 n5 d' a9 _#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ i B, f( O0 U7 O, q2 g' L' {; L/ _- C n5 f4 e( W7 r; L" K
/* assign the tl som board LED-GPIOs*/
# S* h* K1 S4 z7 w; j: A4 R" `+ @" ?static const short da850_evm_tl_user_led_pins[] = {/ f& u2 j! d; z' C5 `6 _9 Q; e, f
/* These pins are definition at <mach/mux.h> file */. ~* v9 _$ p6 }. w2 \
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 f h8 @3 a* R _8 r3 D' t: u
-14 e) S3 v# l2 d* P
};7 C1 f4 p5 [9 h
7 m; s# \4 F. @static struct gpio_led da850_evm_tl_leds[] = {/ ^9 e3 E0 B' X; d6 I
{* ?1 F. O0 G' f4 [9 T. _
.active_low = 0,+ w x7 o! { a. K' A& }2 y
.gpio = DA850_USER_LED0,& k% }8 _0 x& `" _! r3 a
.name = "user_led0",8 V7 d- L& W$ y8 } h, _3 j
.default_trigger = "default-on",
: x- G; Y" n, D! D# ?" b },- G) N8 F' P& J7 e4 Q2 G. Q
{. n) @4 O" q4 G5 I) @4 v: R
.active_low = 0,* Y. ^' T1 D6 [% }- ?
.gpio = DA850_USER_LED1,
5 A5 @# [9 G) l/ _& A) K .name = "user_led1",, S0 k) Q j2 M) K6 B S- O
.default_trigger = "default-on",8 B) g0 A/ T; @0 R& R" s& r, r
},
1 q$ I5 X: z9 o% E/ c, D( V {
$ }; o- g) ~4 W( |: b+ F9 | .active_low = 0,( n8 Y, z% @; k
.gpio = DA850_USER_LED2,
/ e) ]) M+ p4 [" _0 u, V .name = "user_led2",
# W5 K ]+ B6 a1 R' i6 Q0 f- u8 _* l .default_trigger = "default-on",* M6 [. C8 _0 a
},
" g9 H) H2 Y( a/ P& Z! V/ ~# b {* a" i! v6 [; Z( c, |' H- ?
.active_low = 0,+ Z" r1 c7 G6 ?
.gpio = DA850_USER_LED3,
" B9 [- n1 w( o# C$ [. [3 |7 V .name = "user_led3",2 E" U6 M" ]) _! t
.default_trigger = "default-on",
) C/ f* S3 p! }( F- R },
7 p* w1 D8 e4 J9 Q5 k};
9 d+ y! n5 I/ u5 U+ A3 b6 Z6 h+ W; r) ?2 V0 f m" _
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {8 v C; c! H3 x9 s o" B
.leds = da850_evm_tl_leds,
( H: v5 P+ [1 L .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
8 v" A$ J+ r% ^4 d( U J& V};
8 m( s8 E/ _8 B6 w
: D* B7 K0 Z2 l v% Fstatic void led_dev_release(struct device *dev)
% X @' d6 ^6 R/ x! d2 K{; f: A& M4 P; P% Q
};
% u# l! \# _! E) L1 V+ D+ \
% r4 q# {+ j4 U6 Y# G3 h0 c2 xstatic struct platform_device da850_evm_tl_leds_device = {
4 S2 d8 E' I d3 b( D6 m .name = "leds-gpio",
+ W; w2 R! ~ T; D- j- p" U, h .id = 1,
) m1 r( M6 g0 Z' Y8 ` .dev = {- _# c" d2 N( C2 g7 h6 Z& m" P. d
.platform_data = &da850_evm_tl_leds_pdata,& I) x0 s0 M5 |) R' |
.release = led_dev_release,5 G# D2 s4 D v0 Q1 f; f4 o
}
8 U% y5 g# K+ Q};8 x: u4 L d0 A* [5 X
( @3 }2 Y. C ]' G6 V/ `; Wstatic int __init led_platform_init(void)' e: \2 c9 h; @' D* s1 _, J. }
{# c1 t& f0 m7 c Q
int ret;7 t9 Q9 C ]1 I7 I1 b0 ?/ S
#if 08 R7 ]$ F! ]( u
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: N0 R% V! X2 S, B0 `. ^ if (ret)
( `# ~* b4 l+ q3 I pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ |% t2 ]7 r' D+ s5 U0 u. q6 b d6 s1 \) p
"%d\n", ret);
5 i; O" W3 l! P% S#endif+ r8 A; Q3 Z; H+ {2 Q7 D
ret = platform_device_register(&da850_evm_tl_leds_device);7 p' ~# L# Y6 \+ H/ o8 }
if (ret)
5 f8 j% Y# f; s: _; e pr_warning("Could not register som GPIO expander LEDS");
3 S6 Z( l) _0 r/ Z9 B/ \; q* h else2 [* h" Q4 u& P' r# k) R7 J2 j
printk(KERN_INFO "LED register sucessful!\n");
B/ R0 ~+ O; Y. W6 n! O5 G! h2 o# E' F Q: o
return ret;
6 H8 m( q6 X1 f- X}
0 x+ L1 p5 B$ P: |7 r; A) f0 G
* W' P% F. ~& e1 }static void __exit led_platform_exit(void) W' X' `# Q6 d8 T5 @- S
{, C5 I, e- R6 D
platform_device_unregister(&da850_evm_tl_leds_device);: |' D: ~0 a3 }1 q
0 c# O" k. j4 k- w printk(KERN_INFO "LED unregister!\n");
# g9 [( ^/ w3 Z Y# [! ]& B3 n- X}
! A6 C* {7 o+ u; x. `4 _' g( ^* d* M0 [& K% X
module_init(led_platform_init);
( L# w7 E, N) v# z. y4 E; Umodule_exit(led_platform_exit);) H( l! `$ z8 d' a
0 v: R1 t0 _/ y. q, [/ ^MODULE_DESCRIPTION("Led platform driver");' H6 a* n, K% S4 _
MODULE_AUTHOR("Tronlong"); X2 K/ C: N5 s |
MODULE_LICENSE("GPL");' b, W$ R/ ?) x
! w5 Y" ^& W, k |
|