|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 V* I, K8 A3 K#include <linux/init.h>
8 v0 w1 ?; H" s$ o n#include <linux/module.h>. p' t, s9 ^, @. ~
#include <linux/kernel.h>
6 b$ Q8 `- D8 C, C! ?% B( l#include <linux/types.h>$ E' s1 j+ M* D- w R. U- K3 P
#include <linux/gpio.h>
) i: c% h) y' S4 L6 t#include <linux/leds.h>
- }, |$ L; p1 F( h% ^$ ^ J#include <linux/platform_device.h>
) a$ m( }6 v# B: V, B
. ~# Q. u0 y% M2 f/ I1 l0 o. |#include <asm/mach-types.h>
- o! Y# z, V7 q0 O/ B#include <asm/mach/arch.h>% l* F8 g" T! {5 k
#include <mach/da8xx.h>' O/ A; m* w+ M7 t
#include <mach/mux.h>9 f) g; k1 h6 Y
+ ]0 p/ R5 S% G7 [+ G
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ A. D* L( Y# m+ p) ?
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)' q6 k8 L; N! V& ]7 e, w
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% R+ y* f) x+ ~: n
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 K2 t$ l' Z+ I1 ^- l' e
6 }5 \; \% R9 j2 p+ C- d/* assign the tl som board LED-GPIOs*/
/ ~( @8 A5 l; v9 Z$ _static const short da850_evm_tl_user_led_pins[] = {0 P+ E* x0 O+ x6 ?$ e
/* These pins are definition at <mach/mux.h> file */3 N+ }* d- t8 Z8 j' h
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! o& w& T- z3 t* J& A
-1
* }: J- k# l9 x) ^5 h};
4 s7 P! u. O% ~9 X
* N$ Z) P8 C8 _static struct gpio_led da850_evm_tl_leds[] = {# Y3 r- C, r4 m6 N5 F
{
$ z T# m6 J$ u3 T# N; I% {' Z. B .active_low = 0,
& B) h' B6 `, _# K6 Z4 t; a .gpio = DA850_USER_LED0,+ G5 b- M1 Q. H, c
.name = "user_led0",
3 P! p i+ c+ ~1 H4 L .default_trigger = "default-on",
- Y' y# o4 P; D6 @+ w },; }& I* O2 }9 }) A/ I9 b
{
+ \$ s, k% A8 o+ X .active_low = 0,
& Z+ E# B5 w# B. ] .gpio = DA850_USER_LED1,+ w2 }2 c, I0 m
.name = "user_led1",
# i k" s+ G1 P .default_trigger = "default-on",4 @, e' u+ Z: C; Y2 h$ y
},- r" W+ Y' b- a- R
{# w e9 f F, e: e
.active_low = 0," z" x. S, z1 ~. N' k5 E
.gpio = DA850_USER_LED2,
1 `$ V4 R. I, E% ]8 e .name = "user_led2",& ^2 M+ \1 L# C* \. E) G4 E
.default_trigger = "default-on",; g- S' Q" b2 {: q6 \: o, s+ o j
},
* B7 Y& V% v% |/ B1 J5 o {
4 k% H, Y' M3 ^7 E0 Y' J" n2 f2 Y) M .active_low = 0,# x, c- ]; Z; g+ A( A |6 U
.gpio = DA850_USER_LED3,
5 h3 A6 p6 O: t; D' ^1 Z- g6 V! a .name = "user_led3",
( D( h3 c, C5 T5 n. D- ] .default_trigger = "default-on",
3 q: _" I: o9 I. v+ w4 W; R. r },6 n8 J2 {7 p* P* [; v. s
};
, m0 R0 j6 a& q/ z. l2 L; i; k- k' ^6 c2 M5 S2 N7 t, P! M4 j4 \
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) A! X4 \; p& }; q7 a2 n5 c+ P
.leds = da850_evm_tl_leds,4 J/ n/ M. w% Q, {( [) w
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),; @# _. P e* M6 l
};
9 C) {) K, [- {" ^7 K- {) R; E
; @# M/ U* Q/ T A' Estatic void led_dev_release(struct device *dev)
; e. N% z: y! m0 F- j* Z{
2 F6 x( M7 l ]" k( {6 L};6 i2 g: h6 K5 B7 b8 I! D% p3 S
+ @( c$ g! @" \) [% `. J" `
static struct platform_device da850_evm_tl_leds_device = {
1 n. V+ b; G0 J% E .name = "leds-gpio"," Y- }1 W( k: Q7 G X2 _
.id = 1,
& R% r) o! c3 r9 I3 O .dev = {
3 \) W: t/ y$ u' E0 {7 p9 a) I .platform_data = &da850_evm_tl_leds_pdata,; U, W- Q g3 A
.release = led_dev_release,
6 Q# p- r; x6 ?' v) L }- R# i5 q0 w _
};
/ }* `7 I" e' c/ Q3 T8 n3 N6 s! I. G4 ^! M9 s7 j3 P4 w K
static int __init led_platform_init(void)
0 {8 u; s$ I N3 ~1 _{* ^& s0 m- g& z& }6 {- D [2 U* `
int ret;" O ^6 {, H. L6 ]4 Y" z8 M3 I
#if 0
3 ?0 a0 _# v* r. U5 `- |2 E ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! r2 T1 @, |5 W. ?. @1 J
if (ret)
3 B& i* w0 O0 @2 B; g+ _ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 E* \( j) [7 n: @5 k/ X "%d\n", ret);
& }' i" m0 P i$ r" R#endif
; l! n6 n) e$ v! |: H( M ret = platform_device_register(&da850_evm_tl_leds_device);8 X! G7 l3 c1 \7 M$ _0 R& J
if (ret)% S+ R9 b, o1 r& w$ t% R
pr_warning("Could not register som GPIO expander LEDS");8 ?8 Z% q T( s, ]
else
8 q1 A. f1 i. k; b$ q printk(KERN_INFO "LED register sucessful!\n");0 k( H3 q7 ~& P2 ~5 z
2 o4 ?4 x' P; h4 q' Z6 n! ?
return ret;- N2 v3 N" I! S2 [8 \
}: q# G" X5 {3 @4 G
) o" R% }8 `+ {5 t1 [static void __exit led_platform_exit(void)
$ E6 k f1 | |1 p9 E" U/ c{
$ w' U/ `- ]: c9 @ platform_device_unregister(&da850_evm_tl_leds_device);! b+ c% f# q. }: ` o# q
* }- @* g c/ J! S) n$ o printk(KERN_INFO "LED unregister!\n");- F. l- D! Q1 `: _$ O& T
}9 F* m3 {" M; R+ z$ U& M" N7 W
, P8 G' o! y$ vmodule_init(led_platform_init);
! h7 w7 [6 a& F, C& mmodule_exit(led_platform_exit);0 d5 v' U; A. b2 U% N
9 L1 A6 V0 [* O" d! h
MODULE_DESCRIPTION("Led platform driver");# q- H1 j& \& f' z4 q# ?2 i6 E3 x
MODULE_AUTHOR("Tronlong");
& j- D6 j& K) D5 ?MODULE_LICENSE("GPL");# U( |3 ?+ L' b0 M1 O, h
7 w5 o5 n4 C; p% Y7 e* y3 j6 b |
|