|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. E x3 g. T5 I M6 A" M/ _" n! l#include <linux/init.h>
~3 T: W2 i: y' J8 p2 C#include <linux/module.h>3 A$ J4 l8 v2 N% X6 J
#include <linux/kernel.h>0 F B* L; P+ V$ O
#include <linux/types.h>
2 C: ?) {) T: B2 k( m#include <linux/gpio.h># y# u, b. e5 @0 F$ K
#include <linux/leds.h>
4 ~- u% ?( X5 g6 B- H5 M O#include <linux/platform_device.h>% \2 z6 ~+ r& [
4 [2 i# ~2 q' V
#include <asm/mach-types.h>
( l! T p J% E#include <asm/mach/arch.h>+ }! v: F# D/ m: n9 J+ T+ I
#include <mach/da8xx.h>
, _' r4 o4 \( }; J f#include <mach/mux.h>: q9 X' \1 m8 F- P
& V7 D# V* P7 g* r
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ P) z7 M, }' e# q T- z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ r7 B( C% V# C: X0 h2 l8 i. U
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( z Z% s* k$ J/ b) C" L1 w( {: `7 h#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# Z3 i: O! R0 Q0 O" r- b. W c9 Y/ h7 w6 t# W/ ]9 ^7 H
/* assign the tl som board LED-GPIOs*/
) g% [8 _! c2 N; f1 U( h% Pstatic const short da850_evm_tl_user_led_pins[] = {2 d3 w5 b, g$ B
/* These pins are definition at <mach/mux.h> file */
9 \, V) u3 F/ ]' G5 z, f DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, }7 @( {; i4 {1 j+ L5 O -1
% [( L3 N' J- O% Q* ^8 x};5 W4 e$ h7 A( d2 C
9 e% C5 w8 q" d
static struct gpio_led da850_evm_tl_leds[] = {5 z6 d, E0 d5 R4 v4 N) J2 w6 |' h
{& L4 ^& O# i4 |7 n* f
.active_low = 0,
) G1 a9 b; `: i5 L+ r5 c# ? .gpio = DA850_USER_LED0,; b o1 Q( I/ \
.name = "user_led0",& |1 Y' k. Y" Y+ W* g/ U
.default_trigger = "default-on",
" B% q8 U L; h# E5 @" B0 H }," `" h* V. Q5 G5 h
{
0 |% O- n: F' n: ~% ]3 G .active_low = 0,8 _0 K' w: }$ |) l
.gpio = DA850_USER_LED1,# T5 Z: Y3 q- {* a0 p
.name = "user_led1",$ ?* Z0 U& j, ]9 A
.default_trigger = "default-on",8 h& }- K8 I; Y: X4 o- ~7 r2 I- w
},
$ P' W& b o" B5 F { d! O4 Z1 [. b6 M, E9 p
.active_low = 0,
- T; _( Z# g' Z .gpio = DA850_USER_LED2,% K2 H+ @0 u+ O) X
.name = "user_led2",
! |8 M% g; |+ w. j/ ]5 X! _ .default_trigger = "default-on",9 M/ v# K% P% d* R& W2 O6 J! i
},2 D* ^' G: O2 K' Y
{
' e2 n8 d. A, p/ v9 Q r .active_low = 0,5 `5 e. E3 p* z- Z9 t
.gpio = DA850_USER_LED3,+ Y5 \) ~; Z. l0 n
.name = "user_led3",
5 D0 w$ }: b- ?( ?$ G$ _ .default_trigger = "default-on",
3 [5 k4 \- T% R( d2 p9 E& u },2 J3 a* }. u) L/ ?6 S
};3 K# k$ w+ C! V
% D' E- H. P' kstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* t; n7 o' p: b9 X) V1 v- P
.leds = da850_evm_tl_leds,8 E. d* l6 }* q$ J" D5 z8 |7 e$ e7 I
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),& B& H6 n% [ H7 y! w
};
) j+ D# g+ ]) m' z. `+ M# n2 s& `
6 O. W+ N& f: lstatic void led_dev_release(struct device *dev): _" m/ P8 Q7 Z0 y
{) K6 |1 {8 p1 w1 v8 q% k# ^
};5 V, p! ]. F( b/ e) }
# B( w U$ m) P. ~. s* Xstatic struct platform_device da850_evm_tl_leds_device = { Z d8 y2 Y) ]9 s/ D K
.name = "leds-gpio",
7 w/ y) s, u) e C$ g .id = 1,
- G8 C y( c- U) T* T .dev = {
: T( K7 l0 a4 ?* X .platform_data = &da850_evm_tl_leds_pdata,
% F+ L9 } Y. F- v4 J .release = led_dev_release," g, w' B+ E! K3 Y
}
% {: A4 H. Z- L$ q2 o/ u7 o' d};
4 x- I$ w/ h: k/ b5 K& q8 U
7 c3 i1 j5 K0 A0 Wstatic int __init led_platform_init(void)
# Y( p0 |( L5 H/ M2 H6 X8 W{, `- }& \5 H. k
int ret;4 e; v2 e `9 B; [
#if 0
7 n( s( Q4 p3 o; C% T3 ?9 { ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) d6 _7 |$ A- b# M/ j5 Y/ M
if (ret)
3 G$ L2 |6 `% D9 ~3 q8 r7 o pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! G- \2 v/ x. c4 X, f: [1 R
"%d\n", ret);
$ n; M+ G5 n J9 d& X5 [" g#endif
s$ H1 F$ H/ e8 w7 k# A5 b" Z9 f4 \ ret = platform_device_register(&da850_evm_tl_leds_device);
5 ]) N$ @ u$ X! p/ _. l3 i' } if (ret)
: h8 _6 x/ T1 g7 i% v" ]- k |7 m pr_warning("Could not register som GPIO expander LEDS");/ ^& F" T0 p8 B
else `" p, e; R( V4 \& l3 [
printk(KERN_INFO "LED register sucessful!\n");$ n& X g3 A9 v- @: C* U$ H
8 d1 T) K; X- g, ^) f; @2 l
return ret;
/ E/ h! {: W% Z+ j: w/ C}
, c8 r1 a2 H4 W* ~+ \( L& p7 ?4 G: H/ b% ]: r7 |( T4 I* Q
static void __exit led_platform_exit(void)
8 N3 U9 b( f1 F, X, d+ J+ e{
: |7 k X* }" y/ x2 Z, | platform_device_unregister(&da850_evm_tl_leds_device);
4 ^6 l5 p9 B' d9 W) I1 `
) y7 Z) b* V( N; x5 r o$ M1 A- P printk(KERN_INFO "LED unregister!\n");
: b/ r5 u$ C, x}* u2 c" z4 M. q2 b
' A; n# w% ?* }2 s2 y+ F
module_init(led_platform_init);$ }0 K8 L7 N; S" z9 m( U
module_exit(led_platform_exit);
, e, l- h" w( z* K
1 d9 D. s2 {6 `) `6 M% fMODULE_DESCRIPTION("Led platform driver");
# @0 v6 J+ \& s% H9 sMODULE_AUTHOR("Tronlong");
$ Y. i8 f! O9 }7 |3 G" u6 oMODULE_LICENSE("GPL");8 N9 J1 d. w, z/ b2 [" u' Y( m
) B# U1 l! P$ K* W( [6 _6 v |
|