|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; a! Q8 @# s2 m3 b, O& u: [, [
#include <linux/init.h>
5 \5 A& d( L/ }. S* X: X' M#include <linux/module.h>
5 ^: [! i! ?, x5 m% s' R! ?; D7 a#include <linux/kernel.h>2 c* ?5 ^/ g+ b; l6 @
#include <linux/types.h>
4 M2 W. D+ |. a5 P/ [#include <linux/gpio.h>
- \9 V, X# s$ Z* k#include <linux/leds.h>
* O- E8 \, o4 @# ~! u- }# j% H#include <linux/platform_device.h>: E4 [- z. z6 s
5 S, \& E, ]9 \/ m
#include <asm/mach-types.h>: i2 b+ I; G5 z( H+ t- D; a$ C; E
#include <asm/mach/arch.h>9 T* k/ E( t/ P7 z
#include <mach/da8xx.h>
k- [" _7 _; b- Y6 } \#include <mach/mux.h>
: d0 ~' d! E8 X( M
* D9 O1 T! Q0 d _( }#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 `- F9 K$ v+ i7 G#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). Q" ~# z: s& j0 {' r3 s7 I/ p
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
$ {3 j2 z/ R4 Y5 y4 @6 m9 w, C#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
" a' Y5 P, a7 E- `1 q
8 X. c* z* F4 ~' B" ^$ o: O/* assign the tl som board LED-GPIOs*/
/ i2 n x A2 c6 qstatic const short da850_evm_tl_user_led_pins[] = {5 ~- M) m& n- K( c3 b: v
/* These pins are definition at <mach/mux.h> file */. ]) D( H3 l% J& {
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
& v4 a# n2 ?. z v1 W- N! a -1
& Z1 f/ S4 X: p! Q7 F8 I; _1 J};* z/ C5 j# b/ c1 ^2 {9 L
& o+ u' h/ U7 k" E5 S8 M; z+ F3 o
static struct gpio_led da850_evm_tl_leds[] = {% ^( e7 O0 `% d6 S" t+ D" r
{0 |( h' [. [) n
.active_low = 0,
W' S+ A' }& Z1 h/ r .gpio = DA850_USER_LED0,+ I. V3 h6 p4 }2 ]& G
.name = "user_led0",
( O6 ~) f8 n& l) E& O, o .default_trigger = "default-on",
# U/ N s' q5 A) D4 _& a6 l },) s* l8 ]6 n. @4 V/ s
{
( ^. D1 l8 G$ E8 y$ H .active_low = 0,
$ ^* J7 E- t6 X+ B& A6 C) q3 G# d .gpio = DA850_USER_LED1,/ p; v9 ~* {/ x( j8 U, N
.name = "user_led1",5 W) u* Y$ ^- \4 [# g9 Y
.default_trigger = "default-on",3 Y/ b$ ~* ^4 C
},
; s; ~0 w/ @/ ^2 }8 D1 s {
; I% B& } a$ } d- u- d- L6 P .active_low = 0,
/ B5 a' V4 `5 T+ s$ W .gpio = DA850_USER_LED2,
- |2 Y+ @4 V* i1 y .name = "user_led2",; W* E3 S1 F/ ?8 w! ^
.default_trigger = "default-on",. S( n+ h8 c! d
},
, `# h8 a8 e+ L2 }3 `1 g3 b$ r {
/ j4 N: k( L9 X" t$ C4 X9 H" M% C! D' A .active_low = 0,
. o4 p. z$ X$ b3 s" Z; T .gpio = DA850_USER_LED3,* r! J. y. c' E+ \3 w* `
.name = "user_led3",
$ ^; p( ^- \% G5 g .default_trigger = "default-on",( s0 p4 @$ D8 v
}, l3 |% N; O9 x* K, X1 j
};
7 C& @. a2 P! m# X
7 ?+ \4 n8 l5 X% e& {static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 r/ D# `! f* f" O .leds = da850_evm_tl_leds,1 g: s4 p" ~7 u- x7 G
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),: ~% ]0 c. e7 H' r+ M3 c# ~0 ^
};7 G% P' V# q$ r
4 ]. a/ f$ O' B1 W
static void led_dev_release(struct device *dev)
0 Q6 o& z, l) P8 d{3 ?! ~; z0 `% A! n( N1 v& G2 }; Y
};( h5 y3 C, X/ w& m" h# G
+ p Z) j* b7 T3 cstatic struct platform_device da850_evm_tl_leds_device = {
; \9 r8 a; g2 Z1 [ n .name = "leds-gpio",
) s! d4 C U( t, ? .id = 1,
! S2 y+ s( B1 ]7 Z .dev = {9 n7 {8 L( v( s" ?' s
.platform_data = &da850_evm_tl_leds_pdata,
7 f9 ~ M% @2 i* L; Q3 S) ]- W( x .release = led_dev_release,0 P! a2 Z+ l) X
}; |: A2 \. q0 v7 {/ `
};3 X+ ]8 P1 b/ z5 t" @
$ C, ~$ ^5 `" K8 M# v- z8 m/ [
static int __init led_platform_init(void)
5 a- ?1 e% j, x/ H# ` d: G, Q# |{
7 G: n* E' a, w4 J7 r int ret;
- h( k1 C4 _6 L! @#if 0# L9 ]4 y) M# H
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ D) @( h6 J! G( p) l if (ret)
7 K5 b: D8 _9 h6 ~8 O pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ B4 b) B) S& E7 J P% ^! `. O1 I "%d\n", ret);
; G7 H, {5 G0 Q1 Y#endif
1 t& G5 \0 E7 A6 _2 s. `0 H7 C6 y ret = platform_device_register(&da850_evm_tl_leds_device);9 [( M% [! L: \
if (ret)
0 L3 @1 U: _$ w pr_warning("Could not register som GPIO expander LEDS");, E: J6 h% O( u
else' i V5 d3 B% h8 J2 Q
printk(KERN_INFO "LED register sucessful!\n");- }- H# j! Q/ J }& G0 u
) e+ M6 `' A2 }$ x" v. \) y return ret;
* }! O! P$ o4 q( e( x( V}! t2 F0 n# @$ M" g
5 |! `* U# K9 r$ M ^
static void __exit led_platform_exit(void)" Q" q! ]/ A( M, N) E' A3 G
{
?7 M7 M& l; l9 F/ m platform_device_unregister(&da850_evm_tl_leds_device);
: ?- k i0 c+ L$ ~# `1 q" c- ^* k4 c$ v( b; H& N" v
printk(KERN_INFO "LED unregister!\n");
0 y& z, y7 B$ I$ U% M}1 E7 m* k! N' n) ]( u
; e! ]& R1 ?2 @) {1 u* ~ Tmodule_init(led_platform_init);. w! l6 h' Z% x2 N; ?
module_exit(led_platform_exit);4 [ t% Y+ G5 E
2 q4 W' d& ^7 M* ~! r' s( W- x" }MODULE_DESCRIPTION("Led platform driver");0 r" W3 P. f6 d1 T5 C3 v
MODULE_AUTHOR("Tronlong");
" L- |, a+ C1 i/ {% DMODULE_LICENSE("GPL");
8 z2 t y3 v4 Y$ g
8 j" O `+ T: y# q; Y$ U |
|