|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ Y, u" R! M4 D3 `8 R; |. g#include <linux/init.h>9 T$ B& c0 S) n, R
#include <linux/module.h>
) m/ h. W W. C a#include <linux/kernel.h>
( J3 P2 k8 n2 I! b" B4 g1 h#include <linux/types.h>7 n7 \5 E, s$ E1 A% {; j" [
#include <linux/gpio.h>
, v) U; M! E$ e# J# B#include <linux/leds.h>( j" |" I5 Z3 T R6 N; n+ A6 D. H
#include <linux/platform_device.h>
+ p" v' T- Y L1 B6 c, P, Q! _. ^. t. \% H3 x$ y# h
#include <asm/mach-types.h>, `7 B- i" y2 t* a1 n
#include <asm/mach/arch.h>- k6 U j3 r. y0 k/ q: U
#include <mach/da8xx.h>
: y. q3 X% z% t#include <mach/mux.h>) l% s+ `' `% y3 q" T! `
+ P4 y4 K- j3 {#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- `+ D1 @1 ?7 j* c Y# V2 D8 n#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 v6 l6 ~( {& r) y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
$ z9 S5 t& E; r5 d6 |8 Y#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 W- g' L/ {# z
0 R, n- z1 v# Q7 X8 i! I
/* assign the tl som board LED-GPIOs*/- O: i- ?' N5 x+ b
static const short da850_evm_tl_user_led_pins[] = {
% _4 F* o8 U. y8 y1 g, l7 Y. s1 \: z /* These pins are definition at <mach/mux.h> file */' [" n" y1 G; `
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, Y& M8 Y% r* v$ i a# g* ]5 ~
-1
" e+ Z4 X, K* a2 ?1 C6 U+ i};' Q5 S) t7 |4 ^# i
* E8 W+ V: F: g$ G. J9 v& ^- gstatic struct gpio_led da850_evm_tl_leds[] = {
6 G |0 J* v7 _: {" T+ [ {
+ B! }% t5 W$ Q+ W- ?* v .active_low = 0,
$ D6 Z* Y N5 N' R* H/ h .gpio = DA850_USER_LED0,
- c2 u5 A* z, O$ c b) F- ?; v0 @ .name = "user_led0"," E( v; w; a" L4 S+ }/ \" W; q
.default_trigger = "default-on",
- N4 {, v2 d a8 w },
* I) S. O. F- u {2 {# M: c {
0 R( l! l: Z; v* y3 w .active_low = 0,1 R' |- T( B4 Y' e) f
.gpio = DA850_USER_LED1,; f5 P$ r+ ~9 ?
.name = "user_led1", o, }# n( g! T1 q$ D4 i- [
.default_trigger = "default-on",. |2 f, ?9 K5 @ }
},& [2 b0 V- z* l2 G/ O+ G% _, i+ x
{7 x, N' k$ D4 H a; t1 Y% z
.active_low = 0,
) S& y+ r% m) X; y& ]3 h3 P, | .gpio = DA850_USER_LED2,: K( I8 I! P( J3 Q
.name = "user_led2",
" ~7 @- N6 C( z5 `% ?$ n1 v .default_trigger = "default-on",# }, ^1 `8 d7 i) U- F4 C2 o
},
8 Y. [+ c" D/ m, I# ^1 v! p3 w {7 m$ j4 d) g4 S$ e) `( _
.active_low = 0,
* X; K+ t" q# c' f& R. }+ @ .gpio = DA850_USER_LED3,
* j* r. }3 ~7 ?2 v0 } .name = "user_led3",
3 X1 w. w5 Q) C" o9 V; \ .default_trigger = "default-on",4 v% V* O( r- q; D
},3 S: X: K2 p+ ]5 d. |: `( w2 P
};* _+ \8 C6 U2 O8 `+ j+ R0 {
* k$ u( u- x- t. ~" W: h5 h, c, C
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ R3 N" g3 T2 r, d$ E D .leds = da850_evm_tl_leds,
3 a4 S/ D7 f0 I: i$ U .num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 V2 C1 l& [9 A: w H4 Y
};) L' V6 J+ |9 f$ g
! v7 z& J- Y$ \) X# `7 estatic void led_dev_release(struct device *dev)
% U1 t9 p2 B* }{
$ D$ L u, L7 r! G! j};
0 Q% S- B8 ? P ]8 s- l a6 f" w* q0 q% |9 U: U
static struct platform_device da850_evm_tl_leds_device = {* U- x5 K r' c% D
.name = "leds-gpio",
( } k9 Z3 ^5 k. p8 L" a .id = 1,
6 J- |. a v& D2 V) R3 k* y! @# m8 l .dev = {2 x1 B) [9 s, f& h# ?9 p
.platform_data = &da850_evm_tl_leds_pdata,
: ?1 k6 f7 a1 [' Q+ W0 s! S# M% N5 z .release = led_dev_release,
7 X# x( z- f$ n, F$ P$ c }
& ~: ^' f7 r a% _4 v/ ^$ I}; F+ u" {7 x [4 m+ ?6 O5 k
# Y& ?! W* c% C4 J; } tstatic int __init led_platform_init(void)9 Q/ v4 G+ i. w' V: k
{3 Y9 l, L4 W! j O0 z0 {" s* V
int ret;
% T1 f' u& A9 a% l- q( \#if 0
+ \/ \. I, f h& S9 Q- T ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# C, M. K! H. t: o3 N! z- T if (ret)
3 {3 [6 G1 c0 @: S, B5 ^: x7 g! e pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
0 p# ?- j* M' B "%d\n", ret);
3 n1 _5 T7 n0 [9 `" }' u#endif9 D# `6 B5 e; x6 w
ret = platform_device_register(&da850_evm_tl_leds_device);
* \* @& M% @ p. } if (ret)
y- u/ x$ R! P* f3 C pr_warning("Could not register som GPIO expander LEDS");
! e: k/ P/ }) ]& N7 z else
7 W4 @% U9 p v: w7 A0 C# m printk(KERN_INFO "LED register sucessful!\n");1 @( V7 r! |# o: B1 R8 L3 B! t$ R
$ y: k% K. w& L# P' Q: G7 u
return ret;
% i5 E9 W) I1 |4 y3 {2 Z! }$ Y' n) W}
, [- e* r+ C0 b4 e, v7 @+ w: Z: p4 y( o: v N
static void __exit led_platform_exit(void)+ M0 P! S6 {1 }% D
{& j' E% b4 A/ j6 {+ y- D: J$ [! u
platform_device_unregister(&da850_evm_tl_leds_device);
) j& U& i. Q ]7 B, t% U9 ^/ v% [7 j
printk(KERN_INFO "LED unregister!\n");
% d$ u8 b2 l; i}1 C( ?) F9 @7 k1 O
; G9 d7 Q* @+ E. q! k& @module_init(led_platform_init);1 Y {7 `. `# Z; s
module_exit(led_platform_exit);% D( h, r& j' q* e' l$ c. ?
- c1 W- G# D! p1 IMODULE_DESCRIPTION("Led platform driver");% B' E9 x% ?4 H* z7 m, c
MODULE_AUTHOR("Tronlong");6 t3 S0 o2 r+ e9 k, ^
MODULE_LICENSE("GPL");; W" k! s4 G1 Y7 u% K0 p8 U
0 [, L$ |/ S" T
|
|