|
|
求大神给下面的程序做注解,请稍详细些,谢谢。0 C6 _9 [& @$ n
#include <linux/init.h>
4 a% c3 Z; R! {#include <linux/module.h>
: |- v# @- I" W+ M+ v#include <linux/kernel.h>, q, J; _" T' G5 ]; y2 d3 L6 l
#include <linux/types.h>
$ E: L! z% o) s( G3 x" y4 H#include <linux/gpio.h>! u* t8 a# Q1 [
#include <linux/leds.h>8 v" V% \) g6 `" l+ o0 s E8 k4 r* V
#include <linux/platform_device.h>- _$ e: a' I) @1 p! _
. D* P" U/ e, y( i6 u7 ^" S
#include <asm/mach-types.h>9 P& J" d3 C6 k. I( N
#include <asm/mach/arch.h>2 U) {2 g$ d5 E) k1 x3 V% s, w
#include <mach/da8xx.h># z Z, o6 m- ?2 H# Q
#include <mach/mux.h>' g% R, M. {1 J, t t
* I: S% Q% K7 w" n( J
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 h9 L. Y. g" d1 ^! s+ B
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( h b0 x/ {: B$ ^#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), r8 A' Q: t. C8 }
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 d9 u7 N2 F4 ?$ b
- \: `$ }( `! z# ^/* assign the tl som board LED-GPIOs*/
% O7 C J- J$ L$ f8 \& y/ U istatic const short da850_evm_tl_user_led_pins[] = {
3 Z5 S3 Q+ o9 z# [2 } /* These pins are definition at <mach/mux.h> file */( ]/ R0 y1 f, h" I
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" x Y8 h( ~& H2 O. L) @ -1, ?6 I( j9 M1 g' M6 ?8 s
};9 j$ {6 |0 U, `( J1 _
6 |9 v0 F. R, K( y; \$ H* L! J
static struct gpio_led da850_evm_tl_leds[] = {& c! ~& }, I0 X5 B/ v7 D
{
8 k, Y6 k8 I( P$ H% `2 ?! k2 i .active_low = 0,
4 R3 ^( j& R* ?# t .gpio = DA850_USER_LED0,
7 ` g0 |1 g# n .name = "user_led0",
/ ]3 I% x7 @8 |( ^2 B .default_trigger = "default-on",
3 z6 U! s& j7 j8 T( m# ^* [6 }4 o% X' r },
3 d5 q+ _% M" Z1 ~" I, J { c1 B: B# O7 {% @+ w$ g) m( A: R
.active_low = 0,3 y% F) X- M, E. d
.gpio = DA850_USER_LED1,
' }5 Z; S2 U+ Z2 I4 g* I! R .name = "user_led1",. e1 ?$ s8 p0 E) W: b3 R. E
.default_trigger = "default-on",0 l$ J0 V& R& o- H
},
% [3 B1 Q g1 z2 { {1 v+ u6 P. ^9 v( f
.active_low = 0,- q* D" T g; k2 Z. k/ J$ r- Q
.gpio = DA850_USER_LED2,
1 j7 @2 w |6 @) r$ q+ r. v .name = "user_led2",4 T1 e0 r' H7 G
.default_trigger = "default-on",! s9 h) j4 a0 G% u5 P
}," C5 I3 e6 h) L2 x- X3 K4 N2 N, x4 s2 C5 [
{
& o$ t% Q: X5 r% b% W0 Y. i .active_low = 0,
$ a6 l# E/ B B' i: X {: w .gpio = DA850_USER_LED3,
; r* @9 I9 b$ D6 j x .name = "user_led3",
' Q4 k2 i0 ^* |( d' q7 j .default_trigger = "default-on",
$ S, c6 W8 T! m },
4 P9 t e, T, K: Y* u+ Y};
* s# e+ \5 G$ [: u. Z% s( y" C. i# }; K) i9 Y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {4 U1 D' O/ f2 I! ^* l: R" H$ T
.leds = da850_evm_tl_leds,0 f0 ]% J* k8 e3 p7 B& [) l
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 Q5 k7 E) P& x3 O# V; R1 B
};
3 ^' k; H* Z% A: |7 _) }' c4 g" a$ c
static void led_dev_release(struct device *dev)
+ H% ?1 {/ _; P- J+ S5 B; p{. M( Z2 A& q; j/ P* \" a/ E
};' b3 o+ @* o9 R: }9 m- D
# n Q) N3 Q! o) R$ D
static struct platform_device da850_evm_tl_leds_device = {, G: R) N( p+ W1 A0 g2 [; n) p
.name = "leds-gpio",: e$ ?! i7 I( s; F' m7 B4 L5 K
.id = 1,
- p; y/ k0 N6 i5 p1 W, R" b+ U .dev = {
8 p- ~3 B" H b( X( _5 F; {7 d5 | .platform_data = &da850_evm_tl_leds_pdata,
: \% a3 i m7 j$ p .release = led_dev_release,
& s; _. I# R5 p7 I0 `6 X }' Q$ R" {, |0 q/ g; a8 _
};- ~: r% \2 T+ M6 v
+ e" U# r' o D- |1 a. X/ t4 A
static int __init led_platform_init(void)3 o" u3 w( E" X
{, U1 ?) D2 D8 f/ f/ i1 a/ U
int ret;
7 ?. r% Q7 S3 c4 Y7 ]#if 0% Q# ]/ [# [$ H& ?8 v
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 ?6 s, W$ C5 G
if (ret)
3 i; J/ M/ x# X- h pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 s& h' g7 v7 |) n* x "%d\n", ret);
$ C# ^7 C- D5 x; P+ d* M- Q#endif
# {- R) y+ ~* f7 V. H0 P! t( Y- m2 A: H9 G ret = platform_device_register(&da850_evm_tl_leds_device);/ O) K5 l) W" l
if (ret)4 B# h# g+ l' s. ~ G0 }) a
pr_warning("Could not register som GPIO expander LEDS"); m6 d; V: ?, S: X/ }8 }
else
5 Q B, r% `+ m; l, j& Q printk(KERN_INFO "LED register sucessful!\n");
! ]9 [& Q, e* `7 v1 |: g8 k3 ]0 J: i' v# m5 |9 M* G& U2 u" l
return ret;6 _0 [8 o T+ a v a9 V" s- _' M8 f
}
) \" m8 p1 R o) h5 K# o5 v0 Y$ p. h
static void __exit led_platform_exit(void)
2 @, T7 {+ g* O{; E0 R1 `4 ?$ I% S
platform_device_unregister(&da850_evm_tl_leds_device);* [ [1 F# C( z+ i* N2 i
2 Z# y9 ?; v; W; f; |$ o* A8 \
printk(KERN_INFO "LED unregister!\n");+ h! Q( }0 M. |/ i6 J+ w7 ^* h3 o
}! c7 r* U8 ~) X. d5 l$ N
4 x$ { s; s' }" v
module_init(led_platform_init);
+ S3 A; |3 F: S' q/ o' O; h. t. g" bmodule_exit(led_platform_exit);
6 N( n9 @& _7 x# _3 D% l" f& n
# T, J1 z) S8 C' lMODULE_DESCRIPTION("Led platform driver");
2 J/ k: {, E: ~: RMODULE_AUTHOR("Tronlong");
1 q$ c. g& @7 U! F) GMODULE_LICENSE("GPL");) ~3 J2 p" E" Y. P- t% U0 s
7 |! v# o; [- M1 H5 W8 ]0 c6 I$ j
|
|