|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 ?! {- X Z B8 s; B& B6 O#include <linux/init.h>
: x# q+ ]! k3 S4 s#include <linux/module.h>
$ [& U) H5 l. u! ~) w, F#include <linux/kernel.h>
2 |0 l% N! w* ^( s" E2 _* H#include <linux/types.h>' u2 M1 F" q" h, _9 L
#include <linux/gpio.h>0 t/ ?# x6 S* t# J4 ~
#include <linux/leds.h>! s7 ` X) ^# V3 c0 B2 E
#include <linux/platform_device.h>
4 x/ Z, i8 n5 Y T
- D) r2 s0 Z! c# G% q#include <asm/mach-types.h>9 |/ P2 J& s% O/ ?( U) R+ v; F
#include <asm/mach/arch.h>4 V: W1 a4 {8 k o+ P
#include <mach/da8xx.h>
$ Q* t p. h9 R9 b' B7 y#include <mach/mux.h>+ z- p1 m* S2 N/ @1 J" D
7 C9 {% m9 a4 D* u- B
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 ?4 o, C2 ?. ^' P5 t6 A7 d; u4 k
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 o' `+ L" K6 w7 Z; L9 q
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ j) I0 p" K" s#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 V/ `$ n% [7 P( @. ^8 I) n+ `8 X. q' `2 v
/* assign the tl som board LED-GPIOs*/8 U0 w" E1 z, J7 f! k# ?# ^$ ?
static const short da850_evm_tl_user_led_pins[] = {
. F5 f$ J4 T' d: b' Q. Q /* These pins are definition at <mach/mux.h> file */
4 \2 m$ A% ]5 @8 h* j# R" @- o DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% X8 N! @0 m! |. \9 e6 ~0 [( A
-1' i- z0 g) `8 L9 d
};$ p: o7 J9 F' Z) C7 R* X
" V8 W0 j) x# M8 {& {, {static struct gpio_led da850_evm_tl_leds[] = {
$ e* y9 ?/ v3 o: U8 _. b+ m$ G. s {8 q4 p! {( S# f3 e& [2 K% q
.active_low = 0, K2 ~5 R; @3 R; X$ ^" T$ Q% Y
.gpio = DA850_USER_LED0,
- _0 E. G* i7 D$ O1 t9 f/ V7 K0 P2 B .name = "user_led0",
% k# t5 }( J7 _. z4 e .default_trigger = "default-on",# U8 s5 Y3 q, S y8 p9 ?6 {1 r3 v
},
5 [. }+ U6 M& { {) C8 r% r8 v4 w+ I! X
.active_low = 0,, [* [5 c4 T+ u9 u/ ~* u+ a( X
.gpio = DA850_USER_LED1,% p8 k% [& ^; `( E& e
.name = "user_led1",
7 l; e; E0 w7 h9 s k" {) {9 T .default_trigger = "default-on",' y3 O9 j$ v+ e; \) b! R7 G* r. _
},
! j/ j! T4 Y) h$ T6 u {! X' ~7 b9 ?, q+ ~+ R
.active_low = 0,
# ^) f2 |" x8 i: D: e5 ` .gpio = DA850_USER_LED2,2 O3 v5 D! \9 p2 N
.name = "user_led2",# ?/ _7 z: S6 v- K' f
.default_trigger = "default-on",
8 C5 p, ?8 ^5 n* ^/ M },
* N1 U6 K7 i; y: [3 _ {3 M0 L7 C+ m* r' ^
.active_low = 0,
) i$ {5 ?% {0 A3 u .gpio = DA850_USER_LED3,
; j4 E2 u0 O* W: ` .name = "user_led3",! U6 S6 K9 F* Q& @
.default_trigger = "default-on",) p9 q% f* Y4 b3 \
},+ K1 u+ U; \& q
};
# @; s0 ]/ v4 F) y% w" X) J8 u& U b& v0 m( B0 v& G6 b
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( l# b) X* B0 n6 m; ^' a
.leds = da850_evm_tl_leds,0 S! m# o# m9 _' I7 W3 Z5 {
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 R* J3 n5 ^7 v0 k};
# v8 S. e9 y" H) }- ?) |* f
0 J$ V* c6 y A) Xstatic void led_dev_release(struct device *dev)
- U5 F; u) f( V" u{9 \5 Y) y+ {: Z- {6 y
};
9 }- _# a$ O4 _) F4 u
9 t3 P% \" U7 i9 \' ~- Astatic struct platform_device da850_evm_tl_leds_device = {
z8 \: t F% F ^$ a+ P% J8 O .name = "leds-gpio",( v1 {6 K. [$ ]$ Q& `# P
.id = 1,1 T0 f% X6 ~+ s4 g
.dev = {
! I6 ^* h2 Y7 s" h5 l .platform_data = &da850_evm_tl_leds_pdata,+ I; c b; Z1 y5 U$ W7 \
.release = led_dev_release,9 r+ h8 W2 R+ J, S! {9 p& |
}) I: h9 K4 E: b' h7 A9 D
};
, i% W; h# p# a! _) n( b6 R; h2 k$ O& H: A+ ~2 `3 t
static int __init led_platform_init(void)
0 @5 @. a0 A- z; A{
6 Y! a; u' W6 F: n* ]5 h" j int ret;
8 F% q7 h5 w4 R#if 0
5 x; s7 U4 D1 g6 U, Z% l ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 {& ?& Z& X& M
if (ret): p ]' A+ r% F9 u3 S
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, O" d( v/ l: ]! \- }- C5 q) _ "%d\n", ret);. J$ i9 \* \; i6 f9 j
#endif" X( Y- W* R% U. a. v+ h
ret = platform_device_register(&da850_evm_tl_leds_device);6 Y7 T$ N) B# K9 w
if (ret)1 |0 e$ \) p; C& \
pr_warning("Could not register som GPIO expander LEDS");
# v1 `+ Z+ c$ H8 H" V( h9 X else; [9 D- \$ Q, A2 O% @
printk(KERN_INFO "LED register sucessful!\n");
' r! b3 w9 Y0 S: m0 }& ~7 M# B* }
. @; |3 m) C$ a5 c/ ] return ret;7 d6 {2 Y+ j5 K
}
; \7 C6 E! |3 J. D# |2 X- K \4 z! d! Z' v% V. Q$ B8 D8 m1 Q1 f
static void __exit led_platform_exit(void)
( Z5 _" j; ]8 M* m{
: C1 p7 ^- V' ~! m) ?: E platform_device_unregister(&da850_evm_tl_leds_device);0 D) \. L# I( S7 O `7 f
6 V4 t7 g- `( y1 ?9 \0 @ printk(KERN_INFO "LED unregister!\n");. b( f( [; t( H: o& d5 ^
}
" O) a' F! D8 x/ I# h8 G5 D8 z, r6 d4 n" c& w! a
module_init(led_platform_init);
8 ^, W1 u) Q: N1 N$ e# P( \module_exit(led_platform_exit);+ d0 u: N6 e- k D: q
9 n/ }/ k' m" J
MODULE_DESCRIPTION("Led platform driver");0 H; F7 B! y2 F* r6 |
MODULE_AUTHOR("Tronlong");2 y+ P% N& D8 K! t
MODULE_LICENSE("GPL");, e; D5 D0 _, B- r3 v
" l! K7 \" v+ P/ P0 A) z |
|