|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ d. i8 f- U o" f s
#include <linux/init.h>
, A3 k5 F3 z) r% N#include <linux/module.h>5 {; n! Y) M/ m( r7 @! K
#include <linux/kernel.h>
3 o8 N1 @4 `' n2 S4 u1 c#include <linux/types.h>
- c) Y& U" X9 B# Y4 | I: [! U#include <linux/gpio.h>
3 E) [3 X: m& ^- e0 h3 P# @#include <linux/leds.h>
" T5 e5 H; i8 o- c& W4 R#include <linux/platform_device.h>. C/ A! {7 F' Y: T: {/ P6 B
6 F, Y, n* w# _# J
#include <asm/mach-types.h>
% H% u8 n2 q. k$ o- W#include <asm/mach/arch.h>
2 Y/ p( y& K: K& G#include <mach/da8xx.h>
* J" K$ O2 X# }! u4 S0 l#include <mach/mux.h>" k* Z) T/ ]. [$ P" k- d
~3 Z- Z% Y& J" S: |3 {2 V: D
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 c& N" ~/ m; I8 j) [9 r; E
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: L0 W( e! u6 l/ I1 k( v9 X/ X# |#define DA850_USER_LED2 GPIO_TO_PIN(0, 1). I! T; ], B! L/ H5 i2 t) ?" h% `
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
. L/ w- }( k* @/ @/ F% n
( V0 f2 E& N9 f3 r/* assign the tl som board LED-GPIOs*/
; h6 c* p9 |, l/ V: Tstatic const short da850_evm_tl_user_led_pins[] = {) ^* T8 E7 `" a F- x
/* These pins are definition at <mach/mux.h> file */
J$ c2 i6 \- |; o& Y/ T DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
4 P' w# W6 u2 ]6 r6 ^% X -1
4 V, O# f& ] a9 W, @2 c3 o5 |};
, y! J7 _/ Y7 M1 C4 T8 _( @9 w
* Z# v7 K' o7 d/ Tstatic struct gpio_led da850_evm_tl_leds[] = {
; G7 r+ U& n3 \( F& A# h/ E n {0 q; r; m' S& K" R" t+ ~5 z
.active_low = 0,4 W4 s5 i3 ~7 E4 W; ?, t
.gpio = DA850_USER_LED0,
( X$ U1 W _9 T .name = "user_led0",, L* b) c+ F" g
.default_trigger = "default-on",
( U+ x' D5 s5 a! I# |( o2 S) N },
$ s6 V! {' [ F d9 @4 F {3 D' o7 w2 ?0 J% C2 i, I; h _
.active_low = 0,
& e) x" u1 I" h0 u s- l2 r .gpio = DA850_USER_LED1,+ G3 j% l' U9 t, P
.name = "user_led1",6 g* A3 ?" Q6 g8 N
.default_trigger = "default-on",
) f, u/ k, K. s1 _, q$ h },
! w, o* r% W; v2 g {0 Z. C$ \% I! c
.active_low = 0,
5 m0 Y% |- V" i9 ~4 ~ .gpio = DA850_USER_LED2,
: W# n& S& j% T- q .name = "user_led2",
8 {. \: B2 u" N( ]* q .default_trigger = "default-on",
7 W4 Z8 u2 H7 g* ~+ h: }% J6 k },
1 v& Y4 L( l4 b {
1 Q2 n c' e- u& U* } .active_low = 0,
9 H2 R9 V, T9 Z2 W .gpio = DA850_USER_LED3,' y7 U; c$ M% J1 z M: l
.name = "user_led3",( v# C9 H5 I2 ?9 G6 `
.default_trigger = "default-on",- j: T' r8 k& B/ [# U$ e
},+ N; B0 q M* B8 E+ h
};
?# E8 r$ u1 C5 E9 g2 F6 c# _2 V% J6 _
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& r8 m. m- C5 B6 ^. L6 c5 b! b .leds = da850_evm_tl_leds,* p) h% B4 Y+ @+ _0 U2 o- R4 c
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# Z u4 n9 U0 H0 T};
, X% V6 A* x5 r) \
7 [ @ D1 N! W) e0 tstatic void led_dev_release(struct device *dev)2 ?. l9 m7 M/ A* u: c# w
{
0 e9 E0 u4 o2 ^; T$ l" R: {* {};
; @' F7 {" c0 \0 ?3 L' W/ Y( N- p3 {. ?4 r3 r& Z3 C
static struct platform_device da850_evm_tl_leds_device = {
) N6 x; v5 K5 [ .name = "leds-gpio",5 Q1 b3 ^1 Y! ` j
.id = 1,
# v; H8 M# ]+ C. o% J1 ? .dev = {
* N5 q0 E7 C: P3 E7 h: N" U .platform_data = &da850_evm_tl_leds_pdata,+ _1 L: Z+ h/ L! l
.release = led_dev_release,# X0 J' x" x3 Q- \+ S0 @
}! ?" C3 |# ?4 Y
};: e8 C1 R! l8 ]; B, W3 R5 |
6 ^+ Z5 i, k2 P) Rstatic int __init led_platform_init(void), h: [* }& J6 s+ P
{
: H5 G$ ]2 k) Y int ret;+ |3 h6 _- Q# Q+ D! M
#if 0
+ e7 H, i& X) y& `( Y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; Y' C9 H4 D, z) Z! S
if (ret)
7 w% `) L, F3 L. j6 |( \1 a) h pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 E% u+ D4 B& y7 }! m0 o5 c8 }& t% P; [ "%d\n", ret);
" u' |/ X8 R- @" a L& g. ]+ g) k#endif
" C& Q5 i" d$ ^, m( P6 I: V1 l ret = platform_device_register(&da850_evm_tl_leds_device);
) a( W+ g! ~5 ~4 D' V if (ret)! j& Y2 ]' E+ Z! w: ^* ?; G O
pr_warning("Could not register som GPIO expander LEDS");
+ f. ? y: m8 K) ]: I( ~2 q/ _ else# Z" _7 S( ~* |3 U+ x5 F/ \. Z
printk(KERN_INFO "LED register sucessful!\n");5 R5 z" E/ }$ \0 \6 P( q# W4 Q) t
* x# v! F; ~( p. n3 a* \% Q$ x return ret;
0 E2 x' C6 C+ B}
4 S7 ?) F$ y4 A
4 P, v, a) Z( M+ P e! y1 lstatic void __exit led_platform_exit(void)
+ v9 i- ^7 [% X2 A{3 F. K5 z& n3 ]- k7 @) K
platform_device_unregister(&da850_evm_tl_leds_device);
3 m& V9 N R, |7 P; c4 i: w( L
9 H% H+ _( O' c: l* G) j( ~ printk(KERN_INFO "LED unregister!\n");, K$ P/ n: p$ ]2 j
}
, T9 e% @* f$ v: u! A
. F4 p& l9 ?7 `+ o6 ^: A& {module_init(led_platform_init);+ T. c& V4 @4 ~3 {- G1 ~, [8 ~
module_exit(led_platform_exit);: \5 Y) A- w/ {! w
4 c; f* i6 J$ j! W; x( z r
MODULE_DESCRIPTION("Led platform driver");
, J$ _7 Y B2 }9 M9 [- K* ]' t# @MODULE_AUTHOR("Tronlong");
) B) F! \8 S# F% b! v4 L. xMODULE_LICENSE("GPL");+ S7 x1 e! N8 E
0 r! [0 m$ g) i$ ^% p6 v, M* h |
|