|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 T7 X4 C2 g" w' e#include <linux/init.h>- D0 M( P# r. ?; K- \# _& N
#include <linux/module.h># N& c8 e* q6 E/ u/ m
#include <linux/kernel.h>- w ~3 ^* q: u8 l: j+ w( @
#include <linux/types.h>
8 ?9 P7 p8 H# H l# L4 R#include <linux/gpio.h>4 K* q7 j" l8 {. h& j# [" g1 a9 g
#include <linux/leds.h>/ @& s0 @, x+ j# Q
#include <linux/platform_device.h>
' U1 I- ~2 w R% ]7 E7 ?, g8 ~, b0 m1 o* o+ ?3 P1 }
#include <asm/mach-types.h>) I7 c; l, ?8 ]" j+ m. K7 @) V
#include <asm/mach/arch.h>
' ^& c4 q2 n% [$ \' C#include <mach/da8xx.h>. Z2 V! X/ |4 S+ |! M
#include <mach/mux.h>9 l! i$ A" i5 c, D+ G q
- _7 s7 y# ?( X# ?8 q; Z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
3 Y" Y9 C6 n$ D#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 E9 h% |! f$ A" H! H7 [- K, ~6 C#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 r6 P# B4 ?. z! t$ H; n
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 S8 i3 i! w7 K1 E8 `
. K5 j4 I0 X, \ r5 c. [/* assign the tl som board LED-GPIOs*/
" L' j8 ?) p+ r- Z! rstatic const short da850_evm_tl_user_led_pins[] = {; K ?4 z0 U! q8 G
/* These pins are definition at <mach/mux.h> file */
7 ^5 s* M+ d, x7 y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- D% H! C7 N; E7 i: @
-1
! y6 E) a4 P6 Y* ]# ?% T: x};. ^, R. o3 x$ W4 p1 r3 D" s
, u2 E; b- T( k9 [' Y
static struct gpio_led da850_evm_tl_leds[] = {
0 x3 m$ |$ |5 f1 a {
9 z) T, T% U. q6 Q# ] I3 l6 \ .active_low = 0,
1 G4 r3 Q# Q- a6 X .gpio = DA850_USER_LED0,* w. T( F& P* p. `; N# }% |% |, }! ~
.name = "user_led0",
% X9 O1 f) s( b* z .default_trigger = "default-on",0 O& g) s* r3 s& u a0 G. Q
},
3 b) \6 I$ f" j2 Q K. P {6 k% _# L, v3 Y9 Y$ K" D- m
.active_low = 0,$ m1 J$ ]7 T H4 x6 B+ l& a. L0 o
.gpio = DA850_USER_LED1,$ R4 b# L& e3 _* |
.name = "user_led1",2 G2 \: E4 E: N. ]( v/ `/ F# W3 y
.default_trigger = "default-on",
* D6 B1 c9 @# S+ O$ q2 I8 c },
1 t. _. v y' C: U) G* V: x" Q+ H {) d8 w4 M( q: ^" p! O8 r
.active_low = 0,, Y, {2 e1 {1 I* }, r
.gpio = DA850_USER_LED2,
) k% N, Q$ ~: O+ z; {! ? .name = "user_led2",' y e9 c3 W4 e7 }
.default_trigger = "default-on",3 w! Q; z% u. g
},
, r) X1 f8 Q" E( m! e0 d% M {. Z# n W" h& M5 z5 i* z
.active_low = 0,! l. N2 {& [, J
.gpio = DA850_USER_LED3,
e+ v+ z& I7 Q .name = "user_led3",; D. W! ~# b* \( \8 j9 h8 o) V$ ~
.default_trigger = "default-on",9 G l" p" h2 z8 L4 z
},& e& s9 O& W: r* h
};3 R+ P' E ~0 S$ D! M
6 \; V# | ^9 L! Y, {$ {; V
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% ~$ c" h8 R' U1 {8 ^+ t: z
.leds = da850_evm_tl_leds,
% P; `+ ?8 X- X1 v9 B$ S/ R$ Z" j .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# D0 ?0 f A. k4 ?3 Y8 k7 ~5 d};
8 @& ]" R! {" {, J& T
- U* x8 `. `$ |, e. Gstatic void led_dev_release(struct device *dev)
- m/ D5 i1 [- i, X, c- b T{) ^3 i4 F9 r7 w4 M/ M' e8 d; y
};
! l7 h3 }% d r/ \$ X% {8 N
' d8 P+ a/ G. Y N& Wstatic struct platform_device da850_evm_tl_leds_device = {; U( n4 p) f; v* c
.name = "leds-gpio",4 S- Q+ o3 i) U7 f
.id = 1,
( V! W9 N$ l0 c" A" P( L0 S. P .dev = {
- I3 N& W# e+ h1 P" d .platform_data = &da850_evm_tl_leds_pdata,
1 h8 _2 G- r; U$ T# N7 u( w+ @ .release = led_dev_release,( G4 K. X0 u4 Q9 I! e
}
( M& f8 z) \0 B* W# Y};. f t% u6 C6 A* X9 j- o
$ S, \( w. [! h# ~. d# u* Q) Hstatic int __init led_platform_init(void)
- ?* B2 ~) i9 R6 c [/ E: t) F{: N, |! R& a, L
int ret;1 U7 F) u$ ~# {+ m! G
#if 0) b" W, E7 |' y! F9 D
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% o6 A1 i0 c# u; O
if (ret)
, e- }# P/ S5 Z; d5 N pr_warning("da850_evm_tl_leds_init : User LED mux failed :": a8 W' p& Z! r5 j* [- R6 u
"%d\n", ret);3 G4 ]- ~! ]; C* Y) m5 u; I
#endif- d- x$ G6 |3 k+ g+ B
ret = platform_device_register(&da850_evm_tl_leds_device);
; E1 E. `4 `' J5 A' B8 C7 B if (ret)
3 T2 c1 R2 X- ~6 v5 n+ A pr_warning("Could not register som GPIO expander LEDS");
2 `3 O" {$ D! } else
$ t' \+ `5 c0 X6 a0 A printk(KERN_INFO "LED register sucessful!\n");
7 s; {+ p. D8 u( r' S: y
8 k1 \; V. z5 q( D% k. N3 ^ return ret;
' B7 {% t$ e# X( D3 j# f}& c; t# P2 S+ U1 {, b: j
$ {+ J1 h/ o9 l) X& ?) Dstatic void __exit led_platform_exit(void)
9 v* [8 U+ m: e) s6 \{
: s6 ?8 W, x1 i/ Y6 X& c- r2 ~1 [ platform_device_unregister(&da850_evm_tl_leds_device);
, H% }: m/ S( p% o: T
( h% V9 |8 c! Y1 ?; N printk(KERN_INFO "LED unregister!\n");
6 ~6 {5 w% X* f$ @$ P}
' m7 }% ~* a/ o! j/ ]8 c
8 F- J) E; x, f0 O! q+ H* L8 D$ k& zmodule_init(led_platform_init);
# l3 z$ X6 j. N+ o. `5 `module_exit(led_platform_exit);
4 z0 @' u9 l9 {
[: g4 C$ t% NMODULE_DESCRIPTION("Led platform driver");
( A% m" D# w$ [ q5 I6 wMODULE_AUTHOR("Tronlong");5 S* D* U$ ]' |8 z" a
MODULE_LICENSE("GPL");, I1 t$ K3 B4 Q" J) H4 @3 ^7 I" c6 Q
- l1 H" O: R, ?! c0 p, [
|
|