|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 Q, W: p+ b: c3 \#include <linux/init.h>
$ L1 X: F0 L8 }#include <linux/module.h>
+ |$ }. M9 m7 q+ N/ X#include <linux/kernel.h>
1 c) z+ |& X6 B& q) U- n#include <linux/types.h>
5 A' y8 P0 {" x) j8 ^% _#include <linux/gpio.h>: R; ]$ f8 q4 E
#include <linux/leds.h>
, v. H- I/ H" j#include <linux/platform_device.h>/ @2 C0 [' b: M( F) [ T, o
/ r/ B0 X; I5 l. c' i4 a, B+ [#include <asm/mach-types.h>
! h. f5 H/ q- D0 K#include <asm/mach/arch.h>
% X' P' F, h3 G! P4 D#include <mach/da8xx.h>( n% J& u, T5 X/ \6 ?6 ^$ }
#include <mach/mux.h>" D- [% s: J! E" V
% R+ d+ m9 u8 G X2 k
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* t) o8 r8 W! G" c+ L( d
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
% m" x! E+ y3 K, w#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& @3 F: Z* ?# s
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* c6 }+ s! A o% t3 Z
$ ?8 x) R) f" c2 S: X
/* assign the tl som board LED-GPIOs*/
& c( X0 h5 U) ]3 a. ]* Wstatic const short da850_evm_tl_user_led_pins[] = {' M" |0 H4 ?6 T" S7 g
/* These pins are definition at <mach/mux.h> file */
$ L- h* K0 s' A* e2 ^ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, Y/ Y7 s ^- ~) W* @" f) E
-18 V! w v* N4 E1 S- R
};0 L) K# x& D: G$ s
1 k+ N) ?+ H9 B( gstatic struct gpio_led da850_evm_tl_leds[] = {& N% p J3 W- ~
{
; G2 n8 N' c: C/ k) j4 z/ o .active_low = 0,) b5 l" A9 Y6 h6 `& O9 |
.gpio = DA850_USER_LED0,
! k1 C8 y8 V; ~# N5 V, ?, X8 v .name = "user_led0",
# z$ X% C" p D1 [ .default_trigger = "default-on",
. a0 | R% G9 m9 E: c },7 c( K1 e m! ]
{6 B5 t4 _% p5 M1 k5 Q t2 M; E; o
.active_low = 0,* X" W" k* e4 s* L0 Q* V+ d
.gpio = DA850_USER_LED1,
5 ?+ r( z. F+ K4 I .name = "user_led1",
) G) N1 L3 m8 m7 h% B( Q* E .default_trigger = "default-on",
4 A2 s$ _" f, U' {" L0 R2 z },
+ S- c, A, _0 ^4 N) g8 h {4 G8 F/ h2 m; F( g8 Z8 B! f
.active_low = 0,1 T1 ]9 A }: `! s
.gpio = DA850_USER_LED2,) I2 O; w" {, A2 y- U. b
.name = "user_led2", q* Z! l8 _* x' p8 L$ ^6 i: r2 J
.default_trigger = "default-on",3 i3 C' D' N; | C- ?2 e
},
, I" u2 H5 R/ _6 d; w {& L3 p u6 l( h/ Q4 U" }2 T8 j! ~
.active_low = 0,! p( z' {& |* y4 f5 v9 s
.gpio = DA850_USER_LED3,
) m/ L" ?4 U: H .name = "user_led3",7 g. o2 F, [2 u9 S! h1 I
.default_trigger = "default-on",
0 J+ Y8 N8 C4 L" A- U) i },6 |0 z. f, w# N* C6 x2 b" o' R) p
};
& H. I! {& Q7 S( g+ D( \" N. ]6 z9 }% b
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
0 h& d1 M. |( E2 m& q a: v .leds = da850_evm_tl_leds,2 _" U# n' x2 j% W
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),& i1 D7 E, ]6 Y& F$ H8 J: i# u/ e
};+ E4 Y1 R: V g6 }8 j! H
5 F8 E& b, @# } Q4 p
static void led_dev_release(struct device *dev)9 g# m1 k4 {* I; n# t8 f
{. g& F4 U# ?, A7 O8 K: n
};, a5 X4 R# q+ O# ^2 A9 t
8 N7 B9 U2 K* f5 L8 W ^8 f+ `static struct platform_device da850_evm_tl_leds_device = {$ j5 C* p% k9 o( H* a! ]
.name = "leds-gpio",
/ q( y$ u8 ~! m) K .id = 1,
+ p( Q( F& k; k8 y, [. e5 k) O .dev = {
8 J. \- N7 k. `* l% Z f .platform_data = &da850_evm_tl_leds_pdata,
" u3 L) Q$ c- Q- v+ U .release = led_dev_release,7 B+ y8 V6 |+ W! j! b
}* d) p" H( M( ^
};) w( n; E4 \' |) {* s( M( _
) G$ g; J% }2 b/ }7 X5 |$ j
static int __init led_platform_init(void)/ f7 b0 i, r) l6 B
{1 J' |3 `8 }9 u* U3 F% g, p' q
int ret;
$ k' z+ o5 @) U# w* w# @7 N#if 0
3 x e4 u8 w1 m ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);$ L6 v5 H: ~& |' g6 F
if (ret)% b" Z- g% ^; B& ~
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' a/ r1 J% e) Q' M/ Q5 k "%d\n", ret);
+ q6 I$ x7 u: J/ _7 C; t( n% d1 h#endif
* e* ~4 E5 z4 Q& L ret = platform_device_register(&da850_evm_tl_leds_device);
X' b9 C' o0 a5 ~# f; K if (ret)$ S1 @) j" P* {* V- j
pr_warning("Could not register som GPIO expander LEDS");
. @7 t# l7 a4 Z' ^7 X) z4 K- Z" a else9 H# s: P9 Q7 j# J, Q
printk(KERN_INFO "LED register sucessful!\n");7 D7 n5 k) e' c1 G. ?( Y, x+ `& J
, w/ m, G; y' u
return ret;' I( \( t0 z; S6 ~! n
}; v3 K8 |# c6 X9 ^+ J# s1 {' x
) f- M) Z2 t' B- y5 zstatic void __exit led_platform_exit(void)
: M$ }% N6 \/ o* C8 a: k! O{
! m3 X6 ]; o) s( R platform_device_unregister(&da850_evm_tl_leds_device);. k# P- ]3 S. B* u1 w% D
+ W+ x; h8 P/ v0 J o- ]. P: E2 J2 g
printk(KERN_INFO "LED unregister!\n");
; }$ p- f* ^8 g+ Q: X}
1 [" g0 b9 [4 z9 c' G" O6 }8 ]' p( Q, |/ ]
module_init(led_platform_init);
5 y, I i. T+ k5 \; smodule_exit(led_platform_exit);" }; S* G# G( e' ], Q4 y( X, c
2 h: R( ]+ L% iMODULE_DESCRIPTION("Led platform driver");
7 y# q3 \# v2 a4 UMODULE_AUTHOR("Tronlong");9 x% Y! I, E% a: s ~' E+ ^
MODULE_LICENSE("GPL");
6 B4 q% |4 N" j& `: `$ o$ r
* L/ E- \8 K' ` P |
|