|
|
求大神给下面的程序做注解,请稍详细些,谢谢。- i2 P! M: K2 P2 ^8 X/ \( |
#include <linux/init.h>" j' Y1 |' L( u1 x
#include <linux/module.h>0 Y3 z6 W" ^/ m* H) |
#include <linux/kernel.h>4 W7 T" H2 L) P
#include <linux/types.h>' A, R. D1 D: _$ D
#include <linux/gpio.h>5 ^) W/ v2 Q# c- W/ w, n/ L! A' v5 k
#include <linux/leds.h>
) U/ W! a4 ?1 S2 @7 h#include <linux/platform_device.h>
( l! }$ c; p6 X: ?
8 h6 q$ M5 |) \9 Z, p$ C; a#include <asm/mach-types.h>: ^3 J: c% }! k
#include <asm/mach/arch.h>* Z1 t; r& K/ t$ W8 ?6 _9 _3 I
#include <mach/da8xx.h>
0 J0 H4 f2 b( ?" l#include <mach/mux.h>
/ r" [% C9 W0 D+ ]& F. Q' m3 n/ v' h! o4 c) a. X
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) V0 ?9 A- A* i% C
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ n9 W7 }1 M$ \( F8 {1 P$ L4 `$ B
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" k2 V7 o. p+ ]. y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- b4 ]( U& V2 V; h) O
3 K8 v c$ K# N; _$ q; o/* assign the tl som board LED-GPIOs*/8 |+ ~+ D$ D" a5 P* C" X6 }3 z' m
static const short da850_evm_tl_user_led_pins[] = {
: y- z: u. f3 ^# h p( L /* These pins are definition at <mach/mux.h> file */
' ]7 y* W) E; J! B- ~; z DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 |, O9 [. y7 E, n# `" i -1) [( E7 Q2 T! a$ w) D6 X
};5 W6 j3 O3 ]7 l% @3 R
' l: w& p! i7 d) ?& \2 H* jstatic struct gpio_led da850_evm_tl_leds[] = {# x, L3 h0 |7 C
{
. D+ b! ~9 T+ l .active_low = 0,
1 E% C- d; Z- H .gpio = DA850_USER_LED0,2 D8 ~; H8 C' V, j7 b& k
.name = "user_led0",( O: ^: L6 ]* R& `
.default_trigger = "default-on",
. p6 L* W4 N/ }% H, S' o8 s },0 j7 W3 W7 @$ @# c7 d7 G; x a
{
* s1 g% \" b7 [! M* Q' M# E .active_low = 0,
/ b6 ?1 a4 M e+ n( N9 ]3 E .gpio = DA850_USER_LED1,
! m; n; ^% ]1 P9 w8 | .name = "user_led1",
& @5 E3 ?% C1 D$ p0 v1 c .default_trigger = "default-on",; R0 }& C' u$ K' i6 a4 L4 M" N! ?
},
9 n3 a8 T3 _# D, ? {
" _4 d. B- z3 B& ~; ? .active_low = 0,+ V8 J7 Q0 y8 G/ K: ]; C9 t
.gpio = DA850_USER_LED2,- t# }* D- p* {
.name = "user_led2",
. o% t% I( L' b+ [" Q .default_trigger = "default-on",
! u- U9 ?0 Y. ^# E( N },5 B: y; c2 u1 o8 Z) a
{
; F2 p% e$ ^5 r) u" L9 D) g; H/ J .active_low = 0,
: F1 e3 y6 A" q' {6 E .gpio = DA850_USER_LED3,6 q. Y0 [% Y5 Y( B: q, ~7 k
.name = "user_led3",
& o* P4 C. \9 |+ S9 n+ h/ I .default_trigger = "default-on",/ d' G" F0 u0 c- M" g
},5 w; o! B8 I5 `# B# R0 N
};
' E: d. W% I" T4 p- S8 y% J4 V: l
1 D( ^) Y0 N' ?* _ Y H3 q" {static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
2 [1 r6 I F; ]/ J; X1 H+ m .leds = da850_evm_tl_leds,
. R+ ^' I" M A0 G0 f# ?6 c .num_leds = ARRAY_SIZE(da850_evm_tl_leds),! m4 f, O4 e' }1 I. k( }, E' i
};& z3 E* D4 {, s+ k4 j
4 o7 U E+ o0 z$ pstatic void led_dev_release(struct device *dev)
( j @' D: | ~+ V e{
5 K6 ^! Q% q" H! W) `};7 O7 T" t) h8 N3 s7 Z. [$ a$ u
) E8 x. n$ A- J b: P% d
static struct platform_device da850_evm_tl_leds_device = {
& x' u5 e# s/ N) i+ Z# s) r .name = "leds-gpio",
9 y" @+ q; U3 q% S# X1 D; c .id = 1,. b. Z1 e! E( [* o( S
.dev = {
$ C% S- p" p) I& ]! v, _1 [ .platform_data = &da850_evm_tl_leds_pdata,
1 v8 l2 H5 s1 R. ~' Y' z .release = led_dev_release,
- e: n: F, t+ n$ D0 `5 w }
9 y* t ?7 v5 |. I8 r+ V* j8 w};% B/ K+ F8 H7 t+ E% B) R
% t5 H" s4 U5 [. a( tstatic int __init led_platform_init(void)' m0 m5 e0 a6 o8 Y7 V' w- S
{
2 [( C1 O8 ]% K! P: O int ret;# o- h1 O7 ?2 E t
#if 0- Z0 ~! m% B ~1 E. L& T
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& m4 j7 Q% d. x) w if (ret)
g: e/ x9 Y6 b& q5 c- w3 ` pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 i; W0 n& H0 q
"%d\n", ret);
* D+ t+ p$ S( [. X: I* z#endif# w6 \6 W4 r9 p0 v# s
ret = platform_device_register(&da850_evm_tl_leds_device);6 R) |2 J( \! _& ~) g9 l* k' [
if (ret)
+ E1 p" Y5 k( z3 s) [. _" D1 N pr_warning("Could not register som GPIO expander LEDS");
% v; {- s0 @6 a8 X# i' y8 G4 K0 l! x else c8 ]3 h$ @# t( t( a' b
printk(KERN_INFO "LED register sucessful!\n");
9 R9 N4 j: I5 A6 H! H( x; z6 m4 N1 d* }1 c0 \& G( k" f
return ret;3 [' }: S0 I) x; @& e- U
}
5 K& F) q6 |: I! n O, F
. @; c/ V9 y2 T6 S b5 l5 ]+ ?static void __exit led_platform_exit(void)/ S) u7 T8 Y, G9 z2 N2 T
{
& U3 E9 u" ^ ]5 L platform_device_unregister(&da850_evm_tl_leds_device);
8 O& m6 ]1 ~1 |7 p `5 J
& l: i; R# d4 D: e3 f5 i9 J printk(KERN_INFO "LED unregister!\n");
: c8 m- D u7 J$ t2 W, y}, C4 r0 }. D8 A9 h" A7 R; t9 S/ j) R
; A$ q" k, m' Wmodule_init(led_platform_init);
9 ~& Q. N1 v* ?module_exit(led_platform_exit);
) }) o; B9 h, e5 Y- l( w0 T
9 Q+ y3 d; F7 v4 cMODULE_DESCRIPTION("Led platform driver");
. c5 {; D s" o& ?MODULE_AUTHOR("Tronlong");
$ U5 M4 _9 ~# }MODULE_LICENSE("GPL");6 t8 j7 g5 }* p: v$ \4 W
( D6 A/ p; |6 ~1 C/ |8 F, D0 |# C |
|