|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" J9 }& n. x6 t5 `/ x& T% `
#include <linux/init.h>4 {0 p2 B2 f+ q# G
#include <linux/module.h>
( g; K( s5 n. p s/ d# Q, D#include <linux/kernel.h>
1 B. L: g1 Z u4 v8 t#include <linux/types.h>3 h0 \1 {6 |. K7 L) z
#include <linux/gpio.h>' U1 l; N! }4 Y0 z5 t. e
#include <linux/leds.h>
: S {. }: ^& T7 w#include <linux/platform_device.h>7 V1 f, R; J: k2 Z5 J
: i* G+ y @/ w( q1 Q& ]& G#include <asm/mach-types.h>
) e5 |) k1 C2 a. Z0 m#include <asm/mach/arch.h>
* j4 Y0 ~7 e+ a4 r7 s#include <mach/da8xx.h>; M7 l/ g: P$ w, I/ u" W8 q
#include <mach/mux.h>
) G$ r! G, N6 K( _5 _: g* W$ h5 m' S; N) p5 ^' h* N6 `; j7 F
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 l9 b0 r8 a! y+ k( _/ B1 M: U
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ B' V8 Z( p2 Z: P- p6 Z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)+ q6 q% H' l! B0 i9 c5 `# Y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 a/ M: _9 O* h! u' ~
3 h2 [3 y% M: t2 K: J
/* assign the tl som board LED-GPIOs*/
7 S& ]. h* L, Y4 ~static const short da850_evm_tl_user_led_pins[] = {# V, w; P4 q7 S
/* These pins are definition at <mach/mux.h> file */
B9 J8 a+ }+ v; j DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; z8 j; E- v" K9 }3 p
-1* H+ D3 E6 k/ _. [( n7 f
};
# p( N0 |3 `8 [8 v+ f
) G7 Q' c! T( \" l' D: \7 e- a* pstatic struct gpio_led da850_evm_tl_leds[] = {& H/ G, _1 w0 |* \! k/ Y' w
{
) z4 x4 a' V: x" x .active_low = 0,1 V7 c0 u8 K) M. Q0 M
.gpio = DA850_USER_LED0," z) l5 F1 P( j2 ^) h5 n
.name = "user_led0",8 Y8 _7 d. R5 H4 C% Y, d3 S
.default_trigger = "default-on",
2 P! ?& ]6 h2 h: _! x# a8 \ },
( B8 P1 }. L3 \& e5 _7 d {
) L( J2 e5 ~; e! i .active_low = 0,$ l- K, M# o4 R/ c. R2 [- h6 O
.gpio = DA850_USER_LED1,
1 k& ~: i9 r7 `8 F' F# A5 L .name = "user_led1",
: z; R( f. D) l5 ^: F7 r# J .default_trigger = "default-on",
+ c0 e# p% R% j8 s' w1 W5 J9 r },- B$ g6 }" ^! u: O9 Q
{
( f+ I. `9 S- L7 o: I .active_low = 0,
9 g8 B0 w+ d/ D8 C9 d p D5 t .gpio = DA850_USER_LED2,) [9 T$ N. Q) ?% Q7 G
.name = "user_led2",
. p. j) \" o. _; r) @$ O* [( D .default_trigger = "default-on",
4 K7 O/ b) H4 H7 g },
8 J7 P; r8 N; y# e& G1 d" B {7 t' q0 w+ u* K! t0 k
.active_low = 0,1 ^# X, j( S) n3 M
.gpio = DA850_USER_LED3,, r8 @# j8 x, U
.name = "user_led3",
# F( {0 j! t1 V1 F' A' k .default_trigger = "default-on",( j% O" @; J- f9 j8 g% o
},
p7 X! X! s0 m9 j0 S4 F; B};. c, a& ]$ n3 {" _
! X, J) w4 o0 n- y2 h2 q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 W- j6 U$ q/ x" B. }: W( a
.leds = da850_evm_tl_leds,$ @8 n6 \* }3 x! I5 f
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, ?% c6 D; X( m" K; Q$ J};5 c( L% e: ^9 J; a/ `# [+ G& h" D
0 f% _# y! L: |8 m8 N( O
static void led_dev_release(struct device *dev)
: Q( S# N( {0 T# ~9 N6 A. Z F{, c2 b/ H) v) d6 A' W
};
) h% c4 Q8 j# c6 ^$ O1 S' j) T5 _* S6 h
static struct platform_device da850_evm_tl_leds_device = {
b- Q R$ Z+ g2 C3 y .name = "leds-gpio",3 x- U6 K* R/ i2 g5 ?
.id = 1,: F# ^2 q6 y I1 d; d N1 S
.dev = {
8 A# O4 J1 T& A: Q .platform_data = &da850_evm_tl_leds_pdata,/ ^; r$ d1 z8 @7 h2 s; K4 j$ ^
.release = led_dev_release,7 e+ t* p4 Q' j9 V% |+ t
}. R9 s- k$ W5 s$ W$ \$ c
};5 h7 x/ e4 K; I1 |% K/ d8 x
# ?4 G" `) C6 Z% G2 a
static int __init led_platform_init(void)
% {/ w& t3 g) p, c( n{+ ~& i0 o7 t( ~4 d/ W+ ]1 \2 N
int ret;
1 n: J+ {( E) L+ `9 ?#if 0
! i( h# G/ N7 J. q; T! n ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* t: v2 W) k: P z2 {! O if (ret)
5 ~, N1 @5 s2 @% m6 u, t pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 B! e. r0 @" w; f+ z$ v! g "%d\n", ret);! C3 v$ p) {. l& z
#endif8 L* ?1 d4 j% J
ret = platform_device_register(&da850_evm_tl_leds_device);
0 S2 y& b! N) Z" ^# q; X if (ret)+ ~# P. W* F+ p6 i7 A
pr_warning("Could not register som GPIO expander LEDS");
" ?- p" Q/ I$ ~2 c else; e7 K. A8 t+ @+ y
printk(KERN_INFO "LED register sucessful!\n");
$ q3 ^) F- i/ ?0 x! q1 ?( w% Y" M! U4 e' M; F( q: i
return ret;
/ v2 f( k) c" \2 S}) B3 N6 r% z# t$ U
9 d( k9 b6 c2 M: K9 N# Q% n
static void __exit led_platform_exit(void)
4 z6 Z) \3 ?: q. b+ }, C \3 Z{
" f8 U; {# u! ^ platform_device_unregister(&da850_evm_tl_leds_device);
, } }% l: `- M* _2 f* o* o* H/ c- r
printk(KERN_INFO "LED unregister!\n");2 J2 h6 F6 p" O* D& r% R R& d
}0 f9 ]. X4 n7 B6 s& L) [3 q+ ]& t
# R# W0 d4 `- k( F/ c3 K4 c3 amodule_init(led_platform_init);
$ [$ x. r0 d, ]* |& Cmodule_exit(led_platform_exit);
6 S# s) \9 y# Q8 g# ?, C1 ?! l Z( ~" L5 X
MODULE_DESCRIPTION("Led platform driver");
) n2 T, z8 R5 `/ e- P! U2 [MODULE_AUTHOR("Tronlong");2 }4 z& [+ b9 [
MODULE_LICENSE("GPL");9 F4 |+ T' J& G7 r; U( R9 M
0 R2 q/ z- C( f5 v9 ? |
|