|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' F+ y# R- |' K8 W# l6 S- G* y
#include <linux/init.h>% a. J/ y& F; U/ J$ c) c) N u2 G S
#include <linux/module.h>
H" m. l7 X: B. n#include <linux/kernel.h>
) S L, j K% b#include <linux/types.h>
/ A% ^$ o8 b3 W( n#include <linux/gpio.h>" V6 y) k$ K# c! g/ K" }( F* ?
#include <linux/leds.h>
1 t; N6 t7 V! _3 {#include <linux/platform_device.h>3 k3 l; X' c( B. D% \2 Y
2 t, M9 I3 j Q% {$ y( A* g#include <asm/mach-types.h>* }+ V4 R0 b" A b$ L- W6 k
#include <asm/mach/arch.h>1 H. w( n& @" X6 t( Y/ G9 G
#include <mach/da8xx.h>
+ u, g G& a; l% p% `* I/ X- p$ U#include <mach/mux.h>" I% L6 Q8 J6 x* c
7 H& g2 X1 M7 r
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 m$ }1 Q- m; Z
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 M3 C6 |* t' f/ }9 b$ B* `4 K#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% l1 O& O4 S. |/ L* _( Z$ L$ F
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- r8 D W9 k: [' q9 u
' q$ T0 e$ h2 d# K& D V
/* assign the tl som board LED-GPIOs*/
8 g# w" ?; T/ g0 w% R. o& v6 l' Rstatic const short da850_evm_tl_user_led_pins[] = {
0 u# @& }- {5 n /* These pins are definition at <mach/mux.h> file */
. B! U5 a; [5 F0 F ^8 K& f) w5 o3 v DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( B) J/ N9 D: _ s' H -14 L3 {4 a5 k2 H
};" C$ L2 M( M, s, j z. Q% d
% w, d$ L% A: R+ [4 c% D& K
static struct gpio_led da850_evm_tl_leds[] = {+ o( H' w3 m; C. L
{
1 p9 Q9 C: G9 H+ p .active_low = 0,4 p$ g! ~6 o- `9 U
.gpio = DA850_USER_LED0,9 `# u" t( |1 H# e% a: k
.name = "user_led0",
9 M }5 G) L8 a3 @! v; y6 g .default_trigger = "default-on",3 M6 W7 C% z( b" ~; Q/ H
},
- ^4 B3 d2 l. J+ d7 t; D6 z {% X: B: B8 L6 C+ L( X+ U
.active_low = 0," I# q; n3 j: g' j/ ~, u/ @
.gpio = DA850_USER_LED1,
& |( \. \3 ?% ?5 Z( z: V .name = "user_led1",
% I) \' `0 L7 ]- S7 K% h, b .default_trigger = "default-on",& i+ j" P; u* I
},8 p6 F& N( w, A5 s
{
+ d0 }6 ?0 Q6 j$ i .active_low = 0,
& Z' U0 P3 ~1 y( T) d$ [8 {) ? .gpio = DA850_USER_LED2,
5 p3 x# E2 P- W) K2 M; F6 c .name = "user_led2",# Y, G! }% w' R$ X
.default_trigger = "default-on",
5 b% }. h2 W1 F6 J8 R! H },
3 G' |3 N4 c$ B {* W+ Y" F$ j3 Q
.active_low = 0,
- }; m1 R3 a# ?$ A' n .gpio = DA850_USER_LED3,$ @; |# Z, S' h4 O4 x" f( I5 h) O
.name = "user_led3",
$ a% w7 q' ^6 s2 O. K }* Y9 i8 Y .default_trigger = "default-on",
; z7 G. a. d4 k4 A$ i9 O+ c },5 d, X6 C; L2 z* o, k, b
};
9 D+ \6 P! g' f7 W5 d% S
* B; L; |8 D5 }$ ^2 r) }/ s+ fstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ z- D J; r0 G
.leds = da850_evm_tl_leds,
1 r+ |- w1 d% B .num_leds = ARRAY_SIZE(da850_evm_tl_leds),' S; C7 \1 @% [/ O/ X5 T& ~6 T
};
7 U6 z P% J$ t' X3 ]8 T. r2 q0 l4 s3 y+ ]: q" j# r0 v
static void led_dev_release(struct device *dev)
1 H5 k- ]+ w+ ~" S0 _% m% W{
2 t! p: N* ]( b! k0 c};& P* F; L. N$ V I0 Z! S
* n8 C9 `$ b% a/ W' F/ a. e: m
static struct platform_device da850_evm_tl_leds_device = {
! a7 O4 g" G- `( z# F4 g .name = "leds-gpio",
3 ?+ ^- _( h' _: _ .id = 1,# ^! I6 k* i) G+ D9 |; s* f1 C0 ^
.dev = {+ F3 ]/ N7 T7 V% D4 w! h
.platform_data = &da850_evm_tl_leds_pdata,2 ]9 X) x- ^' V) @2 _0 i( D% O9 I
.release = led_dev_release,$ X" v1 o. m. j) e4 A
}# N9 {+ r9 h, ^$ m4 c9 ]
};5 Z. o+ A8 X3 o
+ W9 @( ~4 F- }9 g% d
static int __init led_platform_init(void)
1 \, H6 N$ a: C/ g6 ~( }% `{! l1 ?4 ?' A* h" g' ?1 N
int ret;
' x) _% I9 v4 j+ ~8 r0 R#if 0
, F' f# W' h4 R9 _# r2 u ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
7 F, N4 V* D3 R" Y$ y, m if (ret)
9 X8 }) s+ {6 \3 w) T pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 ^, Z0 g9 w. q0 O. n# n "%d\n", ret);
; I9 K1 G" m2 d) @& |/ \#endif, e# ^; X# O8 Q" w& E: s
ret = platform_device_register(&da850_evm_tl_leds_device);" K" r& l3 t# J3 h& u" u
if (ret)
) |* W) T% [5 j$ {( a0 T8 A d( B pr_warning("Could not register som GPIO expander LEDS");0 F4 w$ [" E/ V' f
else
" J6 f7 j+ j$ h% _ printk(KERN_INFO "LED register sucessful!\n");
1 b( `4 R2 b2 S9 Z# h% o& k, U( o
" g$ @! C0 W+ L- m- y return ret;7 [ G& y* Z2 M9 t
}
, `% Q0 v0 t3 m: f% @
0 B9 s$ m" O, Q7 r8 G _/ @static void __exit led_platform_exit(void)
" u* S) y1 _! F S) {4 t# x{
& k+ k! x. r$ c! m platform_device_unregister(&da850_evm_tl_leds_device);. G9 L4 ?) t& G/ v; i; R7 F
# F' @% | \0 a) d printk(KERN_INFO "LED unregister!\n");
- j9 u6 Z6 H, c- K}
5 I. G/ D) u: i% u
0 q) F( b, v' s5 U F9 ymodule_init(led_platform_init);
1 B8 ?) U2 F, Z* z! Emodule_exit(led_platform_exit);
' d: M) H0 ?( n9 \# v' C2 V8 L# P3 t! b6 r9 A
MODULE_DESCRIPTION("Led platform driver");' P6 ?: O8 I. G% u" e0 y3 d
MODULE_AUTHOR("Tronlong");
8 _9 Q" Y& c8 Z7 HMODULE_LICENSE("GPL");& [- r2 w, v2 r
; ~: E8 P: p! r8 {9 q( \ U
|
|