|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 m' Z* e) T U& S/ ~+ V
#include <linux/init.h>
+ y8 L% A+ a! w$ h5 A5 J#include <linux/module.h>/ |5 ]) p* M6 T+ g0 z( Y- M3 ?. s; ~
#include <linux/kernel.h>
' l7 Q4 t, ] s! N1 R2 u#include <linux/types.h>! N; n' I9 s4 Y5 |9 o$ x# f
#include <linux/gpio.h>3 i) O+ U: [9 C, S- \' m& z
#include <linux/leds.h>
7 B4 v- s8 a/ E# }#include <linux/platform_device.h>* f; ?* V$ F' l }- s
, R5 g. l5 n; W: a9 `
#include <asm/mach-types.h>/ h/ d3 Q- @3 B8 e' m) f
#include <asm/mach/arch.h>$ H0 t: ]' W) L$ }9 K
#include <mach/da8xx.h>
! h6 W/ r+ s* k" i& X9 O, V#include <mach/mux.h>
9 h$ d8 F# h: I9 L& o( j8 w6 y; D; k8 e+ V. L. o) u
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! M* l' G/ I- Q$ r7 V#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! v; m; s5 G! O }. q* W7 r
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 c" D5 x1 x3 S- l, v
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 j! R& N& [5 N+ D5 m. d+ d# p; S6 H$ Z% I ]
/* assign the tl som board LED-GPIOs*/$ v' Z$ `. W" U# g M, c
static const short da850_evm_tl_user_led_pins[] = {
9 s9 m6 m: F9 i/ l9 k7 ? /* These pins are definition at <mach/mux.h> file */" M3 }# M8 B% `2 K: b0 b
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
$ w1 k4 E2 `' v2 | -1
! Q# L# ~2 F5 z' }}; u7 j8 W2 h) R c: f1 U& `
4 o; e6 X; ]6 Z3 I
static struct gpio_led da850_evm_tl_leds[] = {
1 k1 O7 _, G7 |( p {" e% I( R* W* l, B
.active_low = 0,
' T. }5 V4 U5 |6 Q. ~4 @1 k .gpio = DA850_USER_LED0,8 I1 ]- u$ L8 u
.name = "user_led0",
* q; l( K1 x, ?) R+ R+ H/ N .default_trigger = "default-on",3 Z) z) z. g) W; j' z! K% q
},
$ e: V4 N7 ~" O6 @" G" V; Z" G {
5 ]6 R# @( p/ j8 n .active_low = 0,
3 p! v4 M# Y9 i7 Q( l* t- W .gpio = DA850_USER_LED1,
9 v3 C' K- ~8 r0 P& ^4 S .name = "user_led1",
6 j2 p! a. G, n .default_trigger = "default-on",( t& N* I) L4 s: p
},
$ W4 V7 }; x3 T {
& }6 h& v9 E+ \ .active_low = 0,
9 f( w" n0 m4 @8 A .gpio = DA850_USER_LED2," i3 f8 {- F( _5 r
.name = "user_led2",3 v1 h' w* N3 J; |* B6 J7 `3 Q) ?2 x
.default_trigger = "default-on",5 u6 L7 a5 r2 K) i( Z! G; g9 U& @
},
b- o+ I# f& H& t* F. U; x5 e* u {4 f# {: J0 y$ R1 Q9 L+ L( @
.active_low = 0,, ?9 Q( g* O( Z3 h& ?
.gpio = DA850_USER_LED3,
, g3 W$ u& g% g& D .name = "user_led3",0 G& A g! g6 a& m- r
.default_trigger = "default-on",7 n/ D: K0 c5 k1 B3 [. {% j
},0 w& N" Q- z" ], v8 \
};
) w1 a. t& N- {4 u N: _9 ?2 h
! P9 o }, J R+ |5 c" Hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% I! o2 n' S" H! y" z" ~2 N2 | .leds = da850_evm_tl_leds,# k& |& y( e+ B; c% B) e( p
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),& x- O/ W$ W9 a0 F: I% `' e: y
};4 s( o; e3 A; Y6 n
f$ Y5 F* ?7 D2 b- Y4 ]7 U
static void led_dev_release(struct device *dev)' v- m* C9 t8 b) a5 c4 y3 ?
{
( U5 }4 I) S9 O' g};
0 w+ ~, N% B5 Y. H: u& u# I, ^8 L% a8 T
static struct platform_device da850_evm_tl_leds_device = {" i# j9 a9 a9 [3 l
.name = "leds-gpio",9 f$ C- q9 C# q, G% {7 ^
.id = 1,. D, k- r1 R4 L9 @3 }# M8 P
.dev = {
$ n. \$ C; q: N .platform_data = &da850_evm_tl_leds_pdata,3 H; j9 _1 k% Q5 L/ I
.release = led_dev_release,7 A2 ^: Z. Z# u9 o
}
8 i% a% D7 W) Q" X! u' A2 J};
. g1 R, \! A d2 h
9 g! ]. c# {% Z$ r; gstatic int __init led_platform_init(void)
+ G0 A( e1 a9 Q7 ?, X{
7 M' f D9 K9 s0 l( { int ret;/ z+ v$ l8 K: f1 x% ~
#if 0
_' [4 C w; f' d! x6 k; v ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 ]# [$ Z+ r! e- o1 ^! I) L4 z
if (ret)
- I* Y7 B2 Q8 g# t) C2 P0 j pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: X; s" @) e$ Y "%d\n", ret);9 ~7 `1 D4 W6 l& a; [/ O
#endif
- {! a) D2 q* s ret = platform_device_register(&da850_evm_tl_leds_device);
/ K. d$ |$ C' v if (ret)
/ P2 ~1 J* C! W0 e; ] pr_warning("Could not register som GPIO expander LEDS");
+ o5 m3 U2 r) y ]) Z3 M) j else! D8 K2 j' j. Y
printk(KERN_INFO "LED register sucessful!\n");
" {6 p' ~( Y0 N3 i& ?$ {! Y, [. X/ e6 j% j0 j3 I
return ret;
+ k4 S; f0 h0 f}# r$ t! A8 d g0 q1 d
0 {* w# ~% e# [9 m; bstatic void __exit led_platform_exit(void)
* \ q7 [$ r' {4 n% H6 |{- h1 V+ F0 V: b1 @. e! P
platform_device_unregister(&da850_evm_tl_leds_device);5 | |& o8 {) m! S+ w
, d s, D5 f- R% }3 U3 h1 R& K% V$ M printk(KERN_INFO "LED unregister!\n");" O, i, d8 T8 }9 ?& S
}8 Z8 g; G; |8 O" @; Q) u
% t- ]( t4 V$ u& M9 G- [* V& Q
module_init(led_platform_init);
3 @; d9 y& }# f' G5 S& Lmodule_exit(led_platform_exit);
; N9 h; J5 N* g% |! F
) Z) D. X3 i- V S$ D* c3 TMODULE_DESCRIPTION("Led platform driver");
6 I. t- W- b L0 r6 n% UMODULE_AUTHOR("Tronlong");
% _- b" [. [$ B" ?- p: DMODULE_LICENSE("GPL");3 ^/ D1 b/ A. y7 Y7 u) S+ i
% C: |& s1 X1 z! [8 \* c, [
|
|