|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 w/ l6 s; z3 I' d1 i
#include <linux/init.h>
$ p: D9 p& ]0 j6 g& _! F' P$ s#include <linux/module.h>
3 ~, D* ~. ?- r#include <linux/kernel.h>; V9 p$ R% S+ x
#include <linux/types.h>
m# D. N% W6 Z8 J9 s/ d#include <linux/gpio.h>' \/ e- j6 q4 E* L5 |
#include <linux/leds.h># V3 } m8 }4 T. a! s1 \* K
#include <linux/platform_device.h>
8 V" g" X; ^# e3 n- m
& y# X: i& g% r x#include <asm/mach-types.h>6 L, D7 h$ o& p% {. ?+ @
#include <asm/mach/arch.h>9 T2 ~$ U" I3 \7 x
#include <mach/da8xx.h>
" a) B& A" v9 u) t8 q9 A#include <mach/mux.h>
# S7 U+ C4 a7 }9 y! C. l9 D5 s2 v4 }* }' q$ X( ^. r; V4 p) U5 S) V
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)4 ?2 ?7 \- E9 Y/ [5 j' Y3 T) X/ `
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)" C. m& w4 B! Q( `( H
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 p8 V' b2 ]* o2 l; h# k6 p5 k$ V
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; v0 Z, u1 E( [& Q& O4 r8 C0 F7 l& ?8 _
/* assign the tl som board LED-GPIOs*/' [/ Z+ m% X& a( H
static const short da850_evm_tl_user_led_pins[] = {( {$ I& a" k: O+ Y K9 O
/* These pins are definition at <mach/mux.h> file */: @# m( d; r% G- C& f( v9 ^! |! }
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 `3 V3 n( x" z! K) w
-1; H* p# l X; S' V& C
};
5 G# y* B. I) U; P
, c2 j6 o% W8 R+ H8 Mstatic struct gpio_led da850_evm_tl_leds[] = {/ P; \/ p+ V8 w: i" U2 C' w
{! d" @. l4 Z* W' Y. `5 W
.active_low = 0,0 e6 N+ k5 x, K/ c
.gpio = DA850_USER_LED0,; w9 a4 i: I" a \
.name = "user_led0", z) @( [7 q p! m
.default_trigger = "default-on",# f+ i9 J. P/ {# Q+ n6 _ `3 }4 C
},
5 ^9 S) ^; Y- \8 B7 H; A8 g {
6 U$ f6 [# z" g$ m L .active_low = 0,
4 `1 Q6 S! E( Y( ?6 [# j .gpio = DA850_USER_LED1,
) `3 c2 k+ |& E } .name = "user_led1",
* e: N6 g+ I, z& x9 [ .default_trigger = "default-on",. }; P6 P+ u4 j' p7 r! G. B
},4 F+ L$ C- a5 M$ H; P: K
{
3 S' n: k: |3 D: ~; i- J# v4 p .active_low = 0,
2 v8 ^; T7 d) P2 h; d .gpio = DA850_USER_LED2,* j7 g! a4 L9 N3 d0 ^
.name = "user_led2",
& x0 B, [# c1 X .default_trigger = "default-on",
, `5 Z0 @* Q4 _$ Q/ ` },
/ N; I9 }1 [. G {0 a8 L8 b7 B# } @
.active_low = 0,: W" ?+ J# ~, ^ ?' {/ L3 c
.gpio = DA850_USER_LED3,2 o- [. U9 v) H. R$ C
.name = "user_led3",6 t0 I. j% z* Q; r
.default_trigger = "default-on",& O. |8 B% \* p. M8 ]. ~# w
},
- I4 ?1 I) j5 y- @};
, ?1 C5 n0 |8 V }) H
9 h7 E2 h# P- L; _static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" i$ O* ?" w4 ?) N" K d% K# l .leds = da850_evm_tl_leds,; {1 O: E8 h6 c! k) g7 ?0 P
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),7 N5 \* s0 T9 b! g* m) Z
};1 T1 W# i) n6 |; p
, B* ?* [0 \4 n3 H2 r! }static void led_dev_release(struct device *dev)! L5 i# _; ~* A4 P- X* J0 i
{
: ]/ f8 L/ _9 I! f, L) M};
$ o0 P4 N; p8 ]2 w3 I7 _- S \$ i* `* z6 l0 \
static struct platform_device da850_evm_tl_leds_device = {: W9 U. C- ]. K; l6 v7 t
.name = "leds-gpio",! ~1 d7 ^! K1 r# z+ W. J& ^+ V
.id = 1,
6 Q: F2 C. g+ a .dev = {
: t% O) c6 v! n, g- S .platform_data = &da850_evm_tl_leds_pdata,% y7 ^& \. y0 J# r
.release = led_dev_release,% n( Y& c+ v3 U+ [& A3 f4 }
}$ I/ R" F$ r' H( j$ q- ~9 w. X \
};
% {1 ]7 D u9 V" N5 l) U
5 V& d) y+ i) Z/ ~0 bstatic int __init led_platform_init(void)
) H( o0 g% M2 i* z4 n: ]( V{) `! I+ T, X d2 h3 e! I
int ret;
( H% V5 V/ A; e* i#if 0
, r. u. o% C4 M& A ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' S) ~3 u& N+ u+ T# T) ^
if (ret)% ~& w+ q E5 |. s# o6 P2 A# s
pr_warning("da850_evm_tl_leds_init : User LED mux failed :" v. X. t! e# y& r. E8 M
"%d\n", ret);6 D9 m1 }* Q: [
#endif/ B4 l: ?, b% Q1 ?) o& o* `% `9 x/ S
ret = platform_device_register(&da850_evm_tl_leds_device);
7 W# Q& S( _5 c. N, U- L& e- D, Q if (ret)
/ S; I& [8 y0 O5 { pr_warning("Could not register som GPIO expander LEDS");
/ F0 ~# J- a4 T7 K _ else: K) B- Y! ]/ i0 f. D
printk(KERN_INFO "LED register sucessful!\n");
( ^: [1 t# N) S5 F" s& [8 S1 K$ x3 D% L0 N2 x% j6 J8 K
return ret;
* c4 c, z7 A" A7 D}; v _. l7 Q0 v: \% A4 ^5 b9 Q
3 I. K- I' q. L$ l# H) C
static void __exit led_platform_exit(void). z _9 Z Y7 ]% D: z
{
4 U8 y) L. t3 r& r platform_device_unregister(&da850_evm_tl_leds_device);9 U/ d# D/ e& ^1 G# C8 P! u
* }# ]$ s! v+ T0 }, W' a printk(KERN_INFO "LED unregister!\n");
4 t- |$ K6 S) J7 Z}2 B# V9 `4 H2 R, m% ?: V
0 R1 L+ B) R! d4 W1 S# w! ]
module_init(led_platform_init);: J- U: Z8 I* g5 |0 ^
module_exit(led_platform_exit);
/ r" x/ O a0 M9 ?) }4 u# C
/ |$ u1 Y$ l* e3 `' nMODULE_DESCRIPTION("Led platform driver");
- P5 f0 w7 t' v+ O# n$ nMODULE_AUTHOR("Tronlong");
1 c" A9 f1 |# ]5 WMODULE_LICENSE("GPL");
. f' f* J- _, b# G2 @9 J8 p) a. T, x s
|
|