|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- R* i" v5 k* v; N#include <linux/init.h>
$ S# X& r2 e6 {3 {3 [! c2 P#include <linux/module.h>
/ T9 c8 H5 O5 d1 r7 e#include <linux/kernel.h>0 m$ H6 E1 d. b! H9 J* c: O4 ]
#include <linux/types.h>
+ W2 o3 l" n1 y {7 N#include <linux/gpio.h>* Q$ r; V3 I" j
#include <linux/leds.h>
; s$ f/ H4 U* u2 r& f#include <linux/platform_device.h>
' E+ |5 U* d! i/ g' y3 Z% Z1 p5 y, C$ p- Y8 Q3 f; i
#include <asm/mach-types.h>! g' Z5 c1 D- u1 ?0 s# o4 x
#include <asm/mach/arch.h>, u* Q8 U1 R3 o) T: e( V6 }1 k( \
#include <mach/da8xx.h># Y' `1 k: t: _: d2 _: y
#include <mach/mux.h>+ H) @# i# I- g5 t* v9 x5 T
# ]$ h6 q7 b( j7 I5 v#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& f! W8 s. |' [5 r: a$ U+ V
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). b! v# H% u$ z6 Z* I' n
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 r7 F* H+ ?- ^3 |& Q#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)1 l! B# w& ]( B$ R8 W& v
9 ~; h2 A" i- U6 U; o& x0 ^
/* assign the tl som board LED-GPIOs*/, R. Z% U5 O" o- M( a
static const short da850_evm_tl_user_led_pins[] = {" u; P& G" T$ T. C8 J
/* These pins are definition at <mach/mux.h> file */
# E: T! ^, s g6 N' A DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 B3 E+ _, I0 n7 b7 }' z -1( J: X1 H8 q& z0 b6 a
};5 F0 q) k7 j5 K$ N2 a' | U6 Y
: m$ `- i, H/ V& lstatic struct gpio_led da850_evm_tl_leds[] = {
9 z* w7 v; Y1 K& t( g {
" x2 [! b4 X7 ]. k0 D9 ?: h" k3 g* k; ] .active_low = 0,
3 f& x7 I8 g9 c6 r7 V5 G .gpio = DA850_USER_LED0,
. L' A% p+ b S- R .name = "user_led0",. Q- y/ R i7 n; X
.default_trigger = "default-on",
# T0 L$ a+ A9 n1 G* t1 R/ C4 z },
. \( o2 m; L8 s3 ?( ?: a {
2 ^" S: j5 @/ o5 L .active_low = 0,0 e# n/ O; [6 u0 y* i* J! K; D
.gpio = DA850_USER_LED1,
V2 j2 t3 r7 O" k( ?/ A. u .name = "user_led1",
! [/ h% K( Y- C. U) k .default_trigger = "default-on",! w# H1 `, H) a. p( t
},' d4 w( J' C' t M
{9 Y' M% o) G4 D2 f: v
.active_low = 0,
& S, ~6 T9 ^$ a a* J. }' r1 q* V .gpio = DA850_USER_LED2,) F$ [# S1 f% c) Y
.name = "user_led2",
2 Z b3 t; N% D+ ~+ \ .default_trigger = "default-on",
4 w f* T2 Z u& X- m },
9 |* J# q! e7 S, c" D. _ {
: b* c$ W: ?4 p. j .active_low = 0,$ m1 v- C6 l: }1 M- a/ p
.gpio = DA850_USER_LED3,3 v" D. g- b( t) Z6 P
.name = "user_led3",
) F6 d# X: s M" k1 e .default_trigger = "default-on",3 R& ]6 S+ A# b7 c7 e% t
},
0 @( x c) X6 G c% L( D) P4 H}; X" {/ e# O/ M1 c S- h0 Z, d
# Q7 z, s$ R; l9 n6 ?! u
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; d/ W9 } p1 Y3 Y5 G( Y .leds = da850_evm_tl_leds,
. q' F _6 R. f. [8 ^, C3 ?* _ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),# ?8 l* r, B% b6 b* C) P
};
1 P) @$ `5 K* A/ q9 l
2 H+ @/ d* ^9 X: I; y( y) R: }& Kstatic void led_dev_release(struct device *dev)
) B! ^9 H$ N$ a; o{
/ l, M4 Q0 E8 y- _4 d( _) A& x};0 [+ h) n9 u* ?* P
0 @. M) ~% Y# {$ A7 s4 [0 C7 Dstatic struct platform_device da850_evm_tl_leds_device = {
: a, y% f9 h% F: a$ D) a .name = "leds-gpio",
* p+ h: S, {1 I, X+ W& b .id = 1,
* [5 @; A3 S# O6 g2 i" H .dev = { o9 U1 J, _7 I+ b! f8 N: F6 q6 w
.platform_data = &da850_evm_tl_leds_pdata,
8 s, L6 C q4 C7 m% } .release = led_dev_release," u) t) e) Z) O- }$ v* Y6 ?
}. A2 R' I0 F8 i9 B
};/ I2 u, _. @6 k) o8 q Z
) b; @& m& P. H R6 g
static int __init led_platform_init(void)0 L2 ]+ |: e: T! o5 k9 o
{
/ d6 R# Z0 `8 d" b( ?6 p' R int ret;$ K! e) U2 x2 i* X% x T, p
#if 0
Z+ P L9 W3 d2 V' p ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
8 k' w [8 f; p t/ j! G0 U if (ret)- r0 j1 w5 ~5 X
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 |/ [! D# I/ z "%d\n", ret);
0 T7 t* v5 `4 R8 z. S0 t#endif- B7 i, i4 W! M6 f" g5 c2 }, a: c
ret = platform_device_register(&da850_evm_tl_leds_device);2 m. x! k7 ]8 }+ T7 j9 L
if (ret)
' _! ?% B$ O0 H! V# K pr_warning("Could not register som GPIO expander LEDS");+ w8 X5 v7 \2 N& v/ Z5 c, A
else+ F6 \. v# F5 L& I7 `
printk(KERN_INFO "LED register sucessful!\n");4 A+ P) ^3 B* a9 R- S; M ]5 b
; d. a! ]) u' `& r# Q9 [9 K! f
return ret;& ?$ U" S* v Z* m) H
}
. F0 L+ A8 f9 I. I: r# _3 [
d: w# ?1 u v. A Zstatic void __exit led_platform_exit(void): f# w+ h* j/ A
{
" }: [' k6 }. I G' `3 m8 R8 B/ d1 z platform_device_unregister(&da850_evm_tl_leds_device);& V0 a( J1 s. ~6 o" o# {) N) @
3 J; W! }, \2 X printk(KERN_INFO "LED unregister!\n");* G& j2 f, n; i/ F9 G
}
" ~4 ~5 b! a1 H, ?1 J8 K' x7 n' K5 n$ [9 [4 o" U; G
module_init(led_platform_init);
5 j0 W6 u( R: R+ R9 N' Cmodule_exit(led_platform_exit);2 f9 g9 a1 R# _% z7 |6 e# K" D
+ C$ Q! p) K1 G7 UMODULE_DESCRIPTION("Led platform driver");
$ O+ B& a( b' M. Z% }4 N+ lMODULE_AUTHOR("Tronlong");* h3 ^; b5 r" g3 t% W7 R% e6 F
MODULE_LICENSE("GPL");
9 v D; ?) ^& m1 j
6 X* I4 }/ M, H ~ |
|