|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ d' O. e% w% _3 N
#include <linux/init.h>
" Y/ d* H- q @3 k! V3 E' ?" }: T- O#include <linux/module.h>
2 ?# f9 o/ i/ Y+ @8 W#include <linux/kernel.h>
$ p+ F( B# `# b7 @5 O#include <linux/types.h>
~. H( z7 F: Q+ T/ ?#include <linux/gpio.h>
9 }6 s8 o% `( y+ \#include <linux/leds.h>
/ m) Q2 F- {2 i7 b; g4 C6 _( ?#include <linux/platform_device.h>
1 v: D( u% [0 m6 H' D% E
9 G8 ^! ?1 A! y- H#include <asm/mach-types.h>* t: x6 j3 h! K, m$ j- ~
#include <asm/mach/arch.h>9 X9 S% y- ^9 P* B; ]" Y
#include <mach/da8xx.h>: }& @7 Z2 h6 R' p
#include <mach/mux.h>" M8 B6 ^ C% M0 u' i
$ }; Y+ k4 A7 ?' Z* I8 ~# `#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)* A( E9 p0 [3 C' h* h
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) \9 f2 c8 ^) v3 {! D; y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
- a# Z$ E2 A8 a* `% @9 w5 C1 `#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- Z0 F* l1 q: H4 L% g1 o
4 |: @5 W# [' f$ N/* assign the tl som board LED-GPIOs*/
, I# ]' ~; v) B1 h: n/ o% nstatic const short da850_evm_tl_user_led_pins[] = {
8 h4 ]$ J+ N+ l5 B3 K2 K /* These pins are definition at <mach/mux.h> file */0 H" r$ Y O8 ~
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ r1 p1 E3 O' _* S4 V: w! f; m -16 `5 H8 H+ _8 a( ?$ d2 E
};; ]9 R+ R0 \. g; M" y
9 P/ h0 \, |4 h1 J) G+ |. ]
static struct gpio_led da850_evm_tl_leds[] = {$ `/ @( {- n# C. y7 J
{3 A; H6 s7 t, G) c, o2 R1 C
.active_low = 0,8 w8 h7 \) d3 p) ~9 l; I! Z! x" n0 T
.gpio = DA850_USER_LED0,. L5 ~& W+ Q% j
.name = "user_led0",$ F' _0 s! _# F( v
.default_trigger = "default-on",
, H5 e# K- b( a( e$ S },/ o4 p# B' q, m9 i9 s$ S+ `) C
{# y# F/ a. f! W4 M
.active_low = 0,
* ^+ A% a# ~# I4 y8 P3 z .gpio = DA850_USER_LED1,& k5 x" I& O) R6 [% @) ^* e
.name = "user_led1",1 n" K! y" u' C
.default_trigger = "default-on",% ?; Q2 x$ j$ ^9 C
},6 M- ^$ a+ n( D/ Q% e' f
{
@ S9 v1 z& C- m9 `" U. O: [ .active_low = 0,* J4 M1 q9 p- e% k4 d
.gpio = DA850_USER_LED2,9 G$ X& E; q1 V. O
.name = "user_led2",
% x2 s5 J: Y6 }' q; ] .default_trigger = "default-on",8 D4 H+ N5 W# q$ o9 b- v
},6 P7 ?1 Y/ B* ?2 B" \* Q
{9 @" \5 G/ S M+ n
.active_low = 0,
2 F) H3 d2 H( b! C) h0 q8 u" t .gpio = DA850_USER_LED3,6 v: z3 M# H f- G/ q% o1 f& F6 b
.name = "user_led3",
+ z: `' ~0 }. u' d$ I$ Z$ y8 V .default_trigger = "default-on",3 p; [" h& D9 w: H' `' T
},# k1 _6 w7 x) P9 M4 g
};; m. b& e X" X" K. t2 G8 G
- z/ _# d: v( {( X% Cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {5 A8 a3 J$ ?+ O* l; F
.leds = da850_evm_tl_leds,0 t7 \! N/ N: R2 f* v3 w" q
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 R( k% \* v1 D# K' H1 o h1 ]" d9 V
};
/ Z$ i& w; X0 b: u% | }, s% i# w8 @7 `
static void led_dev_release(struct device *dev)
Q. p- p1 g. }3 n! g{
2 p" c0 \3 ^- @( b- g: E* ?3 V};
4 d% A: s3 D" I) U% P! C/ @4 c# w# l
static struct platform_device da850_evm_tl_leds_device = {
2 n( r( A% v7 [7 k& k- J .name = "leds-gpio",
0 h( R" T/ F7 T1 V .id = 1,
6 @" R2 s( j: V" n4 t .dev = {
9 g9 F4 ?) |: Y2 U; r" j8 B .platform_data = &da850_evm_tl_leds_pdata,3 n# S7 {& ~5 ]. l: k! I) x
.release = led_dev_release,' u. A7 c5 O9 t* S5 B4 c
}
* q5 j% i, v0 {5 x7 k% G7 p* }};+ w7 v2 P7 K0 g
% G" L# o% C. v# ?# W" m9 E4 x
static int __init led_platform_init(void)5 r; L; [ P; `3 B. w l6 J
{5 J! k+ O8 J; L6 n3 O& n
int ret;
; ]7 v: u2 i( b# g6 J#if 0
! ^. \# O V i: Z( f ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
. S0 U/ z6 T: j( R' M if (ret)6 G" _$ ~ s/ ~% S6 n* g
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- V3 q+ S8 k. b, \0 D6 |2 r
"%d\n", ret);1 x- r& I( e$ |! {5 k7 z2 e. }
#endif! Z( C. k7 S9 {) H. k
ret = platform_device_register(&da850_evm_tl_leds_device);; x/ F' J7 V% v1 y; K+ U5 ?/ s- m3 n
if (ret)# b- i0 v, ?8 N6 u# ^
pr_warning("Could not register som GPIO expander LEDS");1 Q' ~7 ?. g1 T
else1 Z( O1 r P9 {3 `/ x o$ R
printk(KERN_INFO "LED register sucessful!\n");- p! ~$ O. [4 ~
# v* f6 Z- F* a! |. Z( E/ N- L return ret;/ l" |* k2 ~$ }3 L
}7 c: o4 y) N9 q6 C3 k2 E, u! L+ V
1 u, ^' A* B6 Jstatic void __exit led_platform_exit(void)
) L8 C1 ?3 a+ m9 E! V j4 {{& B- s, ]- U; m% o( h/ A- t$ S1 I: L
platform_device_unregister(&da850_evm_tl_leds_device);
8 j8 Q, C6 T9 J6 x, E4 n' C- P
$ M: v+ M) S% q3 k( b printk(KERN_INFO "LED unregister!\n");! Z% {. M% J W( A( Y1 |4 K9 U
}
% j$ Q: \$ q% I) X( M% W. t* n: L) n8 |' w# A6 n
module_init(led_platform_init);6 `, n, ^9 T- M' X
module_exit(led_platform_exit);1 H4 B2 f6 a6 q7 s9 {+ D
2 T, F5 A: ` W0 lMODULE_DESCRIPTION("Led platform driver");
1 ^* L- A+ [/ G6 zMODULE_AUTHOR("Tronlong");- Y( ] ~0 f' y2 ?4 d2 {
MODULE_LICENSE("GPL");
. D$ f% x' j4 @9 b, b9 e
9 \/ y; g+ c7 r( T7 r0 | |
|