|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 e( F$ b$ S# @1 y9 D+ p' ]" Y
#include <linux/init.h>6 F6 ]1 @2 [2 }. ?
#include <linux/module.h>
* ~7 v( C7 n% _! [, g#include <linux/kernel.h>1 ?$ f' s; W. a# e) }$ {
#include <linux/types.h>7 ?9 ~( F2 d! |, [9 P" Y
#include <linux/gpio.h>
6 n2 A$ s- k+ c) Q [9 j#include <linux/leds.h>; w% c7 G0 N: ~1 R9 v5 k3 {" i0 \( l
#include <linux/platform_device.h>* A' Q8 O t4 O; `
4 U. q3 ^, B" o% x1 O' R
#include <asm/mach-types.h>
( n+ g9 J7 u( i- H#include <asm/mach/arch.h>
4 _/ z3 e1 S4 B/ q#include <mach/da8xx.h>. l1 T$ o7 K! F# X3 g. u
#include <mach/mux.h>
, X: _% i f( e" I+ N |/ y. |/ f0 V9 q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) e3 Z9 D) Q. ^5 p, ]5 d' m5 h#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 b+ n9 f# t6 j' l( M#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ k8 F4 @9 ~$ E8 v
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ g7 ~& R, [ \4 @1 T' W4 @
% V, p+ i1 x$ s6 ]/* assign the tl som board LED-GPIOs*/0 V' Z; H6 w, D0 [* ^! W% s% S
static const short da850_evm_tl_user_led_pins[] = {. ~+ G- A" |! L- N0 w: y# s' Q
/* These pins are definition at <mach/mux.h> file */2 f7 H: J- \% L
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' l( _: Q- N H+ b+ w
-1& T. l: S$ |" ?0 D% D% ^3 p2 \) V
};
! w6 |5 t, r; q# u4 v. F8 i( x) _, \. Q6 s
static struct gpio_led da850_evm_tl_leds[] = {- [# `$ W5 v% g3 |1 w
{ M- t1 g# ^, r( y f
.active_low = 0,
# o( r8 y: u! R# l) N( P" @ .gpio = DA850_USER_LED0,' R6 ^' I+ Z9 b( C" i- F
.name = "user_led0",) w, N! U1 q- o- G
.default_trigger = "default-on",
1 b& [7 {& I) T5 T' h/ ^ },
( C6 H& Q0 m6 u6 t+ n {
9 K- H: R9 W+ W. w+ a' o .active_low = 0,
B- V0 O- J' s U# s .gpio = DA850_USER_LED1,
* v! M4 C5 c/ B7 o. R% `6 h .name = "user_led1",
4 L* C" x; E; B8 N) n. q .default_trigger = "default-on",) ^+ U4 x* z: M& [; `( h, R
},
/ R k, M& Q, c4 E {
6 ]6 \( q v' c+ T+ H v .active_low = 0,& A' T, R. c+ }$ O7 ~5 _/ j
.gpio = DA850_USER_LED2,
: h4 J2 O" c# T f1 Z! n! m .name = "user_led2",5 X& u$ T& F. H, K3 x. s: {, D) ?/ X
.default_trigger = "default-on",
4 W% S D- ~5 ~# {0 z, q6 f },% f, Q: J6 G( k) p$ u4 Y0 Q
{( x0 L7 S n4 Y0 x/ |3 t) U- e
.active_low = 0,6 k$ p8 r& v& |) f9 W
.gpio = DA850_USER_LED3,# R q- s0 R2 H9 z* X
.name = "user_led3",
8 G5 H& G( x6 o( d$ K; P .default_trigger = "default-on",2 a2 V% w$ _. A4 d( K
},& {2 w" m2 }/ J
};2 e, q4 ?& W. \: Z! f# y
7 D7 f; {' L9 O0 _% W
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& d# z7 n5 L3 D+ Y4 I9 j ?: a
.leds = da850_evm_tl_leds,5 z) L0 Q9 {3 u) S) z6 s
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ r0 a" P* N7 A$ w# r1 J3 H2 Y5 V
};' f7 p* i/ B' G
$ V, w: O/ c) Q# D" q3 V
static void led_dev_release(struct device *dev)
- I; j' s# L5 S" }. L& G{
' Q; }6 X. n: X};6 {# a% @( l+ P1 o* \8 L
2 b) r. ?& ~7 m( L" a8 I8 t
static struct platform_device da850_evm_tl_leds_device = {
3 Z. q( m; o* `+ o, T .name = "leds-gpio",9 ^2 N [6 W2 O) W) P" x& H
.id = 1,
$ r; s# \5 Q( w; t8 V .dev = {7 j4 c+ j2 [/ d4 @- K
.platform_data = &da850_evm_tl_leds_pdata,
) ~; ^, X0 x5 w$ }+ V6 x .release = led_dev_release,
0 F1 L6 r* c, L- f" g3 b2 E s: a- Y }4 G# v& A$ U* n! Y8 j
}; R4 L/ |* p5 C4 w, r$ r1 P/ E! K
: \6 U1 `! B) [
static int __init led_platform_init(void)
) O: f4 ]! y/ m% X" u% O{
* p* k( j6 X1 P+ g int ret;1 ?6 g+ D( z2 T5 U& ^4 ^
#if 0' C- m% d. ]6 z! {+ [9 N( M0 ]
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);+ q# [' M% ]. F- y4 _) _5 b: Z, A k
if (ret)$ B/ F4 _$ n4 _) v6 g
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 K5 m y( G# l( D2 U
"%d\n", ret);
5 `4 ~8 E Y( u( S+ r+ O#endif
- D! r* I% s1 y, M: \ ret = platform_device_register(&da850_evm_tl_leds_device);
6 |9 q) ?1 ]" a1 a% z+ a: O if (ret)8 e W4 k2 x& N$ i* Z$ F
pr_warning("Could not register som GPIO expander LEDS");$ y. ?' W" ^6 X: ?6 {" D
else
2 L$ o- w1 g0 G7 S/ K% M7 M) | printk(KERN_INFO "LED register sucessful!\n");
4 [ [+ |5 U% V6 X$ E8 l# R
! y* e- i" s$ U+ k return ret;( s! w; @! d3 }# f
}
3 y, W) A0 G& i6 a) A0 I5 W! k' P# E
static void __exit led_platform_exit(void)
% c' R! \ J; |( @5 r4 _{
" a3 x3 r! m/ i; O platform_device_unregister(&da850_evm_tl_leds_device);
; ?/ ?7 ^8 I$ J& I
& _; }3 q- _3 V% B printk(KERN_INFO "LED unregister!\n");
8 o: U! _9 ^, O1 Z}
5 q C( c3 E4 n' z0 L, d2 F
. u4 |8 v9 |; g5 S) j$ C5 nmodule_init(led_platform_init);$ N. ^- v+ x/ A# B0 Y! U i
module_exit(led_platform_exit);2 T4 ~% i# h6 l4 x: N& W+ p
' j- O/ }" ^, c* A( C1 }MODULE_DESCRIPTION("Led platform driver");
1 W' G/ r& D6 ?+ u" {) q$ JMODULE_AUTHOR("Tronlong");9 E0 p& Y+ [9 M/ l" P; T
MODULE_LICENSE("GPL");6 g: V0 C8 [7 a/ p* K( t
O; O; I2 K" j3 s& t+ \ |
|