|
求大神给下面的程序做注解,请稍详细些,谢谢。' k/ d* G$ _' T/ t# U
#include <linux/init.h>
( q- y1 A8 q" G9 n( H& @3 f#include <linux/module.h>7 @. P! r; h$ [0 U, z9 l
#include <linux/kernel.h>
5 ]- [0 E# Q9 x" p( r#include <linux/types.h>& L. C- f& h6 g1 p7 Z, l
#include <linux/gpio.h>
! K5 t. E* D. ?; q+ H3 g O6 R9 }#include <linux/leds.h>- t8 s) y$ K/ H* q5 g7 x: h
#include <linux/platform_device.h>" q. Y6 a1 h2 H' s& Y; U( L
- P2 P' M) Z3 ]
#include <asm/mach-types.h>- r2 a0 m7 S2 A" S1 r! `3 X/ W
#include <asm/mach/arch.h>$ F. b- O/ V4 e* c4 B
#include <mach/da8xx.h>
3 K1 `; Q3 [' \: L& x#include <mach/mux.h>
/ J2 Y) l: K9 j Z. e# L, H# k4 z9 D% u; A& a
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
* [6 p/ A- G7 j#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% `5 f) j) G: P$ X
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) X9 x# j. d% `: ]$ L7 f#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 S) U$ a" Q2 m @! Q5 U; A# R* [. ^4 g( z
/* assign the tl som board LED-GPIOs*/2 ?# p( e$ i. U9 u3 X, K9 S
static const short da850_evm_tl_user_led_pins[] = {
9 o' V( H. G, \; c4 H$ W% e /* These pins are definition at <mach/mux.h> file */2 R0 `/ ^# C+ p0 p
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) D: `2 g9 q+ t! R# M -1
3 N8 K5 w- e8 W( ^};
~; L5 I" [4 S0 z( C7 @/ f0 ?" z1 W$ m K, X
static struct gpio_led da850_evm_tl_leds[] = {
B7 M- c/ ?$ j% e0 v2 k% h {2 Z' W; K4 `6 A& B
.active_low = 0,
6 e8 c0 h+ Q3 H' ?" s .gpio = DA850_USER_LED0,1 J. i& f& @. A% ^4 b0 B
.name = "user_led0",
9 T6 R2 X' d( z; w$ i .default_trigger = "default-on",
0 T5 K# P' R9 u% T5 T },+ E- I) w; J! ^+ i% c8 G
{, F6 j( N: N' C: m3 m
.active_low = 0,) Q+ H1 k7 v1 v* I
.gpio = DA850_USER_LED1,
* x5 M8 V, D# v8 m' S% m0 T" u .name = "user_led1",
4 ^6 Q8 M' f$ v# g$ w .default_trigger = "default-on",
5 X$ W T* y( O7 |: S! O },% n8 Q: O; N! a* E; Q! X
{
& a9 G2 ^4 R: s7 |8 n .active_low = 0,& h. ^% O. s$ n" C: b
.gpio = DA850_USER_LED2,
( }( N F$ a3 F1 T+ ^ .name = "user_led2",
1 H" N j; o7 \% ^! ?1 g& p .default_trigger = "default-on",
& ^* R, r4 |! | D1 y( R( F },
* R5 I7 j3 e0 x6 G7 F& e {/ e# m4 A6 z3 M6 _( B$ @/ a
.active_low = 0,
9 j5 ?, C) P2 M7 R ~ .gpio = DA850_USER_LED3,) b8 f5 r8 q" P" ?+ y! Q8 ?
.name = "user_led3",9 T- K$ m) a4 C- \: E
.default_trigger = "default-on",
6 c0 T% G9 }7 L& ] },4 I: D. U0 Z( n/ y6 a7 i! e5 Z/ K( k7 P
};
& @1 z7 c0 Y4 l& m, ~: C( S* Q: h
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% ?& h# h) B, X0 Q$ v .leds = da850_evm_tl_leds,. ^/ R; H6 G# |5 r+ D: H2 I
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, F) x; l& D7 N/ S" P& v};
2 j$ m2 |, S* R" S
8 v0 s5 q6 h7 g+ r3 }static void led_dev_release(struct device *dev)! o5 y( t+ t( L+ }7 Y) I7 T2 R' M
{9 P8 W/ V! C+ s1 H! c
};- Z1 n i y$ r. d6 [
/ i% u6 j4 i' i5 u! K e6 ?4 R8 fstatic struct platform_device da850_evm_tl_leds_device = {
' j- m% a! z$ t2 Z) J' S( h* c# s/ V .name = "leds-gpio",) j* G; g6 k- B! s' i5 p: N
.id = 1,
+ r) P6 s3 P. w/ J .dev = {% J7 \6 I, K9 O' k* E& u0 o0 H: s
.platform_data = &da850_evm_tl_leds_pdata,8 p2 O9 g+ S% J8 E. _
.release = led_dev_release,) O$ k0 [+ h* m- q7 R! x
}
5 b3 i+ E$ u) b% C& k};3 c3 H o3 P6 J4 K
7 e* m# l- @( q0 l. ~! _) w& Istatic int __init led_platform_init(void)
6 j( k7 r2 @& Y' G% A$ [2 m{
A8 Q) p7 A' ^( y% p' p8 | int ret;
# C8 y& \, {& y2 }% F% b#if 0
! T+ K: ~& a4 l3 t# M ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);0 r" X R6 h0 D) @# Q6 m. E
if (ret)4 z! M4 ]& r, @4 ~ X v+ W$ Y
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 \# U6 c- Y7 ]: e! v
"%d\n", ret);% Q( o, z0 K" [ V' v
#endif
2 U& A4 P3 t2 p j' N; \6 v) q ret = platform_device_register(&da850_evm_tl_leds_device);
, z! o ]* `/ H6 @1 y if (ret)
# \5 s) T) e! {" T! p8 ^7 H0 | pr_warning("Could not register som GPIO expander LEDS");8 V( A' P- m+ J* l" _* f
else# q( V K& a9 ?' H& O# j
printk(KERN_INFO "LED register sucessful!\n");8 l1 N' H9 f7 S+ }) V6 y
3 X9 |& V! M9 u5 f
return ret;4 A! K* H/ i+ ~% \8 t3 i7 t% ]
}
1 u/ {9 Z' I6 q4 U8 ?) m7 \. \% Q; T' d9 r! r; ]
static void __exit led_platform_exit(void)/ }" R+ O9 J5 H/ D/ ~
{
" X, S# I% y; U, q% l! q platform_device_unregister(&da850_evm_tl_leds_device);
: u! n# _. B9 C# H/ ]# z4 o6 |/ ~ `
printk(KERN_INFO "LED unregister!\n");* H/ _8 Y0 A J; l% M% d
}/ b9 D8 _ r9 I3 g# ]# ~
0 m* c. H5 ?8 P& J/ ]1 F+ p" tmodule_init(led_platform_init);
; d) |9 `: D/ b* H* o: q4 v5 bmodule_exit(led_platform_exit);
, m* j1 _. Y/ T# h
7 J/ w, F, K! ?$ Q" w/ S1 [+ BMODULE_DESCRIPTION("Led platform driver");
# y4 p& T* }& D9 n/ G. yMODULE_AUTHOR("Tronlong");
4 A1 s+ h( a* g" a; a JMODULE_LICENSE("GPL");
4 ]( y H/ J" K/ x2 K2 Z5 k @# O% J+ n$ m- P
|
|