|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% k8 C* p# @4 Q4 P5 M
#include <linux/init.h>
7 J4 {1 b2 w) e/ b, a: W#include <linux/module.h>
- I/ c( y$ y" t* q& w ?#include <linux/kernel.h>
" N+ X" \/ N/ S* O#include <linux/types.h>" c2 O7 w8 t3 o9 B7 O5 S# ~' o7 c
#include <linux/gpio.h>5 z6 e* F2 {2 z n2 s Q! i
#include <linux/leds.h>
! B7 J c' W; J# }#include <linux/platform_device.h>' C: u) Z! R3 e0 _. @( @. I
2 d- v6 A! K2 p4 P4 T#include <asm/mach-types.h>
$ H' k% Y' Q+ o% i& A#include <asm/mach/arch.h>
" N4 D8 \9 }$ m& Z5 l7 z) [) C#include <mach/da8xx.h>
\. p) F8 Q' {2 f1 n#include <mach/mux.h>$ H5 J2 W+ e/ h* \8 g
8 B+ O! i) P$ |! |
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) u/ Y* s' X3 h6 N+ {2 w# S
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) R! _& B' l5 {* i2 f9 L( k#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ @" E( W5 k. E4 S% {) X' L2 p- W
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) s, J0 L+ F( x9 F; _
: h" a& L+ v3 d6 x O- M Y% D
/* assign the tl som board LED-GPIOs*/
! [- b$ K; J! x" ~; v( Q- Cstatic const short da850_evm_tl_user_led_pins[] = {
6 C/ R2 n `- S1 z& [6 }5 j /* These pins are definition at <mach/mux.h> file *// S3 Q) w1 u# d
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* ^1 j6 w& _0 T" l, I -1! f4 h: [( ^2 f6 \$ q7 q& `+ J
};
2 X) m" T' Q& @! ?3 a% E; x$ C/ p. @. Z. y
static struct gpio_led da850_evm_tl_leds[] = {
- V8 q) W& y0 S" Q) ` {
8 M3 `1 e7 H) |2 ^ .active_low = 0,
8 C& \* o( D% E6 k$ f2 g d4 c" A .gpio = DA850_USER_LED0,
* w7 `9 S0 ~* Z' |) H8 M .name = "user_led0",
5 U/ q4 Y# x# G7 p .default_trigger = "default-on",, i* g* R) b# V& h! J. D/ E! e, p
},( h; ~* ~5 ~' n. t: A( m* [
{
G2 d( s+ o+ f .active_low = 0,
+ i8 q0 D% k- z1 [: X .gpio = DA850_USER_LED1,/ k# @5 G: y& r9 v
.name = "user_led1",
' J$ W" X- Q1 C5 n) c; \3 U .default_trigger = "default-on",9 ^* Q5 Z4 `, G" z& m! h( {0 v
},. h7 h$ E0 L7 X& E- w
{* O4 G" c- s4 u: C5 q8 a4 V
.active_low = 0,9 ^0 N. |& r6 v& l. ?9 Y0 r
.gpio = DA850_USER_LED2,8 p* l& h$ q" o" l
.name = "user_led2",
% h a6 {9 ? H9 ]& O .default_trigger = "default-on",$ N$ ~0 K2 h- f/ q8 U) x: v( o
},
% p" Z3 ]3 {; m7 W/ D+ p+ O3 R9 k {+ j: F& s# C3 z& H$ Q% K
.active_low = 0,9 v, I9 c6 D5 V; T& O6 I5 y
.gpio = DA850_USER_LED3,
2 R4 @* x: o V* `5 B( f1 z .name = "user_led3",( }6 t3 R$ Y) ?" k& a
.default_trigger = "default-on",
0 k' @2 |/ |4 z' p' s },
- O( D2 i" H! e};! I0 N1 P8 k7 _, g& ^
/ H' K5 ^$ D3 n& v8 n- j+ |
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {8 w0 W4 m1 S5 u2 }' W
.leds = da850_evm_tl_leds,
) f7 ~. }* |1 ? .num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ m/ s3 n% g5 W. S! ^/ B
};
* ? N/ b' P0 f0 ?1 Z3 R9 J' X
) M, S; b0 y* z5 Fstatic void led_dev_release(struct device *dev)
- Y8 \' \& \8 w% M6 ?- u; e: L+ p{
" ?& d: x5 Y+ u9 P1 b- b8 x};% G0 W) c0 b7 Z! M( \, f
& z+ |: j7 ~; qstatic struct platform_device da850_evm_tl_leds_device = {/ z0 P4 ^+ K7 ~2 S* g2 v0 [& s" o
.name = "leds-gpio",- }* ~' N, y q
.id = 1,) e, S+ T& S5 V/ t0 x0 w& y
.dev = {
) y2 o, [0 B$ n& Z+ z .platform_data = &da850_evm_tl_leds_pdata,: \, W4 [* D2 u9 y
.release = led_dev_release,
' u- o [; k. L0 q$ ]. b }
4 u& I& T( v2 u& `7 e M};
3 K" K$ i# _: l1 e/ |3 U, c) x+ @! T% |" ~* E/ t
static int __init led_platform_init(void)" |3 n& d) ]; e0 N- _
{
- g. L4 n3 m [2 X4 n; `) | int ret;3 O7 E9 X; B* j+ ]
#if 0. X" p; M1 t7 m) P6 c
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( e+ B/ M: n8 F# B9 C9 M if (ret)! A% i& F0 N. ~; ~2 q6 G+ @. f
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 |+ }; F! ^1 o" C, V "%d\n", ret);/ [7 D# K$ l$ e$ k
#endif
" J1 N2 P* X5 z' v, d ret = platform_device_register(&da850_evm_tl_leds_device);1 u3 G: y. h( o' ?& ^+ m3 J/ @
if (ret)
2 y/ c" Z- B7 `8 v pr_warning("Could not register som GPIO expander LEDS");) E+ I$ L |4 P
else1 y5 Y. U* N& x$ G& l# G+ u: J3 d" O! T
printk(KERN_INFO "LED register sucessful!\n");
* t2 a% x: r' x1 W" i6 @& i
- E- r3 o+ m1 o# w: B/ H6 v1 F5 G4 u/ V return ret;1 t2 T1 _% R1 h" R3 }
}
5 e$ w8 w/ r/ n4 q
/ T- G& m* k/ u4 O! @static void __exit led_platform_exit(void)
( q/ B8 l8 k& s{3 d- T9 o1 k+ Z- D9 r6 }: s) B
platform_device_unregister(&da850_evm_tl_leds_device);6 `! P' p* U- m2 D
' C2 H. E" ~0 c& R* B
printk(KERN_INFO "LED unregister!\n");$ v% d! v p! S& h0 O
}' T0 T* E. Q9 U+ W; Z7 p( y
/ Z4 P4 m( m% P1 o
module_init(led_platform_init);4 u: a8 Z) X. d+ Y- X
module_exit(led_platform_exit);% n4 q2 B+ A) [- s# l
5 t$ ^3 A) I% r: t% S; P; FMODULE_DESCRIPTION("Led platform driver");
% q0 e5 @) F5 f1 _$ Q( {. U0 yMODULE_AUTHOR("Tronlong");: g$ S1 p! N' V+ c1 k) D: S
MODULE_LICENSE("GPL");
d7 R, D8 |+ R: }" O
# B6 g$ e( G8 N. M' i |
|