|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
: w) }+ G1 D4 k; u+ q#include <linux/init.h>
5 ]" e* V5 d0 u: F#include <linux/module.h>
' V. g$ x, q5 f! O#include <linux/kernel.h>: }9 @- b/ S5 F8 Y# s
#include <linux/types.h>
- S9 [. p! M. f2 F. o#include <linux/gpio.h>
2 J; f5 F. l' ?#include <linux/leds.h>3 t. T( e- B" N$ Q K3 S( j5 `, l
#include <linux/platform_device.h>
3 ^' c2 R4 B, H: d B4 |, M2 m# l: b
#include <asm/mach-types.h>, N& R# p: m+ d- r" \. y- D
#include <asm/mach/arch.h>/ N8 B+ j: I2 d" w
#include <mach/da8xx.h>
# U: V2 ^, s/ `% V4 V- l6 N#include <mach/mux.h>
# i: s2 F& P& r% |) T
% S# {' x! e M3 w8 d+ q#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) S+ f* p$ \! v. W8 b. D9 m7 z) ]0 |
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); h4 C" t4 C! \
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 q8 m1 N+ l# X6 v @% A#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ d, {1 }/ s# b$ K3 g h
( U% D5 @: R0 m- { W3 s
/* assign the tl som board LED-GPIOs*/- p3 T( ~' a c- c
static const short da850_evm_tl_user_led_pins[] = {
) ^9 r3 o& U' x6 A( v. X /* These pins are definition at <mach/mux.h> file */
/ W8 A( E9 A5 W Y1 V! F, r6 x DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; Q$ I6 u& b, U0 ~
-1' }1 q' g7 ]& W* x$ V7 b! x
};
% B" z. c* f* `; k4 I h7 q& y0 G; T
static struct gpio_led da850_evm_tl_leds[] = {
0 Z2 C' ~. I$ \/ ^% d, G9 g {
' j1 [* D; v4 s* p+ q/ I4 | .active_low = 0,3 S$ X' q5 r+ e8 ?' `) Z
.gpio = DA850_USER_LED0,
. w' {7 A9 }. m$ `/ {' a, ^ .name = "user_led0"," ?/ ]* D$ O# w( C0 N
.default_trigger = "default-on",& u& ]' h* t! B9 M
},
5 ] _$ M( i$ W7 l6 N1 [4 w# M: c {. E$ S3 v# D4 g: C
.active_low = 0, N* _4 n: q& E. u' ?
.gpio = DA850_USER_LED1,* Q/ R i# \5 c' m* L" _: R9 i! F
.name = "user_led1",
" p. O; |+ e |; F7 S .default_trigger = "default-on",
1 c* Y5 A2 H+ N! `4 O },$ K4 F8 x: x; m/ j" p
{
- r) E0 P( J L G .active_low = 0,
" ?5 z q( X2 V, r6 f: C .gpio = DA850_USER_LED2,
6 \: C1 ?( a! X* }1 \9 Q1 r .name = "user_led2",
+ G1 p/ c L: k. k. D7 B$ j .default_trigger = "default-on",
9 c" `" {/ R3 [2 w6 S },
* D ^. C+ V5 d$ r; u {% R+ w6 Q- o, ?& g5 Z8 u
.active_low = 0,- \! t8 C8 }$ ^, s
.gpio = DA850_USER_LED3,
6 U5 |1 A& G: }, V6 }6 [ .name = "user_led3"," o% ?1 [+ }! y* Z
.default_trigger = "default-on"," m& d2 S5 p: v4 j7 z
},
* C5 x' `( @. R/ {4 \};# g0 ?. x- H" z
( i7 ^9 a7 x# d/ q _3 R
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {! c0 s- Q$ O7 o4 j! Z% Y' j5 x" U
.leds = da850_evm_tl_leds, t f: {- E7 \
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" U" h: P: a" B: E( ^! ^' c: H};( A3 _$ t, t0 R
* q3 i! ]' s' u. V
static void led_dev_release(struct device *dev)
- _1 g9 ?- h1 M/ o ~$ K4 J3 M{) A: w: j" w3 N4 v0 e; Y: g+ u
};
" H# j+ c4 v8 i Y3 E; X3 W; D2 W+ o5 j% Z& j
static struct platform_device da850_evm_tl_leds_device = {7 H0 z6 H: B; }
.name = "leds-gpio",6 X6 _, y' v1 G/ ]. B
.id = 1,
, J1 K1 \7 g6 w" l .dev = {
: I# [5 A( G; a .platform_data = &da850_evm_tl_leds_pdata,! ?, u# }0 F: p& c) j y! b0 D$ }
.release = led_dev_release,
$ [1 D- u+ c) ]5 I% ^6 S }, R' B n" s" O, f, W
};
# J- E: } l; }& I ?$ M* m5 u3 E" S( T
static int __init led_platform_init(void)
4 H- v8 P' y$ z' A$ w& c{
5 c& X8 V* M0 @# Y' a int ret;/ v; a F+ k0 ^: P' n
#if 0
! k' q/ e8 \2 W7 X% T' ? ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 e3 D- V; X6 b# G6 \, N7 Y
if (ret)
1 h, c1 g; V8 y pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
3 R3 T" b+ A) [+ P3 q+ g "%d\n", ret);& w$ I# F% @, T4 M
#endif. \ @# I" G8 V( N
ret = platform_device_register(&da850_evm_tl_leds_device);8 N1 j. J. F& @; @. K' j6 x" ^# H! p$ h
if (ret)1 `- t0 n4 f! o/ ?" @: b- w
pr_warning("Could not register som GPIO expander LEDS");- q; a3 R" ] x' I4 `+ b' D
else8 A) x: y/ b% Q# ]
printk(KERN_INFO "LED register sucessful!\n");/ b+ Z8 t/ j- [9 O5 k
" X% u/ Q$ N$ Y$ f8 O) T" a return ret;1 q3 A5 Y( y. ~5 x
}
( a! H9 R; v# Q5 `! q$ Z3 _$ v
3 d2 I* h. l" _# } `static void __exit led_platform_exit(void)" g" ]; h( m: M. p* P8 |
{' _3 q* u# d8 W) b$ l
platform_device_unregister(&da850_evm_tl_leds_device);
1 p8 A4 h, Y& c! D, w
; r" B8 R* Q/ y1 }1 R: e7 M P9 q5 ? printk(KERN_INFO "LED unregister!\n");# K0 l( ]5 F0 f! \* H
}
& w& Q+ p6 R1 R! e( }
1 w8 L5 Q$ j7 ^7 bmodule_init(led_platform_init);
! ?& C- d4 A; P- H) Lmodule_exit(led_platform_exit);5 d' @/ Q6 G' M: A( K! m
& F) z1 b2 m, s6 P
MODULE_DESCRIPTION("Led platform driver");. h1 u1 |. x8 Z3 n
MODULE_AUTHOR("Tronlong");' w2 w3 ]# f) L5 n
MODULE_LICENSE("GPL");
7 i* R6 c6 I$ [
! `, R& o* |9 |) U4 P. L5 w+ d |
|