|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 ^" Z/ z) H1 A2 I
#include <linux/init.h>$ P; _; o' I/ u5 _% e2 l
#include <linux/module.h>
0 a/ S- y! c. o5 ]! V4 `#include <linux/kernel.h>. P4 _/ [) W4 L U) }) A3 A
#include <linux/types.h>7 b9 X8 r; q. i- p: g3 U
#include <linux/gpio.h>* Z: l {, t/ |. E- a: N1 C
#include <linux/leds.h>4 b/ q2 O6 ~ y# }; l8 p2 t( Z
#include <linux/platform_device.h>
\$ ^, y# w# z1 Z$ H) @' ]8 z, s: k0 B
#include <asm/mach-types.h>+ C0 w0 P6 V7 o5 o3 A C) `
#include <asm/mach/arch.h>9 f m2 P% [/ L
#include <mach/da8xx.h>& p& @: e8 h# Y/ c+ V9 [2 m+ ^5 D
#include <mach/mux.h>
* Y0 t6 A' [$ O. z3 V4 G5 S4 x0 m- a. t" P) I; r7 u2 T7 F, V$ C
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& ], {. i8 x; C#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
7 `6 s) b5 ~7 R+ {#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); I% D0 k: F0 s9 ~( Z7 S% Z. |
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ M' Q' S, b f+ x- _* K E. |8 t
# n) m0 M! j4 M8 _+ z% Z4 g* G- l
/* assign the tl som board LED-GPIOs*/
( Q& q. o2 X# p& [0 Ustatic const short da850_evm_tl_user_led_pins[] = {4 i/ k- b& Q8 M
/* These pins are definition at <mach/mux.h> file */
- H, F2 }, |2 p K( j, F DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
% W7 ? ~4 Y0 P: l( V5 ?+ Z -1
( u4 {4 P3 p8 k4 T4 o};8 Y5 q" V* Y7 g6 S! G! Y- d9 u* X
C" @+ z4 G+ ostatic struct gpio_led da850_evm_tl_leds[] = {
. z: Z) M2 z5 {# S: Z: g) b {2 G) r: g" ^ } ]
.active_low = 0,: `8 E3 i3 [. Q2 o
.gpio = DA850_USER_LED0,5 O" u) E5 r0 c
.name = "user_led0",/ b( Z% E: L# Q) \0 `
.default_trigger = "default-on",3 C* R* J1 Y6 z* [+ M" i+ z/ H7 `% R
},
( k6 Y7 k; X5 q5 k5 r N2 | {( `$ C" m/ [$ h! T
.active_low = 0,5 Z4 _: T4 @/ A5 H8 x
.gpio = DA850_USER_LED1,
. F# u" E$ _# l* \4 X1 Y* l .name = "user_led1",2 E c: \" s2 l
.default_trigger = "default-on",
& [) J# u% [7 c( m$ e0 Z0 D5 O },
, y. W; f/ J+ N& n6 H { S- r- O% O' I
.active_low = 0,
8 R* R7 K: B5 d+ _1 o X; z% H- A4 s .gpio = DA850_USER_LED2,
9 \+ G- a% P0 ?) | .name = "user_led2",
0 R4 Q+ D+ u9 w; ^; D) p1 K .default_trigger = "default-on",
, w. x1 u; M* m, |. | },
7 f+ d# |* Q6 B! q {! X0 }+ {+ t; j- R
.active_low = 0,
; H* f/ |$ ^& y3 p1 W/ T .gpio = DA850_USER_LED3,, ~2 a7 s* `) I- @
.name = "user_led3",
7 h; H( E% e$ r0 v4 ~ .default_trigger = "default-on",
6 ^+ n8 M; V( ]1 ^7 |3 B- [) C },
+ H, }7 r5 @$ S; z};+ \/ b5 F# \. @* m. G% H" s9 b1 V
% V' p4 C/ v- q& u; _
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
) {1 x7 n w; [& V .leds = da850_evm_tl_leds,
# F( {0 ?3 _; \& Y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),8 R" `! E9 J/ M- Q, T
};
: ]( Y* X( M. c9 a* w& s: q+ j& _3 P, p. i
static void led_dev_release(struct device *dev)9 O/ m" I2 _/ j. w" z
{/ S3 b' Q) D9 V2 K2 C
};
3 Y; _( k! \6 I8 V3 D. p( d& P; \. Y! H \, @* [7 ? w/ |' Y
static struct platform_device da850_evm_tl_leds_device = {. o* U, `( h! N, W. p6 C* d
.name = "leds-gpio",
* ^' M! U0 b2 k" Q: E .id = 1,* h$ Y8 P, T- B
.dev = {* r- V; E" z' Q8 }+ b% g
.platform_data = &da850_evm_tl_leds_pdata,# |! v7 s# X. g$ }: C6 _; o. X+ A
.release = led_dev_release,8 Z T# F) u+ i {
}
9 x P& O5 Z2 W8 I6 O H! e};" N) C0 }; a6 e7 z7 c
# q% R2 ]- z4 Z, V3 T4 W5 W5 y9 {- Estatic int __init led_platform_init(void)
8 H% L( f0 Z C0 q$ e2 k) @1 p{, n2 X* ^ e+ [, I2 ^
int ret;- O5 H$ o$ X) x9 r7 Z
#if 0. k% c; Q+ @: e
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% P, l( X; x5 k
if (ret)
* S7 y( H# D/ c { pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
8 `1 L" j( w7 {. N1 l0 F8 c "%d\n", ret);
+ k, s6 ^% @9 {#endif
5 H3 X2 t7 s9 k9 Y- L Q ret = platform_device_register(&da850_evm_tl_leds_device);3 P7 b8 t8 b' q7 y6 ]: Y
if (ret)" X8 i. H: g; K4 y7 `& F# Z: `
pr_warning("Could not register som GPIO expander LEDS");
# X% Y% \5 L% `! P* o$ e/ N& I else
5 ?' k9 ~* b" C. x6 s% ~ C, a printk(KERN_INFO "LED register sucessful!\n");
* r+ t9 L, t; z2 @- S: ^! ]
7 K+ d# S$ S% l" D1 I0 h* ]) V return ret;3 y! q: _. v% ~5 c. d% T- T
} [4 d! j6 L6 }; W" s( W R3 z
7 E8 @! b: u$ r- Dstatic void __exit led_platform_exit(void)5 m* `8 C0 ^# ^, r2 T
{0 t+ F7 w6 N! M
platform_device_unregister(&da850_evm_tl_leds_device);* S; o [ y8 H) b3 _/ r
" a$ i) \: R, Y9 u& b printk(KERN_INFO "LED unregister!\n");
! l1 B( q' R4 ]}( T/ [: X7 ~$ ]1 n
& \! c; Y! L7 o6 P2 {' Bmodule_init(led_platform_init);
/ Q$ h4 x/ u5 V4 v2 J5 T5 cmodule_exit(led_platform_exit);
% T+ J) m2 O( r2 O
1 E! S; R5 `1 l8 A/ fMODULE_DESCRIPTION("Led platform driver");
3 J2 ]4 \( ]5 u# M7 i/ e5 eMODULE_AUTHOR("Tronlong");+ k% N; e: O; n2 F* J
MODULE_LICENSE("GPL");
) R" ]( I3 y# |6 M) m2 h( }' U! V' {3 W' f- s# E- C
|
|