|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
# R8 n1 D: |- {- E2 v* z3 R#include <linux/init.h>
" U# e8 V# U) M#include <linux/module.h>
, u' v% _) K5 i2 J! H R1 i#include <linux/kernel.h>. u3 y1 T! n9 a+ ~
#include <linux/types.h>' o% I3 M2 X; B' q+ f
#include <linux/gpio.h>
% R! c' j7 ~1 ~3 U7 z0 t#include <linux/leds.h>
, k: Q7 s6 E" ?0 X! { e* x$ N1 w9 c# L#include <linux/platform_device.h>
% _1 C3 w# `5 f. V# J- P+ R# }) x( `
#include <asm/mach-types.h>+ | [8 l+ V2 B9 f- u/ p) u
#include <asm/mach/arch.h>
8 [1 x. U: O% Z# m( v" L#include <mach/da8xx.h>
+ s% e& f8 j# w9 x/ \) w$ a#include <mach/mux.h>
6 R( E3 G* o! A* [' ^8 C/ D8 o3 S2 [) r5 a9 q: B! C
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 w6 w* E1 O4 J6 P- W: Y6 ~2 K#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 R0 h7 X) o2 w#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 l# `: i) w* l2 M0 e# i$ Q
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 N) R& x( X/ _# V2 y4 K( w( u$ V0 z. @- b d7 w
/* assign the tl som board LED-GPIOs*/ @! m. [& Y: l) g5 O
static const short da850_evm_tl_user_led_pins[] = {
4 d) J) `/ r \" T; q: t /* These pins are definition at <mach/mux.h> file */" y5 u0 [) O1 S2 }% c: W: ~# g$ w
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; @" a0 v: _( | X# m5 \ -1. E `3 f7 t( m2 g4 B% ~
};
1 k5 \; n: Q: u& r4 `$ Y; H3 Y6 V
) G) O; G7 f/ r5 A' Xstatic struct gpio_led da850_evm_tl_leds[] = {( l# _4 s) x$ v0 A( r* |
{4 z8 ~* V6 ~) v. _5 q
.active_low = 0,/ @" h$ e) l( N! a
.gpio = DA850_USER_LED0,
+ \7 q! ]3 N! p! X0 I& T/ n .name = "user_led0",' H* D) R' r- S# A2 S' E5 h+ N
.default_trigger = "default-on",' a7 G0 n: C/ `! s& b
},
4 v# `7 J* Q) `; J. ^- t {
; Q+ p6 _/ | H( \ .active_low = 0,) ~0 M- N& c3 S6 T3 Z) u
.gpio = DA850_USER_LED1,. X- a" D6 T! m, b7 R) q3 E6 x
.name = "user_led1",' E& s9 _, _; t( T
.default_trigger = "default-on",
1 L( c& C5 o8 g. L },' N6 q# }/ ?4 J; H4 G
{3 I4 | ]% N& C# S
.active_low = 0,
0 E3 M8 S) l: u .gpio = DA850_USER_LED2,. d( x7 i5 |$ v& W' y; A! m5 }
.name = "user_led2"," j5 M3 a+ v# e( q K; w
.default_trigger = "default-on",: e$ | C( q/ o7 C$ _5 c ?4 R5 E
},
6 m& r( a$ Y7 V; C( ~ h% } {9 X3 A- r6 c/ G& ~
.active_low = 0,' {9 K2 _3 y! R
.gpio = DA850_USER_LED3,
- \* `* J; z! b$ Y. L% B .name = "user_led3",& f% I& {9 o/ q" K
.default_trigger = "default-on",
9 X9 R- s+ S8 c) | },
2 J' b3 f! M5 ~ I: V8 c7 g% l" g, f};
; a. u9 }6 @8 X5 Z6 @% w9 _" K$ C
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& d+ }" Q4 N2 \# x$ P- F7 f1 q
.leds = da850_evm_tl_leds,) B/ R) \* f. _. J3 P; y9 n
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) z* e* Y: j+ |; X1 E' h! J0 ?};
' V v- P# t B Y. C4 O) e. ~% \& H# ^
static void led_dev_release(struct device *dev)
2 t/ V: f$ u6 r( Z{6 i/ c4 I7 V$ @2 J& R* u
};
0 [, g; Y$ p% K1 R" K# t3 D
, q0 a2 o+ j+ l4 j4 ~static struct platform_device da850_evm_tl_leds_device = {
' e, O( D* _, [ .name = "leds-gpio",7 A& d2 C& t% [; F4 z& A2 O# v2 }" A
.id = 1,3 b v* a2 j. V+ @2 L/ a
.dev = {2 X% B# l% _' a5 t) F9 t
.platform_data = &da850_evm_tl_leds_pdata,
' d7 I$ B' s" B" ~% Y+ { .release = led_dev_release,
" a4 T! ^$ ]' L# y! k }
) J& D' M& `+ z& R6 K' @};, [3 S# X. h2 f
) s4 {# r% l5 t/ }
static int __init led_platform_init(void): b/ e {. X" d6 ?0 i
{ w" L/ N k& `* M; w5 k
int ret;
; {5 E' K. N, Y" \# }8 Q& N#if 04 }6 J, U* Y, y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& w- u* w, @0 V v! ~! Y" @% L if (ret)) H4 k. n6 N: A6 S& U
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# m* Z( a! o: {- P
"%d\n", ret);
# P2 ~9 i2 ~' g- } T#endif
- e3 J3 o: n2 k5 D5 G+ i! r5 d: }* { ret = platform_device_register(&da850_evm_tl_leds_device);
/ _6 x8 J' \6 ]; z: y; D* U if (ret)& W4 h+ _# O* Z4 }7 e; q
pr_warning("Could not register som GPIO expander LEDS");
$ X+ l$ p5 h9 S: k else) t+ H+ j( Y/ b3 S
printk(KERN_INFO "LED register sucessful!\n");& i/ |) i, W( a0 p
9 i/ ]& ]& e2 t4 ^* ?: y/ v& P! c return ret;
% Z5 o5 g8 y( r6 O- K4 [' O' @}! W# R! L7 Q N; B! h# g4 F* H4 @
% z/ T: B1 j. b i+ V+ p& @
static void __exit led_platform_exit(void)
/ U) n5 R+ G/ z! H- V: _{
1 L8 h J1 \7 T1 I" A& d platform_device_unregister(&da850_evm_tl_leds_device);4 M- V) \! r: X
! F& X# A Y2 e. w0 h2 \2 B printk(KERN_INFO "LED unregister!\n");% @% y9 v7 k) l! D1 d
}
7 ^6 O7 Q* c4 J5 ^( i0 r% X5 }1 @0 q7 H( z, u( n+ {! {
module_init(led_platform_init);
! H% |! C; n- [' N8 J- S# ?module_exit(led_platform_exit);
7 H3 K9 N+ K; g5 r5 t6 E& C' b
# M3 B9 r" l* c" j) J. F. F& \MODULE_DESCRIPTION("Led platform driver");% t- S- g) p: K( Y- V) w+ e$ y
MODULE_AUTHOR("Tronlong");
3 O2 i4 R# N6 a9 {, d) oMODULE_LICENSE("GPL");
3 H+ w' r* a4 [3 `4 Y z( f6 V& V% X+ J' ?* F9 v/ d6 @
|
|