|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 q0 Y( ~" R3 S4 N( f6 ^ C- l
#include <linux/init.h>
* |) U! l6 Z1 K6 g5 r( N' t" m#include <linux/module.h>4 b: W0 z, T) B( {8 R( r
#include <linux/kernel.h>
* B, g, s3 H' v5 {. j#include <linux/types.h>% X2 g! [% Q; j) M$ H
#include <linux/gpio.h>4 q9 O& o/ ]5 ?% o/ Z8 l- l
#include <linux/leds.h>4 P$ ~% X u& w* u
#include <linux/platform_device.h>
+ ]0 U+ m4 i& ~9 w p. y; I. E3 w& u. b
#include <asm/mach-types.h>$ c% i( _: e; e7 [2 ~
#include <asm/mach/arch.h>
& q! h& M% o2 r7 N" c) q% D#include <mach/da8xx.h>
& E4 j! N# G! T#include <mach/mux.h>
: o8 t8 p+ s; B9 r1 d3 i A3 E0 |0 B1 v$ b: R% ~
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) U! m7 Z' U! @7 j3 C
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 \9 i/ Y1 b- V3 ]) r
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ H' W i# j# S% N" C
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! {! Q+ t) N- f u2 T
9 s" r' P d7 g2 i8 O( `$ J/* assign the tl som board LED-GPIOs*/3 p$ v0 T# T6 G7 f
static const short da850_evm_tl_user_led_pins[] = {! V- R0 k. q y- t' r$ [
/* These pins are definition at <mach/mux.h> file */
" |: o0 i/ o9 q1 l DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
L7 W6 C& H7 Y3 n. Z -1
; L* c0 f" y2 p. ^1 e$ k H};( i8 q. J: C$ m
( ^) c' J9 J7 \ j" p2 ]5 L* G
static struct gpio_led da850_evm_tl_leds[] = {: H2 l5 W u0 a
{& i9 F& j& j$ \7 H0 L* t: V
.active_low = 0,
% S- {+ }" v, e. a* R .gpio = DA850_USER_LED0,
2 ?( T4 O+ w; N) w( N) m' c .name = "user_led0",
5 j. ~8 C. `6 g; b1 U .default_trigger = "default-on",
6 L( l$ n+ e3 ?# `" e },
8 V% f; ]: Q, }: t, v! }7 t {
# f% g, v: k! O, |( J. M1 Z) a" Y7 { .active_low = 0,' M0 T# }$ l8 ?' K. A, k4 j/ M5 i
.gpio = DA850_USER_LED1,4 k2 g! E. i8 O+ D/ W6 m
.name = "user_led1",
( g( ]& O' |% p( Y" C/ R7 F2 Q) t .default_trigger = "default-on",5 A q* H; W6 z5 d
},
8 T$ q/ ?5 x* N; u {7 p+ t) W) c- d1 T! c K
.active_low = 0,+ B" k9 z9 N; \2 i6 v
.gpio = DA850_USER_LED2,' X6 W6 T: r4 w4 w! L, x* e
.name = "user_led2",
1 I2 l- o* B1 W7 v4 x8 f .default_trigger = "default-on",
) I% W- K M! I7 h# e+ U6 _& i },
: |! Q3 h8 E" \' E {+ r8 y1 H H: O* Q$ x2 N
.active_low = 0,
! K: O2 \0 ~, j# ]; i% s$ Q .gpio = DA850_USER_LED3,/ u ]: K1 l8 l( V% E4 {1 B
.name = "user_led3",
( j- e& I' S# p7 \6 B .default_trigger = "default-on",7 v+ J- [/ G$ k1 A8 i% a5 ~/ l
},# l0 r+ B1 p4 p- a: _ [+ w
};+ v4 z. P3 ~% V$ x8 F& B
0 z8 a3 h2 |+ v- P# M. W/ Q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
5 D6 F4 a2 y0 ?- c6 N4 J1 [ .leds = da850_evm_tl_leds,
# d9 M$ n% R* r6 X .num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ Y( ^/ |+ u ]9 S- g: s
};4 y3 `; p8 R" v' S3 @5 M# e: C
9 \9 u: P( ]/ g) |. U# U4 e' F! kstatic void led_dev_release(struct device *dev)6 E$ U, E& a0 Z# P: i( @4 G5 H# y
{( S; L% g8 c0 _, J, I( F
};. M( |' c$ h" d/ t) |9 ]
% Z7 E" N/ D2 y0 M
static struct platform_device da850_evm_tl_leds_device = {
8 M. ^: I% q1 f4 n i/ G, l .name = "leds-gpio",
9 W% L+ w& V: H" _; D$ Q7 ~1 _ .id = 1, p7 K' _# S! U8 I1 J" X
.dev = {/ O6 h* P: F' }, L$ }
.platform_data = &da850_evm_tl_leds_pdata,
, K* h0 W( E/ a' a6 k! N! A .release = led_dev_release,6 H9 Y& h/ y8 P( y: W
}
4 O1 E' T: ~% y; e% r};
2 h: s/ I. _9 y6 E3 X* R
7 V6 g6 k0 \. f& {static int __init led_platform_init(void)5 H* K2 g0 |' n! H$ \
{. K% ^/ y. F8 D& L' I% }/ g) Z; C
int ret;* g/ k0 }; E: v/ F* ]: l% }! @- L* Q
#if 0' w% B% K' ?; L- L" C! G' [7 q+ Y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& N8 W! ~4 D: [* S# n
if (ret)8 B# y1 t% ?$ g A) @$ x; J
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' ?3 H: i; ^( t2 S
"%d\n", ret);
9 f4 O& [+ w# K) Y- U# o#endif: M! k' N7 D w! u3 G& q7 _
ret = platform_device_register(&da850_evm_tl_leds_device);
) ?7 U* n; \/ o9 d E& n if (ret)& f2 H# Z( C% w' D
pr_warning("Could not register som GPIO expander LEDS");. W+ z$ Z, d# @; u) O! B( b
else
1 |( C) w% A& o5 Z" U+ Z5 V+ O! y printk(KERN_INFO "LED register sucessful!\n");- u* h: o" q( c4 {" U7 k
* S# F% d! }4 v9 W
return ret;
" c7 F1 n5 p) c. V" p) q# b |}
0 d6 O# G7 K; Y' _2 d6 l/ S3 B7 C8 G( p
static void __exit led_platform_exit(void)
0 m7 F' N" S! H: e- `" F& x4 ]{- ~' L0 V9 U; B+ @
platform_device_unregister(&da850_evm_tl_leds_device);
* `% ?' y! v$ x7 \
' ]& q$ g+ Q' p. ^( Y. N5 R printk(KERN_INFO "LED unregister!\n");& J: K6 j1 l) w" Y9 H8 c+ j# c6 K
}
( {" L* n, C) U, {! ~0 `3 s* l& m1 U5 G& p$ n H2 S. d6 B
module_init(led_platform_init);5 I, O" [ i7 G' d% M- ?
module_exit(led_platform_exit);
; [2 M- B1 n, D- K5 q* W4 _' }. O0 Y
MODULE_DESCRIPTION("Led platform driver");
8 H% I# t8 a$ X, _MODULE_AUTHOR("Tronlong"); l0 b: [$ o% e1 l; Q( {
MODULE_LICENSE("GPL");
2 ?7 |0 R0 N0 h8 O8 x+ B# W7 T+ N" C# n
|
|