|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" O' i8 S. d1 R7 T& X7 `; ]1 z#include <linux/init.h>0 U/ w: ?! Y0 n# I1 I# d
#include <linux/module.h>
6 W) d; a4 {5 q/ w. h, x+ a& z#include <linux/kernel.h>; Q5 X* ]: d" ^# V5 v6 G
#include <linux/types.h>3 | l/ M# s t6 W
#include <linux/gpio.h>
( r4 g2 ^" r( T+ I6 S2 B- j#include <linux/leds.h># c- i* _4 d [) g5 l! r0 D
#include <linux/platform_device.h>
2 U2 I; [/ g* M$ [4 W
# o5 } i$ F" k) o( t% [; k l$ U0 K#include <asm/mach-types.h>
. M% n' d2 K! L/ n+ w#include <asm/mach/arch.h>3 W" P6 ]' n) T- e' |+ a
#include <mach/da8xx.h># }/ @2 B/ Q$ g5 N, a
#include <mach/mux.h>
! |# H, Z. n9 ~* V* ?
& o4 k* q& F2 @# d#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; \+ ~7 `! O: o! Q% y8 ~6 L. h8 ?#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* x" I8 ?" x8 z, e4 @#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 z* C5 Y" T, U, B4 ]. B#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 @; Z( }( J7 r, u
) l7 `2 Z; S* A( V# A3 Z
/* assign the tl som board LED-GPIOs*/7 J# z d6 G1 X6 Q
static const short da850_evm_tl_user_led_pins[] = {' m5 d Q* [5 r/ P/ k$ e9 b
/* These pins are definition at <mach/mux.h> file */
, J. }' `3 ? X0 e4 W1 u% } DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,# ?# j4 a( |( u' I
-1
- C0 c% ?5 s, t b7 v};1 K5 {& O8 M! ~# P6 p
/ `7 j9 q( t6 ]9 r' m
static struct gpio_led da850_evm_tl_leds[] = {
$ Y1 U P* g# V+ @ {$ W1 c ^; L/ b) p8 a& z
.active_low = 0,0 D# D/ C; ^4 J- b
.gpio = DA850_USER_LED0,
% F" E: [, L, A4 O7 L, {2 | .name = "user_led0",
, ]( r- F: O& N! ]: R. } .default_trigger = "default-on",
2 W, M' K7 `* c! v0 Q7 Y& c) ? },
! c- V, p/ o: c; L5 K {
6 t/ _: v6 D3 d; @ .active_low = 0,8 G7 x0 m. t1 \3 u: Z5 g- d3 R6 R' a
.gpio = DA850_USER_LED1,# ], b' S' w2 o' t" c
.name = "user_led1",' x6 r8 x- O4 E# y
.default_trigger = "default-on",+ U6 \& f. ~/ d' j6 k) m0 Z
},
% r3 r o' O m( \: d: f {/ @ t1 ?. V' H& e0 N e$ D- R' G$ T
.active_low = 0, i( H# ~7 u. U
.gpio = DA850_USER_LED2,
0 K( O2 t" c+ y3 X9 K% Z' q) y .name = "user_led2",
3 P% E5 Q, \0 o' G .default_trigger = "default-on",8 K4 k) r9 Q. k. E. i
},
! ]% L/ q$ ^( q% n {( k) r: h' b! ~ o n9 P
.active_low = 0,: N. I/ O6 P3 f I# `
.gpio = DA850_USER_LED3,( y4 e" r$ s3 v3 O2 `3 _
.name = "user_led3",
9 D% g& e6 p5 D5 v8 { .default_trigger = "default-on",2 @, {4 o5 w; Z5 Y
},' [/ ~4 M$ i5 x7 a; {
};
$ D0 v: r& S V' X+ P+ P1 S. Y: \
" U, w) B1 |6 n9 i2 \' Estatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* v* R" R4 _1 C1 P3 W .leds = da850_evm_tl_leds,
9 S- X5 ~+ f* Y, z .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 q' `/ W$ M: Z! }};5 {# `1 P2 d# I( O
1 v+ P" H" ~/ C5 M
static void led_dev_release(struct device *dev)3 ?. F& Z5 n" B5 [# ?
{
! K5 u! o$ O, e) h7 h L};4 c M3 K* _5 i# n" O
# e9 D: r; o6 l5 F/ F) qstatic struct platform_device da850_evm_tl_leds_device = {4 H) S0 v$ ?, t4 A8 z+ I9 J
.name = "leds-gpio",9 k& d' h* u3 l3 s
.id = 1,; m/ x, K/ `0 N# L
.dev = {
- Y' q( d3 p$ i9 u: Q/ _ .platform_data = &da850_evm_tl_leds_pdata,
' l) r. V f. q- G2 v1 _6 a .release = led_dev_release,& ]/ @* g- \2 n; R" n5 @
}
) D, m. V6 a: X% ] n; m& k};
' U- T7 T; }; T7 X8 D5 b% {0 k U# B- T' [. [$ [/ n9 g4 s: q, G) ~
static int __init led_platform_init(void)! V+ S% L' |2 O
{7 _* R8 M9 T6 J5 B1 _/ Z- S
int ret;$ V9 g! V( |' @3 W' i
#if 0
! h! ?% {% q7 |% z, M( R ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
6 a6 Y4 c, `2 a* }" d8 M4 c9 b if (ret)
$ p& L% I) r9 j# G- i- ]# ^ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; {1 w7 J; V; }6 h
"%d\n", ret);8 h) I* |6 A- Q. p8 K5 Y- ^9 `
#endif
! Z" d/ I; u3 P; Q. B6 ? ret = platform_device_register(&da850_evm_tl_leds_device);
# x) j" _8 t: ~ if (ret). i4 v+ z2 @4 b, g: t" A4 N
pr_warning("Could not register som GPIO expander LEDS");3 V) n7 c9 O5 Z
else6 q: @( I m g- n) c8 u
printk(KERN_INFO "LED register sucessful!\n");
4 q. [" S+ U" H2 Q7 x- G. D: v" U; D* z" B
return ret;4 W8 t: _; u# X o0 u `
}/ s( g8 F; x6 c& ]' m
$ y' { E$ g) s3 o& f0 c2 wstatic void __exit led_platform_exit(void)/ m+ ~% n* i7 W4 _
{2 V/ {( K8 U- z1 ^% d
platform_device_unregister(&da850_evm_tl_leds_device);
% ^. c$ L# \2 g, x4 t: u- p, f" E+ W
0 C9 k& d) x3 P printk(KERN_INFO "LED unregister!\n");5 m( Z2 s2 u" J! T* j- k6 m
}
* n1 q- h9 k' Z3 K7 E8 K, p% C' w6 B; t& E4 e
module_init(led_platform_init);1 b$ T' c6 i; N5 G9 q
module_exit(led_platform_exit);
1 x3 ?) e9 J8 d5 Y t) x. \, \' K+ ~
MODULE_DESCRIPTION("Led platform driver");
$ m2 b# ?& m4 k# k4 yMODULE_AUTHOR("Tronlong");
7 N" O/ }& T3 G, R5 EMODULE_LICENSE("GPL");
& |% T7 G& F" O, S/ ?
1 K- w6 k2 E7 @' i6 x1 ~5 ~ |
|