|
求大神给下面的程序做注解,请稍详细些,谢谢。8 O' Z/ K: ?6 K# Y+ S
#include <linux/init.h>, V m/ O8 L% w7 W" V# ~6 s
#include <linux/module.h>) d8 ~1 ^5 c2 p: E. q" l5 a
#include <linux/kernel.h>" d W; L& b" ^0 u* |
#include <linux/types.h>
4 v& d+ t# W8 x* W( f1 X' r#include <linux/gpio.h>
& I# J4 `& n) l# P#include <linux/leds.h>
) I! k' b- [% _5 ^3 a* {" @* ?1 I#include <linux/platform_device.h>
5 I- ]! [" F! q
# u4 y; ]+ l) v5 m, g#include <asm/mach-types.h>
. @& {% {$ A. r* I1 y3 N4 N1 ]#include <asm/mach/arch.h>
4 v* y3 b3 u* ]. q- K" D$ O9 \, M6 }#include <mach/da8xx.h># c2 l8 T7 V6 n! W C
#include <mach/mux.h>) O- H( y; U6 J, K3 v- q
3 E; s, ?* a7 k0 l) Q r
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 m8 d" N, ]/ [& }) X7 _2 }
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 a& y2 G* z/ ^ q' d* L# T: w#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), z0 k; z9 G7 l# u+ S
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) J! M5 g2 {6 b+ U8 T
* o3 h, P+ S* p4 H/* assign the tl som board LED-GPIOs*/
- T p9 s7 |3 P$ C7 Ystatic const short da850_evm_tl_user_led_pins[] = {. t# ^$ d- z- h1 K
/* These pins are definition at <mach/mux.h> file */3 Q, Q' a) Q; X" q2 V- W4 |
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. L/ g5 R0 ^9 o3 `% c7 x: p
-1, W" h0 V2 e+ I6 T
};
4 P. h- D& \0 h% M0 t
0 k2 b0 \% C& M9 O% i9 F4 qstatic struct gpio_led da850_evm_tl_leds[] = {0 i6 y" C9 X+ ?2 L2 W
{
3 V7 V4 |1 c0 A: N8 H .active_low = 0,
) \4 o% J" |# s .gpio = DA850_USER_LED0,* b5 \9 ]8 t. ~) j4 O
.name = "user_led0",6 `2 U$ u. J( N7 Y( `5 E. i9 r* V
.default_trigger = "default-on",
( W/ r5 P5 _4 s1 y2 x* @9 h },9 i6 F3 O0 L* z$ ^0 C
{
2 D1 A* o9 W7 r* X .active_low = 0,
6 F" F A' h1 N5 \: t. I .gpio = DA850_USER_LED1,; ^. r' W+ Q$ C# q/ d6 ~
.name = "user_led1",
* P ^! f6 w( Z' P6 k: _$ S .default_trigger = "default-on",
) M, j/ {$ n9 H; ]: X },2 Y: b5 h% ]$ ?. {4 \ _; I
{
1 z G0 c5 O4 ]4 @/ L( h3 j3 r" J .active_low = 0," f5 Z+ i1 E7 v$ h2 j; |- W! A1 m. e
.gpio = DA850_USER_LED2,
' {9 b) n# O5 D .name = "user_led2",
" L( A3 ^0 {. r, z .default_trigger = "default-on", l6 i2 ?0 X& I$ s3 ~# V3 y6 x
},
% r# R: _6 A7 k9 i; d, F7 L3 ~/ @/ j {: F* S( p' E* i/ u/ `2 L
.active_low = 0,
- Y- F1 T7 Q6 a .gpio = DA850_USER_LED3,
3 P, E* a. d4 J, L9 Q# ~ .name = "user_led3",* o; p9 ?- I/ I7 r5 t% c4 l; O( o
.default_trigger = "default-on",& M; Z/ X9 S4 H3 p( A; S H
}, n& P, g) }1 w
};
' d% M8 Z( `) s1 B0 k5 I/ e( w7 q; T7 b5 R+ _6 G6 E
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; D, }, l/ a: c+ k3 h9 B" o& O
.leds = da850_evm_tl_leds,: Q s+ b# r, L k8 e& h
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, C" ^; O( e+ ?( R5 _) E};
, n2 U9 \- y. h3 d5 t! M
" N' x$ ?* {0 c/ Qstatic void led_dev_release(struct device *dev)
" S" V2 { Y' l" y{6 Q" C" Y, G: P$ r( `
};
# \. ~/ y/ c! |( D- z$ b- d% C7 X4 B
static struct platform_device da850_evm_tl_leds_device = {% F! n: A' H. ]0 k
.name = "leds-gpio",
- p# h/ c& v: M$ l5 R# J2 V1 O: ], @/ } .id = 1,3 Q; I. v: [, ? }+ V
.dev = {
+ D' B! q1 H( ^- c& }9 f! k" C .platform_data = &da850_evm_tl_leds_pdata,0 C/ ~5 n/ n* f. r5 D
.release = led_dev_release,+ R' G' m% I2 e: I F8 _ b
}
+ P1 t; D) s5 |) U: N' b+ R. ~};: Q2 j4 {: Q5 j+ r/ L5 ]9 B
s7 h0 y' M, j' R/ K
static int __init led_platform_init(void)
1 R: l4 b: @1 `2 r8 m{
y0 m( \; d. E4 C, ] int ret;
' g8 _3 @% M5 C' h8 a3 z! B#if 0
( N) P, S" T0 g( L; \2 k" o$ v ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% _5 B4 B9 w4 j( @ if (ret)( |0 ~+ T' d+ E+ t+ a
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. }( x* u) S8 K$ |5 }3 T "%d\n", ret);: J5 d3 n- P, g4 r
#endif4 j* Y. E% ~" ]& _/ j$ D1 y6 z
ret = platform_device_register(&da850_evm_tl_leds_device);
) M1 C6 R7 ^" q( x: f$ k, B$ i if (ret)
, L2 e7 O. q4 B$ a% ], i8 c7 s" F pr_warning("Could not register som GPIO expander LEDS");
# m! f2 _8 ]# K else
1 \, ~# |9 `" k. P0 c8 T printk(KERN_INFO "LED register sucessful!\n");
3 W, r* N# D8 A7 ?
) s. s: J, a9 K0 P9 m return ret;
v/ l6 u6 J; U& u' S7 L, N- ?}
8 Q- j# d' i: e* W9 N P1 U) c+ `. M: h5 [
static void __exit led_platform_exit(void)5 R# \2 M9 J5 z7 Y2 P- b
{' }- W! [& @* B' z8 \
platform_device_unregister(&da850_evm_tl_leds_device);' h) {4 B& n& G5 r
/ F! p5 [' @% N printk(KERN_INFO "LED unregister!\n");. o E- R# r# w8 z8 N: p; f: H9 R
}
. f$ ]& y+ X0 D- |2 H) P' C8 A; F6 y1 x* n6 Z
module_init(led_platform_init);5 J& Q) F0 U! ~. d" R" q) D/ f0 q
module_exit(led_platform_exit);
. [7 F' k% ^' s ?2 ?5 n0 z; J0 j. P5 R' K1 s" N! C
MODULE_DESCRIPTION("Led platform driver");
J4 \. Q/ ~1 i0 T; r6 m# f& gMODULE_AUTHOR("Tronlong");
0 v$ c' t1 T. i4 g0 D# E% QMODULE_LICENSE("GPL");6 X, m6 m5 O4 H6 Z( D" P- Q
. ] O4 C1 F8 Z- d, n% A |
|