|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 k* |& x- X( Z9 d#include <linux/init.h>3 P: o: C$ x7 G+ H2 M1 _3 X
#include <linux/module.h>' y3 E" C4 q# e- v& ~ m% P
#include <linux/kernel.h>2 Z w* B2 S" y6 n" ?; C! ]3 C' X
#include <linux/types.h>5 `; l3 F$ n% }/ j
#include <linux/gpio.h>
8 D. l1 \" Q# }#include <linux/leds.h>. j( h3 B8 l4 x6 a% ~3 }) U+ o
#include <linux/platform_device.h>
* B. x* R$ ^6 g6 q; ?1 Y
2 [0 h+ E) O& C0 I1 |4 r. ^0 t#include <asm/mach-types.h>- m" d4 O& V* h
#include <asm/mach/arch.h>
2 ^0 I, _) ^0 s+ K9 _0 \; H {#include <mach/da8xx.h>
& q: Q1 y4 v# h1 x1 v#include <mach/mux.h>
$ u- O' M. y/ ~# p3 ~ s) a0 j
+ ~# \; s2 Q& Q#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
( y9 X; B# \' P#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" M! Q" |" n+ Z% B6 V( T#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 @6 [) Y' X% y% B
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 M0 D. Z: l- r$ N) b! f: e' s1 F2 a! V
/* assign the tl som board LED-GPIOs*/, R+ s9 @$ |# W2 W1 a$ w, a
static const short da850_evm_tl_user_led_pins[] = {
9 O/ a2 g; e" @$ g /* These pins are definition at <mach/mux.h> file */8 G4 J. Y+ ^: n1 I9 {4 m
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,6 k8 x3 _# b9 W8 X, E
-1
" m) ]1 D* P3 T6 T9 s};
6 K, G* G5 J# y$ v4 Y* U0 \3 d3 L2 [
static struct gpio_led da850_evm_tl_leds[] = {0 @& U1 ]$ I9 @& ~" C
{
4 s8 z- ]* ?7 j, H% W/ C0 u% A .active_low = 0,; A1 q& \+ z" Z
.gpio = DA850_USER_LED0,
2 k/ A) q$ F; A# l" m I0 _; _ .name = "user_led0",
6 v% `2 r( @3 ~, R5 ?' ~ .default_trigger = "default-on",
2 t+ d2 ~/ l! k( l- r },) f \: x- N. y( n8 N4 p# r; i
{
, e6 T/ T% D; j+ u$ z .active_low = 0,( l% s! { K1 B9 _- y3 a
.gpio = DA850_USER_LED1,
! ~# t2 {0 W6 [+ l2 w2 B0 m% `# _ .name = "user_led1",/ X* t6 ?7 w9 d( i" i4 z2 }; @& S/ `# `
.default_trigger = "default-on",
; u- z1 L \& n$ s' w; K j },% X8 O$ ?/ n2 v1 `& i. c; v9 V" q
{% U5 n! m' Q! D+ ^1 F
.active_low = 0,
9 f) N: K; B. F8 ]& T# ? .gpio = DA850_USER_LED2,9 [+ H r y) l! s; H
.name = "user_led2",; Z+ _7 C" F/ u! C8 M+ z3 k& c
.default_trigger = "default-on",
5 T% R7 t' }) B J },
' A3 _% p8 O& u7 T {
; t, K Y" J. B .active_low = 0,- q! `% O z8 X! n: D8 |( l
.gpio = DA850_USER_LED3,
" c2 ]" |: M+ K# H .name = "user_led3",1 R5 i4 y# _# o. g* P+ V4 r
.default_trigger = "default-on",5 o, P2 E5 K. b4 W6 H) L
},9 G7 }/ c2 L, G
};7 t# z, k/ x0 g
- X% k8 D- W; q" ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {4 x0 t9 p& T. c0 ^+ o2 N
.leds = da850_evm_tl_leds,
0 f4 N1 ]" @5 b0 k/ l" h$ i' \ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ u* X: Q+ a/ B) E};
$ |0 ?. {' _6 Y/ A+ S$ U9 h
y3 v, L6 K2 c) R; f7 n# Gstatic void led_dev_release(struct device *dev); X6 T! z. g S# i h
{
. ], C7 b3 v. Q};
% M. [, H3 M$ }: F; F4 p
6 l/ K1 U+ H8 Y6 U6 ^4 p( Kstatic struct platform_device da850_evm_tl_leds_device = {4 f+ Y! `* \- {1 E. w9 c# a6 A
.name = "leds-gpio",) h x% J: V0 t* q6 h# D
.id = 1,
6 F1 H0 I' g, R1 [! ^ .dev = {' S- O0 _, s( `& B
.platform_data = &da850_evm_tl_leds_pdata,) ?. P; a% \3 F1 p/ a9 E! F
.release = led_dev_release,' b" \) S. S/ D7 Q5 f, f7 q
}! d, w s; P% t
}; o( S6 @# D$ E8 P2 }7 ?
' P1 x, R0 W0 x0 f
static int __init led_platform_init(void)
. R5 I$ @6 `2 y6 V+ m2 Q{. C# N6 k# D% H8 Y6 {+ v T
int ret;
& Z9 s( k6 e' S" ~+ {* I, a#if 0
' L$ l2 v) J+ t0 s3 P: G: q! D! K8 U ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; I' |* x+ j+ c R/ O" b if (ret)
5 ], j/ D ?/ q3 {2 g$ _ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ ?8 r- N) K: R% O "%d\n", ret);
# i) E) i, Y4 @# @* X5 E& n#endif
$ c" F* p" }1 I3 N ret = platform_device_register(&da850_evm_tl_leds_device);
9 a% n+ I7 u% k2 K2 s8 M# o6 i if (ret)
f, ]" R% A7 v3 j- S/ a pr_warning("Could not register som GPIO expander LEDS");, }! v4 H" C; }! W
else
# ~) o# I- L6 g q7 K4 ? printk(KERN_INFO "LED register sucessful!\n");- H2 D' t& h6 r+ Q4 I1 V( }( s& t
" B% w1 ]0 @& o
return ret;6 x9 L: o0 ^$ A/ K
}% S/ c I u- U6 A Y9 _" B! Z
5 T, C- A8 ?/ b2 r5 P4 Mstatic void __exit led_platform_exit(void)* X9 `4 {" n$ D5 E$ k: } ^5 I
{
9 L, t1 l8 I5 j: i! f3 N platform_device_unregister(&da850_evm_tl_leds_device);: p3 H2 w+ x; a5 F5 K; z9 h3 E
2 H- `4 H2 s9 @- x) k. W4 g printk(KERN_INFO "LED unregister!\n");+ `# ^' f; E7 i* L6 A4 d# W
}
9 Q. q% R0 u2 W" j2 a# g, _% Y/ q) C: h9 K6 T0 V
module_init(led_platform_init);
8 ]9 ?1 a* g9 a6 B$ L$ T6 g! ^- Lmodule_exit(led_platform_exit);. F1 t) I' A: P: l1 v
2 }6 F% e* p, M1 MMODULE_DESCRIPTION("Led platform driver");& c# o# k, A2 t. [6 O
MODULE_AUTHOR("Tronlong");5 ?* u( ~7 V: r3 v
MODULE_LICENSE("GPL");
/ o/ q3 E) x, g3 O
7 x# G4 B2 R) j |
|