|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
I4 i9 |& u& L* X7 T: _8 j |#include <linux/init.h>3 [5 N& w6 O* l- R+ b. e+ q1 J4 D/ o
#include <linux/module.h>
# m( V2 x' k) ?- V#include <linux/kernel.h>
3 B& d6 F2 l. |) g#include <linux/types.h>
% ?; O7 o% L$ g+ `* {0 y% R#include <linux/gpio.h>
; X, k- J2 Z, R: B#include <linux/leds.h>
`% H H+ ~7 T L- W5 f#include <linux/platform_device.h>
5 H# x' `4 J8 g3 S- e! _6 ?% |4 C% e& k* q8 Z6 m. g. }# W
#include <asm/mach-types.h>; c% i2 g+ r3 n n3 [" g' e
#include <asm/mach/arch.h>
" p8 W) B/ b" h/ p! i9 w#include <mach/da8xx.h>
6 r) S0 j* U3 N! L' ]#include <mach/mux.h>, ^2 y6 [, g3 ^$ a1 h
$ n2 C$ @' F- v) B
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 y0 T2 R* M l' h' _+ W#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: P2 r+ P. I1 {/ W* P5 w#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)+ r5 l$ G1 `. T5 B. x* Y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
7 ?1 ~) P5 O1 ?0 _7 c9 ~8 h' E- a" q) x A+ M* Y- c
/* assign the tl som board LED-GPIOs*// N' s! j" h j0 I
static const short da850_evm_tl_user_led_pins[] = {1 m) u: P$ r4 t& R8 [
/* These pins are definition at <mach/mux.h> file */
/ [) q; c; N. ]7 }3 N/ E DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 O: Z* ?! s, u -1
+ m% V- [/ O* f9 D. f; q9 ~- Y. b};
! o+ ?! m5 J8 G5 ?
5 A# i- U0 r) r- l' p- e6 a8 Y3 xstatic struct gpio_led da850_evm_tl_leds[] = {) Q3 M: o+ u& x) P2 F3 i
{! l# p" G" @/ z6 s3 w6 M
.active_low = 0,
, J. G/ @! W8 e) L; z$ o" m .gpio = DA850_USER_LED0,
$ d/ V( h, Q7 i .name = "user_led0",
: ?$ P/ C, n, b) c3 o2 ~ .default_trigger = "default-on",
& J/ Y! m. ]# q9 D/ R },# f2 m. r1 r: T) U' F4 X) @/ Y0 B
{
5 s+ }0 J6 [( X' A$ m' S$ Q X .active_low = 0," D3 _, L% @! Y* |6 ]' C* G9 D
.gpio = DA850_USER_LED1,6 Y" q# L0 G8 l' q: `9 v. @
.name = "user_led1"," H* |3 C. e# U* k
.default_trigger = "default-on",
/ U v$ h# W2 l1 r5 T' e" _/ ~ },
+ V+ J B& @0 M {
3 j. J" E3 e( A3 K4 q" P$ W" x .active_low = 0,
, I4 z3 f) C; C/ [: e1 i) t: @' X .gpio = DA850_USER_LED2,6 E. o: i% p4 ~& y, D
.name = "user_led2",2 _# M* u: O' e) v3 k
.default_trigger = "default-on",& w7 B) s1 r% p( s8 ]9 I) m% R
},. \$ a6 \: r7 u1 P% W! _+ u' ]
{3 n& c/ I; E2 {
.active_low = 0,- S0 W9 F, `- L" P x, r3 `& U
.gpio = DA850_USER_LED3,
( W/ K! P* h& b9 c7 B4 ] .name = "user_led3",9 b: b. Z/ y3 z$ {5 u4 t# i
.default_trigger = "default-on",
( _% F, N9 l8 s+ f },) j8 b2 o& T& I2 e" V2 X
};
" l$ J$ A8 B9 s0 q& i/ ~+ [. u e* j! e$ r7 c
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 A ^, E, b7 E8 [) e( j
.leds = da850_evm_tl_leds,+ c0 a/ c4 d$ r4 X* u+ G, H/ n
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),( Z7 x+ u2 v2 e! x* E
};
: U; l! S, S, u n5 `* R
& I v9 Q1 M+ s$ Q- U- o4 u5 @static void led_dev_release(struct device *dev)
+ A+ O* A& }8 ~{
7 `- P# f4 B4 l# {9 F};. a* `/ g6 O( _2 I- D3 m
0 I: s8 z: L7 R# ~. U" {5 Ustatic struct platform_device da850_evm_tl_leds_device = {
& X& x: f2 i" D7 [0 T' o .name = "leds-gpio",
3 m+ Q: n0 I* O9 }" E: N .id = 1,/ @$ a* W9 U7 b; S- t3 e
.dev = {4 L; `, w3 e3 q3 ?4 \
.platform_data = &da850_evm_tl_leds_pdata,
7 P( N( v: @4 w; t! Q9 N# V .release = led_dev_release,
7 b9 T7 y2 w8 @9 j8 d5 U }
4 M5 `1 ^! j. ]) I' k! O/ f" U};
* l3 f& y3 @0 \+ e, }. C1 }& y& a+ R3 g3 ]+ ]% K0 ?/ w3 T
static int __init led_platform_init(void)
% K0 w0 ^) z9 b8 _{2 I& W$ O5 x/ Q% ?8 n
int ret;1 g$ U$ g0 F3 E$ g4 E
#if 0* N3 ^7 U! Z: y# J) \# k, h v; z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, z5 Q! {- e2 b: ^+ D if (ret)1 ^1 }1 Y, N- W4 g) s! C1 z2 o
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% J4 ?9 L! W4 j "%d\n", ret);
4 b/ Z0 f" z2 w7 s0 P#endif
8 m# U3 I9 w& _# j* C) M- L ret = platform_device_register(&da850_evm_tl_leds_device);
+ e2 G( {" p4 A if (ret)
/ T: W7 U% P \1 v& `: D# c \ pr_warning("Could not register som GPIO expander LEDS");
3 P$ B; R- @( L5 d1 [ else
! }% x& |$ J# y' Q, b' ] printk(KERN_INFO "LED register sucessful!\n");* S* v. H6 C6 s5 R
0 i. N W# M6 e. Z; n; `( U
return ret;
" U1 X0 M4 U1 f) j! P- O}) A, d- x" l) a
t: d- c' Q, n/ w8 W3 N. g
static void __exit led_platform_exit(void)4 n+ N7 C% H" O" ^ \. O+ R6 P2 O
{/ T$ n& O4 M" y8 \
platform_device_unregister(&da850_evm_tl_leds_device);5 P& d. R E2 e3 Q; ]9 D: @! S: x, z
J: d& l' R- ~. \8 R, q printk(KERN_INFO "LED unregister!\n");
" p' K/ s5 I: F}: A. C# Y' o { q) c( c
: N7 C, u0 _, l3 x# n
module_init(led_platform_init);
) T8 \2 W' q1 E3 a/ C4 ~. Gmodule_exit(led_platform_exit);
u5 r/ ~3 c6 J& E/ A4 \. w5 T a
MODULE_DESCRIPTION("Led platform driver");5 z7 b! _4 ^6 ^. _; _; Y' l/ _
MODULE_AUTHOR("Tronlong");. z& N6 g) s; K) R. z5 {/ t' W
MODULE_LICENSE("GPL");
( K' G( h4 O0 j6 B: U
0 F0 j+ n1 B# q0 [# C/ G |
|