|
|
求大神给下面的程序做注解,请稍详细些,谢谢。$ o& e! S3 p2 Y. Z
#include <linux/init.h>3 J3 S- h1 Q1 j! O1 d6 Y
#include <linux/module.h>9 ]3 x4 ?0 T6 h/ O
#include <linux/kernel.h>
3 z4 S3 V2 ^3 X) W& k% d. Y#include <linux/types.h>
) P) `* q* n E% Z- p, e% E: |# q3 G#include <linux/gpio.h>
/ o* H9 ?2 Y+ o4 r#include <linux/leds.h>/ k0 Y1 x( T, k/ a% v L
#include <linux/platform_device.h>
. i9 P3 p( V1 B& |+ a) U# \* B$ T" F2 b3 W: k+ i
#include <asm/mach-types.h>
) Q% f6 A5 S8 |, r" u: a8 b* q+ ]$ e#include <asm/mach/arch.h>
8 n& N6 H5 J; P" v. I#include <mach/da8xx.h>. y$ b: t6 T5 G" K- B' i- _4 D
#include <mach/mux.h> t; O0 C& I E. v, T( L
3 F% ]8 H6 r; h D6 z' V3 R#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 w9 d: ~2 ^3 y4 m; |$ ?" Y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 p5 X) u/ V$ ?: Z; [- C#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 j7 O$ P* Q$ M2 A' i5 H* |* g) K
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ t/ P7 o. `. `
, a* i! i9 i+ x) q$ |9 y
/* assign the tl som board LED-GPIOs*/% t) _7 [3 O1 M0 b2 i0 p7 L
static const short da850_evm_tl_user_led_pins[] = {
3 Y, y# P, H' x$ S. b1 c4 D6 { /* These pins are definition at <mach/mux.h> file */
5 T/ w- r2 w n DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 E$ C5 ?' O6 }" ? `- l% b
-1$ G/ c- R5 e! Y" @1 W. [* g* Q) `
};
5 |! ^% \( T$ z9 a, h
" c" J( j3 V- Astatic struct gpio_led da850_evm_tl_leds[] = {
2 I# ]! I# k7 w1 c8 E T0 J( t+ ] {
; ~* U+ u' v) N& z .active_low = 0,2 P, c4 k) ?- Y; A. \. j: ]
.gpio = DA850_USER_LED0,6 x0 y9 g& U" g# y W
.name = "user_led0",
9 F% |2 U5 {$ c/ j* C) t .default_trigger = "default-on",
$ E$ z% @* |2 h, _$ Q r, H* ?" G },! g$ ~, O5 G" u0 f4 l1 n: W
{" r* f/ c. ^) V8 X( `" d
.active_low = 0,
+ h `7 o, l, ?( w$ H .gpio = DA850_USER_LED1,) U: M; |9 H* j2 D
.name = "user_led1",
0 e9 U9 {) N/ `4 F .default_trigger = "default-on",# B% j( J' M$ ?4 t4 P6 q
},
. B/ P; a" V' V: y" w {0 \$ i6 P% l. j. O U
.active_low = 0,! [5 m, N. |. v; x0 Y. h
.gpio = DA850_USER_LED2,4 I: V& @2 R3 l1 V3 b" o! r
.name = "user_led2",; e1 J1 L; V8 R& ~5 u
.default_trigger = "default-on",1 K3 [7 ^$ R Y9 S
},
+ s- O5 n. `; ^( d3 k, u7 |( N, v {: H5 F( S7 W0 n0 F6 j
.active_low = 0,
, g% p, k; ]2 W: P4 R% {. I* `' W .gpio = DA850_USER_LED3,8 M7 G; s, ~2 a' \5 d* b
.name = "user_led3",
+ g) {6 s! M! g) d) N .default_trigger = "default-on",! s T8 g) g j! r& H( V0 s: y
},
3 m% f) v0 o6 F};! A7 Y3 r) o" x+ g; b% N. u$ e9 z
3 u/ j0 V: v' P( p+ j5 n
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {! M- q5 u3 `1 z) M/ m
.leds = da850_evm_tl_leds,( [0 x! P" L. a5 M/ Q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),) r% V+ j; R- v7 I: p! v. k
};
& D0 ^6 Y% a: i% m
. h; q- F' B; g7 ~5 M3 Cstatic void led_dev_release(struct device *dev)
- [$ _ m+ |7 V& r7 z5 f9 n{' @8 s6 u& N5 u H1 b
};6 \ d% J/ I( t( n- V
# G; x* p7 r4 A5 `
static struct platform_device da850_evm_tl_leds_device = {
) S/ w, U8 M+ v3 U( j( E" R+ M; \ .name = "leds-gpio",$ J3 h* i! U6 f9 D4 g" U
.id = 1,
8 }9 }% `# h6 a9 p( i: U" x ^ .dev = {
6 K" G+ {) e& k9 H; G .platform_data = &da850_evm_tl_leds_pdata,1 o' P& K9 ^5 ^9 `3 `2 k- F
.release = led_dev_release,
( X+ }1 N A m+ `( \ }
9 z1 s# `7 U1 Y& O1 n" ]" q};
! w) G8 o; X- p, v
3 l1 ^3 [3 T. A! ?) Kstatic int __init led_platform_init(void)
9 @- T5 P: z& |! [ \9 ]{
* h0 P" Q( }! P+ e& z int ret;
. ^, d) x5 Q* A#if 0 H- @ b9 J+ D+ J! [5 o6 ?. _' y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' P6 |3 I6 S& [1 R9 t; e/ B
if (ret)
' U% s' }' v5 j. B$ U9 {, X( T, d; u pr_warning("da850_evm_tl_leds_init : User LED mux failed :") S Q3 |2 m' ?
"%d\n", ret);
" a2 t+ E0 N! {4 y, ~#endif1 g( A# }! u" _: j
ret = platform_device_register(&da850_evm_tl_leds_device);
/ s& `6 i a8 C+ j$ D. x9 F if (ret)
8 t/ a& S6 S9 [* B pr_warning("Could not register som GPIO expander LEDS");
5 [6 Q$ m: C" F% m$ ] else x* q- y% l) E$ i0 }
printk(KERN_INFO "LED register sucessful!\n");; ^% \1 N9 r1 f, F/ Y ~; a
- k. T+ _- B! J+ g+ A) m2 E
return ret;
; p1 i5 `2 G) n' o4 X}
- K2 Z+ d: ?# K+ N2 L4 o/ m7 O
; A+ X: I# Z8 s4 q" b8 M* `: `static void __exit led_platform_exit(void)' t" ^+ N( j5 T( m: v1 G
{
- Z& ^ }2 O# T. T2 n6 |) P platform_device_unregister(&da850_evm_tl_leds_device);6 w; L/ a% Q) y% P
! W, j4 Z- m) O, S2 z% g9 M! F printk(KERN_INFO "LED unregister!\n");1 y; Z9 @7 W" G$ e# x
}9 E- {$ m; I6 J, Y3 S5 V S1 G: ~
8 A' K2 {% l1 S. C4 i$ ]
module_init(led_platform_init);7 y: n& c3 Q4 P$ M+ _7 ?
module_exit(led_platform_exit);
: h8 R0 h" @2 O
# l' ]8 a% h# a0 {* }MODULE_DESCRIPTION("Led platform driver");
# ?. o* a8 j$ k+ H# SMODULE_AUTHOR("Tronlong");# K2 q. f, y8 _
MODULE_LICENSE("GPL");6 W+ U5 }, @# V' W) Z
6 ]; p& A3 G$ W8 _6 Q% U |
|