|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 d4 ], _, a7 O8 o% o5 U#include <linux/init.h>
6 X) W0 _- q, R5 p) e5 G#include <linux/module.h>
* x a1 h/ s. s4 [#include <linux/kernel.h>( }' {. J( U \* T9 c& M. i
#include <linux/types.h>0 \. c, G1 c7 ^8 x
#include <linux/gpio.h>2 s+ a2 u+ v8 G) D6 Q5 R9 s3 T
#include <linux/leds.h>& R9 J% d: ^' M0 L
#include <linux/platform_device.h>& k u# K% E% h* y7 `8 t) V
) N' f. G6 w+ m' ^1 R
#include <asm/mach-types.h>
% H7 ^* \( F3 B6 u- w1 j5 u/ p#include <asm/mach/arch.h>. d# z3 e& u$ U4 R/ y ^" N
#include <mach/da8xx.h>
+ \; j* i$ ?0 J#include <mach/mux.h>
" H9 G. C: I1 z" s, p3 c! f3 U7 L2 X; `1 n; H& x3 u6 _
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 X5 y$ v$ q8 Z. F7 j+ j
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)6 {+ `. u4 @- M O2 f2 O( k) x3 f
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) ^0 x+ `7 m# d. m
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 M7 u4 K4 L* t$ w, G7 c) h9 R
+ Z0 p1 e u& K F5 G# K/* assign the tl som board LED-GPIOs*/
r8 y% S$ M* Z5 F9 Zstatic const short da850_evm_tl_user_led_pins[] = {8 @1 e q! z0 F; P
/* These pins are definition at <mach/mux.h> file */
, A9 U+ \) {0 O9 d8 [' U DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ X! B; }+ u. p' K# c* A7 S
-1, X' z% \! p8 a$ V Z6 @" \
};# F% v; u2 o& w' [
& i! l1 `: B, ]0 ?2 F5 m
static struct gpio_led da850_evm_tl_leds[] = {- P8 t, Z2 \2 o! r& A
{6 c( w8 o) I. ~7 F
.active_low = 0,0 w4 j5 Q# I# `* X* L
.gpio = DA850_USER_LED0,
! W$ C) H: s& k6 z# C5 X .name = "user_led0",
+ r, ` d! g4 t1 d9 z8 p .default_trigger = "default-on",
! w2 J; J9 R9 J. U5 F },
9 k7 `" V& v3 @8 P+ } {+ ~1 ^9 [" t' m, I1 G, l
.active_low = 0,2 \: v1 o5 m- V
.gpio = DA850_USER_LED1,
+ T8 D/ \ B& H/ G* D .name = "user_led1",
9 G" ^5 a3 S+ u2 r$ H .default_trigger = "default-on",
2 p3 C, [9 O, S$ _+ O7 R( J },# Y6 C; ?' C1 X6 S/ s" \0 l
{1 G$ M8 c( |- T) I
.active_low = 0,! L/ M) b8 c A8 M: Q! ]' K
.gpio = DA850_USER_LED2,
$ N/ ^0 h; Y8 R) I3 { .name = "user_led2",* Q' p9 @$ f" P' v5 X, }
.default_trigger = "default-on",$ s/ Z. g u; C. A5 ]
},5 ]6 ~3 Q: c+ `+ r2 c$ N
{8 J" `; c9 n- d7 Y6 Q+ s
.active_low = 0,& B" L# G- v, K' X& \
.gpio = DA850_USER_LED3,& p# G! ~( V" q5 B
.name = "user_led3",' R0 w+ U" F0 t, T/ ]2 e6 c
.default_trigger = "default-on", n! }( w: G; k+ V8 r; j
},- z H# u+ R$ N* }, I# n+ w$ o( l
};8 S, ? ]2 g. I5 N4 z" J7 {: C
( k+ Q& l" a1 d$ e( R$ O* ]
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( F- a) M& a$ F8 }# J
.leds = da850_evm_tl_leds,
5 G# A) \/ }7 N- P1 x9 X .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! D- P; ]5 E7 b4 e4 K* |};
* T6 d% c) ?& d& h& }; d$ [ P0 |+ n1 Q( t- s
static void led_dev_release(struct device *dev)7 U# w0 d1 O* }% u1 Q5 \2 b% g; z
{8 v6 o& E# W& x
};6 w; x4 |0 V. A! g
7 ^) \- j( ^; |3 C, Zstatic struct platform_device da850_evm_tl_leds_device = {
- V- c+ B- o' u) Z! G .name = "leds-gpio",* P" r1 l3 R4 d7 Y* h3 F' R$ t
.id = 1,
; l, |7 `* O# t, e .dev = {+ X% e$ J9 A2 A: `
.platform_data = &da850_evm_tl_leds_pdata,: o0 @/ w1 W: R3 ^2 {9 e( J
.release = led_dev_release,3 r( M4 D; c! x
}2 y; O& q' \" A
};
% q4 O0 F/ A4 ~, A& A! D3 ]" Z' q% W3 Q# Q J# c$ i1 s
static int __init led_platform_init(void)% J0 }3 j' j, c9 b
{) z, x( U- f" S& r$ v5 M) r4 j
int ret;
5 A! e; ]3 J8 ]#if 09 S7 N" L( S6 n1 I& q5 w
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
8 J' ?5 w( G) o) W' \4 U if (ret)3 U9 t' a6 V8 Y
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 M' B1 Z: C' D; I9 t9 I
"%d\n", ret);& i% F6 U7 L+ H3 R' z7 h8 {
#endif
- ?# ~" z6 H; c8 t3 L+ s. X* w ret = platform_device_register(&da850_evm_tl_leds_device);
. x, ]: x7 }, n/ i' |+ _) P7 ^ if (ret): Y( O8 w4 C: ~, B$ c! W0 t
pr_warning("Could not register som GPIO expander LEDS");: q- W- j, q0 R" i1 i
else
1 h4 ~3 W) F$ D1 { printk(KERN_INFO "LED register sucessful!\n");- M0 N; B1 K6 f4 ?# R( i, l- e
+ }) R( }# g* C4 y return ret;
+ }3 d2 |$ U% D5 ]- ~+ b' x}
4 k' V0 u) t% \: ]& a9 I5 ]+ c/ {* L9 f5 K1 W1 l+ Q' E
static void __exit led_platform_exit(void)
) i) w' q+ ?& {* V3 \{" s" P. e4 Z0 U+ ]% `5 ]0 B
platform_device_unregister(&da850_evm_tl_leds_device);& n% }6 z2 o! y1 r3 C9 P/ W
& f0 j' Y, D$ Q8 b* l; l
printk(KERN_INFO "LED unregister!\n");
9 R, t2 N& A0 ^9 [: N}! F6 K% w! H. U0 X
! v2 m7 y* M) g
module_init(led_platform_init);" P& M; j) C6 T# V! f
module_exit(led_platform_exit);
, V- Z; }' w w2 e, X) k! }$ h, e: G6 V
MODULE_DESCRIPTION("Led platform driver");
& K) [3 G- W1 \! yMODULE_AUTHOR("Tronlong");9 Z" c, f6 o) [! F, e; x
MODULE_LICENSE("GPL");* J9 G& z3 y1 L" `3 V
% D( N# a) v& I; C: F0 [: `4 [ |
|