|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. x" [1 K% k! q' h' t#include <linux/init.h>' Q, M" `% [# R5 C) w
#include <linux/module.h>: }: Y' ~0 _- O* {1 G& _ ?( X
#include <linux/kernel.h>+ |( y r0 |5 E8 S
#include <linux/types.h>/ @" a1 U- t8 W
#include <linux/gpio.h>
1 q( C V- P6 D. p- Q7 |8 \#include <linux/leds.h>
7 T9 R/ I3 D; |- h#include <linux/platform_device.h>
; G. c! F3 U/ X8 u
/ @* G p- M# F; @( [2 Q#include <asm/mach-types.h>
3 Z8 ~, Q" j0 R2 f$ y% J#include <asm/mach/arch.h>4 y8 N. U3 w: M$ g8 G; l3 @
#include <mach/da8xx.h>2 x% ~' n6 B9 ?9 w6 ?
#include <mach/mux.h>" B1 [0 G. `8 L( [; D5 I
7 p5 K' C) B0 W2 @4 ^#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ I' e: X8 s8 ]8 j- r- p n8 x
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ r: m; ]+ h" G. `, a#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! }' W2 h9 i% a8 q! Y, p0 e#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 d+ h8 ^ ~& A
% B) g2 u d c+ M
/* assign the tl som board LED-GPIOs*/
" }/ G% y9 E5 i5 tstatic const short da850_evm_tl_user_led_pins[] = {4 N) g3 i- D# l
/* These pins are definition at <mach/mux.h> file */4 n8 b, n- U+ g5 {" t2 Y
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% ]' q* T& s# ]2 _- w8 H
-1* w/ N$ p* F& y$ C, p7 C# a/ m
};
# d$ g6 ^# M& U/ `6 l! |7 F& e0 R+ O* q& t
static struct gpio_led da850_evm_tl_leds[] = {
' H9 f8 `5 u. H& O! _$ T$ o {9 N$ L7 u, i: ^: Z1 q d) k
.active_low = 0,
3 z7 A% q) H: T0 w" H! p .gpio = DA850_USER_LED0,
& H' O6 g& ?/ p8 [% P) r .name = "user_led0",
5 b6 M" U4 t2 _/ P) w .default_trigger = "default-on",- V Z% m# X( Z3 P" K
},
9 R( O% p, @3 ^- s! w {' ~" x9 j$ N _/ d; j
.active_low = 0,/ m4 k/ p( q) U* l9 n5 {
.gpio = DA850_USER_LED1,
" L% J" M! O+ e) R2 X .name = "user_led1",
' I1 U) m. k' b$ ~: k: C .default_trigger = "default-on",
2 p5 I" \1 l& v6 T' z },
9 j/ w# d w8 G2 A; \( G* } {
' G7 F6 _# t* l5 _! Q0 X2 u: j .active_low = 0,
$ ^' u+ q- X; d5 m3 V. `3 ~; Z' Q .gpio = DA850_USER_LED2,
' p. G! S9 q5 ~4 i .name = "user_led2",
8 j. c0 R8 W: g, H G .default_trigger = "default-on",
* a9 m3 R2 v7 h; j/ r5 G },
# ]; d3 B/ s4 _# p4 X* m {
" b# {2 k( L! c' |) U# M* u8 I6 v .active_low = 0,
/ m7 s/ w! m0 U3 i6 ]0 Q Z .gpio = DA850_USER_LED3,! V, B; F' j- M' M* r. a/ P/ {8 M" ~
.name = "user_led3",
( ]1 _2 Y8 `& w% j) M .default_trigger = "default-on",
4 X7 f& T5 X; C& u* t9 X },4 B- Q) H) O* v/ ]0 s8 z B
};
' [4 s' j( {8 N2 I Z, z8 q$ ~" J. N
* M! c5 S( @. t" g& W" {static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 s; ~7 ?# d D; @2 p. b
.leds = da850_evm_tl_leds,3 T ^, H2 [% q7 G& w
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),7 ~ V$ C g) r9 b' s4 Z( p
};
- a" J# ?4 R; K5 F1 Q1 s
. d: _/ Y( {$ A0 E4 Astatic void led_dev_release(struct device *dev)
2 h& A9 @( p- Y! w7 x/ O J+ T{
9 f) D2 i/ v+ }/ j# h$ {};0 T7 O0 F- \& }; M
# V. E) _2 a; \: V
static struct platform_device da850_evm_tl_leds_device = {
: b0 A5 {3 G" t& R+ S' G( u .name = "leds-gpio",
# F. t, h! q! \! ~% T .id = 1,0 k0 c6 @6 w t s/ x# X' Y/ @
.dev = {. o; o. q( q4 M f4 j
.platform_data = &da850_evm_tl_leds_pdata,
; i3 N2 m4 i. v .release = led_dev_release,+ S. v1 [: u4 F c
}! O- Y; e# V) O9 z. ?
};
8 S. h* h" B' s% |
. P$ F* T8 h2 sstatic int __init led_platform_init(void)
) A- f9 v2 G" h4 m% P1 [{
2 L# ]; J/ v8 L0 i- u int ret;6 G) J$ k# m3 b( N
#if 0
" ~- x0 }6 \- g% k- q; P6 C ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
6 {8 b( x6 M- _& J5 `, w if (ret)
; V+ f" Y5 H- t/ U/ R4 v' h+ f pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 d, ]7 M& e# c" H/ Y1 C
"%d\n", ret);5 P4 p+ h% }, ^
#endif1 V4 v- a& L& A; ~& D
ret = platform_device_register(&da850_evm_tl_leds_device);
5 G. n$ M2 i* D& t+ T+ m; Y if (ret)/ S- m$ a# p: s( p' I$ u8 D
pr_warning("Could not register som GPIO expander LEDS");
* O3 P& v: [$ f$ a1 u. G% Z' g0 P else
7 H' C0 `2 t6 L* q4 [! G Q printk(KERN_INFO "LED register sucessful!\n");; `1 k. m# q" U
) [4 J2 P6 @ i9 u return ret;
. v6 g1 l4 Y0 B; n9 N% Z0 x. u! r8 _}% S& l* U6 D3 Z' T1 O
' O0 Q$ l2 J6 w6 i/ `2 n; D2 z! B
static void __exit led_platform_exit(void)
% ] n5 n3 g+ \. |; T/ C+ T{, h [- Z1 b0 l+ A2 N
platform_device_unregister(&da850_evm_tl_leds_device);& O+ x1 u+ s+ g! Q% b5 j
9 E9 r6 ~& K* K% }& S u4 N
printk(KERN_INFO "LED unregister!\n");9 R, p5 j$ o2 L2 Z8 W2 _
}& e' m4 F' ]# W- l1 x1 \8 u
, H G. P+ x) R: p' o+ \. M
module_init(led_platform_init);
+ \) {& S: @% f$ U3 s: R3 f) Kmodule_exit(led_platform_exit);
6 }0 X2 ?9 q) j- S8 X) g) E3 u$ z% }0 ^) k( }) @7 w/ E
MODULE_DESCRIPTION("Led platform driver");. a0 t3 w, L6 C0 O0 G
MODULE_AUTHOR("Tronlong");- e$ {. {% B1 H: o
MODULE_LICENSE("GPL");! Y5 g7 {! }* V) C" w1 k( i$ f3 C
: Y, C* e% U* l( x0 r' Q3 f# y3 K! w
|
|