|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 H& d% V {/ c5 b! H#include <linux/init.h>
( `3 B7 k: |- R: F#include <linux/module.h>
2 R8 [7 H/ w' n5 e1 T#include <linux/kernel.h>
) r+ F( x# d) H8 `* |" _, r% i#include <linux/types.h>) v' J6 b8 L- g* @( d: v
#include <linux/gpio.h>( Y. e* \* ]1 D/ n+ [
#include <linux/leds.h>* W. U$ t' p* [8 I
#include <linux/platform_device.h>
) v+ U/ B( v0 e, T
, i' H/ U7 E; O6 R#include <asm/mach-types.h>- }! P% ^2 _2 s
#include <asm/mach/arch.h>; b |# q/ k1 S' q# G' g% Q, x U0 P
#include <mach/da8xx.h>
* |1 d5 V. [/ G2 {7 A#include <mach/mux.h>+ l" \! n% L7 H4 K# ]' _
* X; u+ q$ i+ t" y( d! u4 ?#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& `2 s: y; |- c/ X. u: ^ D/ S+ \
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 h& D- y7 F* O- b; C# \#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 @+ M) J8 g$ T7 H- j
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ D- q* |( g2 P* s0 r! u
+ M7 y+ B1 B- `( \/* assign the tl som board LED-GPIOs*/' @$ C6 s% Y5 z
static const short da850_evm_tl_user_led_pins[] = {8 H3 p6 y- ~9 G; P' e3 a0 J/ m
/* These pins are definition at <mach/mux.h> file */
7 F3 `5 |' w6 H DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 f9 h) c' Z6 d! w- \' u/ s7 K3 G -1
* L- Z% y* _: S1 S1 j4 A3 d/ b1 A- m};) B9 z4 P3 n4 D9 M5 R, _: b
7 G2 {$ k5 A- L2 {- r( _+ v+ O
static struct gpio_led da850_evm_tl_leds[] = {
3 ~. y: x: B* n# \5 B {' c, x) ?6 k" e# {' K
.active_low = 0,! B2 _ \# e% A- h" \% e2 s/ H8 \
.gpio = DA850_USER_LED0, d# q" O: t4 G1 k: G% y6 N ]
.name = "user_led0",8 B( s P( G" T5 h( p3 U9 H
.default_trigger = "default-on",
$ Q3 e" I/ H# c7 ]0 \/ @) X% w6 u },
1 |, a( F9 A ^' F$ O! z {
+ j: f9 J0 v5 b$ B ]# u& l .active_low = 0,
# r8 V% L6 q/ p9 z1 ?3 g$ G/ R: ]9 F .gpio = DA850_USER_LED1,9 J J( w, V+ ]: h
.name = "user_led1",# G* j S" x/ f* ?) f+ M9 C
.default_trigger = "default-on",
+ ?1 i2 l+ @" ^+ Z5 |, ] },
6 G* K! H! ?) o! N# X4 m {+ W6 a9 B# K$ G+ S
.active_low = 0,, W8 v _( n- z& d. w. M% q7 L
.gpio = DA850_USER_LED2,
6 d! B! ^. w, V$ d+ t1 b .name = "user_led2",
! [- f5 H ?. l .default_trigger = "default-on",7 s* ~0 Q/ p5 }/ n, E& Z8 j
},
1 |/ s: i5 G' l! n+ A! _0 l6 J( y# z {4 B6 t; r8 s: G: N9 K( W( [
.active_low = 0," W' B( X% z) {# e1 J P. E& m) T( r
.gpio = DA850_USER_LED3,
) t% O/ I. ]! L+ |7 o& c .name = "user_led3",
0 N! Q; D7 l8 L7 u0 N# s- p .default_trigger = "default-on",; C+ B7 U0 ~% Q' @
},
8 S; _" H9 ^, O% [5 D$ Q};
$ L* R/ \3 G' H# y4 K; c q( B/ T: V4 ^6 A1 X
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {' n4 c0 T8 e: B4 d1 Q3 k# ^
.leds = da850_evm_tl_leds,
' ^# |3 A8 q1 L: N% t .num_leds = ARRAY_SIZE(da850_evm_tl_leds),! \: m2 I# a. ?' [4 H! ~8 b
};
( U4 k9 J6 F4 j1 {# P5 M4 S* ?) M' C2 e/ o! X7 h# B% `& l5 ~
static void led_dev_release(struct device *dev)& c$ W! e5 w/ ?( i* O/ f
{
2 T6 x! q v" a7 x" c};
0 y+ v d* W$ U0 i; J
( {1 i! W% \6 c; [0 @static struct platform_device da850_evm_tl_leds_device = {$ ]) V0 _9 V" g5 I" u' q( K0 j2 i
.name = "leds-gpio",
* ?4 R$ E; R! X. }% g; y$ C .id = 1,
7 W- R" ?$ _" P+ N7 e- H3 k. G .dev = {7 d. I, U% w1 M* W N
.platform_data = &da850_evm_tl_leds_pdata,' {8 ?% c, A* j, W3 a$ V5 B
.release = led_dev_release,
/ X4 Y" M1 p+ z& J* x, L" ] }/ O, m q/ q: T. O7 m6 c
};
- I8 {* G) g( }7 [
0 i% ^8 }/ ~+ h! ostatic int __init led_platform_init(void) _* j9 Q0 t" o
{
$ r# p2 a8 l, Y# [ int ret;, s5 b) J: o. u
#if 04 J" g9 F) u" W$ K O
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);9 e( U- G( @' V) x- c0 Y) U- W8 ?
if (ret)
0 [% B2 ~3 g& c7 v pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ \. ]5 z7 W- N1 m+ f! H- [
"%d\n", ret);
; v0 Q; X- d1 ]! L#endif
0 [, d7 u1 U8 q1 i3 g" } ret = platform_device_register(&da850_evm_tl_leds_device);
0 a( t) u% Z( S: @- e2 J. C/ o, _ if (ret)' |+ z" W/ l" ~" V' ^
pr_warning("Could not register som GPIO expander LEDS");- G1 B' V. l' m: D! [& M) H
else+ U. l5 O# w! W6 ?
printk(KERN_INFO "LED register sucessful!\n");6 d9 H( }# _) W+ O
6 V" r7 z( K* w$ l3 x return ret;
2 V: q) a; t9 \8 t4 E}$ `4 @& I+ ]5 V% w1 R6 ~
: j; ?: `4 A9 o
static void __exit led_platform_exit(void)
2 @" l& n1 A# d{1 T) o: Q, Q/ U6 z- M
platform_device_unregister(&da850_evm_tl_leds_device);
8 B1 G0 s h) ~# x6 p) g' K% N; ]8 w7 k, k% V' @) ~, E" U
printk(KERN_INFO "LED unregister!\n");4 Y0 f% B1 c' }
}
}$ t! }4 u) T* v- [ t
, D7 ~& h- F* X4 J U# }module_init(led_platform_init);2 `# x3 H+ o- k' c, Y4 w
module_exit(led_platform_exit);
2 P4 Z/ e4 ^; E: d
. d0 F/ E% W1 q3 N/ U5 D. q7 V, OMODULE_DESCRIPTION("Led platform driver");0 P @4 E4 z4 A2 F9 C0 k
MODULE_AUTHOR("Tronlong");+ w z1 I* A/ q: \# d$ |
MODULE_LICENSE("GPL");' p, x& _7 S- `% p7 s
1 k/ v% i5 t6 x7 c0 u) h
|
|