|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
0 |+ T+ w( z6 {#include <linux/init.h>
% k& F9 {4 _, R% r+ o2 G#include <linux/module.h>1 d. h: z$ G# J/ Z0 D# I) T
#include <linux/kernel.h>
$ [. p" B* B- W#include <linux/types.h>
$ A+ F g; i2 s#include <linux/gpio.h>
7 { p! c; n! R- l: Q. Z#include <linux/leds.h>6 [: h' K( {: L6 V5 ?+ J
#include <linux/platform_device.h>
: o/ m- V& q% K, m5 Z' K7 j3 z, E+ X7 C9 \0 s' J% h
#include <asm/mach-types.h>
# A/ Y% c0 W: d) C( \; p2 Q8 T. g#include <asm/mach/arch.h>
0 M7 |- K, v9 S$ C#include <mach/da8xx.h>& n0 T' @/ {/ }: t+ l7 W0 c
#include <mach/mux.h>& B1 p* T, k ~5 s( s
# x* X; `" G7 C/ a8 {#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- M5 e. r7 S z
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ F6 P1 K7 M7 [- |5 b. U
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! J; _/ @- C3 ~3 X# }. w5 Q& ]#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: Z1 m: T! K* h" c7 p
% e4 H7 {7 y# a% s1 ?/* assign the tl som board LED-GPIOs*/0 F8 {* U. r+ m
static const short da850_evm_tl_user_led_pins[] = {
- g1 K6 A! ] w; | /* These pins are definition at <mach/mux.h> file */
' u- |7 w5 e# G& b; t+ ? DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ v: z. M5 _2 j9 X0 k
-1* E2 O6 L, b# ^7 ~
};' Z, i/ o+ Y# u/ E
* q( ]6 F" D+ G! G. M
static struct gpio_led da850_evm_tl_leds[] = {# B0 W8 i" u/ J6 O9 ]1 v$ F
{/ T+ o& D5 | P: P' F
.active_low = 0,& e+ d! g7 E n* M/ L
.gpio = DA850_USER_LED0,( [, V4 f3 q f) y% p" v
.name = "user_led0",
9 o& R3 y: N. V .default_trigger = "default-on",+ D- \$ y. i. d
},. X% Z7 z9 W: j. p7 G3 h7 e
{ V9 Q. s' {( }0 W: a4 V/ e2 A
.active_low = 0,
6 A' O2 d" h' z7 X: Y# c* n .gpio = DA850_USER_LED1,
" @5 |' B4 p8 b/ x7 z! k .name = "user_led1",$ \8 K( K d1 g2 O
.default_trigger = "default-on",# [' q4 O$ A1 b+ A6 k+ a; B. A
},: V0 l P2 R+ y" E
{$ W @, Q0 U9 O u/ X
.active_low = 0,
. i/ P) k: Y# M .gpio = DA850_USER_LED2," M$ f7 q" m4 t- ]1 p
.name = "user_led2",7 H p O, a% F$ ?0 _( T7 E' A
.default_trigger = "default-on",
I! [9 N9 t4 x5 c2 d8 H },0 E$ I: o! \/ E6 ~: S( s6 Q
{
0 l6 C% |" `# @: Q .active_low = 0,4 ?1 |& v6 s/ e0 R, A! x8 X
.gpio = DA850_USER_LED3,
& t; h4 ` r3 }( o! O, C; e .name = "user_led3",0 k3 e% e/ L5 A# B* b
.default_trigger = "default-on",3 U7 `) ^5 \7 F( b S7 V/ l+ o% U
},
V8 |3 {9 ~7 i7 c1 g};0 ^! u: ~8 U! r
0 M3 v2 i# F" ^- V) Mstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ L* |" v. @) C .leds = da850_evm_tl_leds,
. J/ S- ]5 Z2 } .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
5 ^, w6 u, T3 ~ j3 l};+ \# @& a$ V; z7 V1 m
9 Y3 g4 A0 I/ I- K/ J
static void led_dev_release(struct device *dev)9 r: O$ ?0 V. M
{ x7 Y4 z8 m! Q' R7 x0 s* I
};( u, P" f4 x! ~7 j' B
! d% u( }; F& M6 v+ S
static struct platform_device da850_evm_tl_leds_device = {
; z% @& ^: b# \5 L/ t) L" M1 ^3 t- [. f .name = "leds-gpio",
1 i P; W: {% l) i( _# D' ^: @" h .id = 1,5 l0 {' o$ n% t/ m. |, n. A/ n
.dev = {
Y1 ~$ b( r$ U* p) V8 g .platform_data = &da850_evm_tl_leds_pdata,) m6 K" _+ }* p
.release = led_dev_release,: G& b% Q* z/ |6 J) c" u
}" |, w; ^4 ^' @9 }4 p- o
}; l% G, m* k6 W$ W1 n4 t$ y. M
3 j# l# i$ ^8 t. G
static int __init led_platform_init(void)
# b! f. F; G/ w9 ?{8 { W, j! R. O4 M
int ret;+ E8 l+ R: y) ?) v
#if 0% v* O- K) B+ D
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ n4 X7 s& ]+ _% g; k' | if (ret), m& N4 ^5 @, o; r# s) j
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; _. ]: G" u$ j. N
"%d\n", ret);- N. Z, D6 I, f* [- r
#endif
7 y; Y$ H! U8 O. i2 ?# y; `# S' ] ret = platform_device_register(&da850_evm_tl_leds_device);
9 {* f& u/ ?7 B0 @: n if (ret)" A' M: q6 c) M, {* ~; y
pr_warning("Could not register som GPIO expander LEDS");2 T! F7 {9 V) b k# e2 q: i
else
5 e! R6 r; l; X printk(KERN_INFO "LED register sucessful!\n");! e6 p) M& P+ \5 e t& @
# C/ Q `& `" n; M( U return ret;
' d% G$ Q5 m X* Z3 P: D2 T! l}
' k9 J1 [6 e. M1 B2 }, ^3 H; c0 M7 P; S& o
static void __exit led_platform_exit(void)) ?8 a: \. s+ R" W, b/ U4 Y
{
- R( O) ]5 A* F, X( A: x platform_device_unregister(&da850_evm_tl_leds_device);
e& `2 Q" t. ?$ U& b7 Y5 @5 J$ C* T6 m7 S* {
printk(KERN_INFO "LED unregister!\n");
8 \" [' Y' a' n. i- Q" H}3 k% f" ?2 p8 X' G; r- m: a% m
, m2 L8 b8 ~- B6 k1 P
module_init(led_platform_init);
8 ^! x9 k5 R9 ^module_exit(led_platform_exit);
& E# N1 Z2 x* f' Q2 x
! `. }+ ~9 \! V. ~0 `MODULE_DESCRIPTION("Led platform driver");# B. h# j; i3 t' @) t) \
MODULE_AUTHOR("Tronlong");' k6 Q2 w& i, V3 p' V v
MODULE_LICENSE("GPL");+ b' i6 Z" G( z
4 O* f4 O+ W3 y* ]4 F& W) S |
|