|
|
求大神给下面的程序做注解,请稍详细些,谢谢。7 a5 q+ S6 f. A$ y) Z6 N
#include <linux/init.h>2 B$ C- I3 G, e: d
#include <linux/module.h>4 W: p7 E5 y. N# ?+ P! d( x" P, @
#include <linux/kernel.h>
5 N1 u( v2 z7 l. n, C/ K. ~#include <linux/types.h>& t3 w' I T9 ^( m
#include <linux/gpio.h>% ?( [% ^9 D! M& G
#include <linux/leds.h>
A7 n' @- D$ ^#include <linux/platform_device.h>6 r s" c/ P) F+ l# M9 d
& J4 A1 j) S, ` ?% G9 r, S! E, x" N
#include <asm/mach-types.h>" S, W% S+ o% Z9 g5 `* G$ _/ B
#include <asm/mach/arch.h>
. f V1 q# O g+ ?# q( L#include <mach/da8xx.h>4 h4 e3 G2 Q- e( I
#include <mach/mux.h>
/ n7 \4 _% T4 r. {$ T, ]$ _* N& L' L) B
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 x, F4 P2 C F, ?" L. N* v
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% b" r$ S9 @0 I! w( X) \
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)5 }6 I7 i7 p" L6 z$ E
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ |" p/ m( ^" ]# r# L8 q
/ J$ G3 c& l% W6 V* Q; z* t/* assign the tl som board LED-GPIOs*/
% X2 ]$ e6 f6 o& O' K2 j" l$ b6 ystatic const short da850_evm_tl_user_led_pins[] = {3 _# J4 V( V, F5 u6 V9 Z
/* These pins are definition at <mach/mux.h> file */' z% S! Q" N" |! X! ]
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 q! a8 y* v' y -1( C! l$ [3 O; W9 ~0 x
};' h" U+ n# T2 p
: i p' [. n5 p! K+ i. n8 ystatic struct gpio_led da850_evm_tl_leds[] = {
3 c4 x9 `# Z$ X0 {' M9 g {, p1 y `5 o* @* Z) q( r
.active_low = 0,8 @5 h8 T" `7 w3 i, q: ~4 ~
.gpio = DA850_USER_LED0,/ |, |5 h' w- G& W$ x# c
.name = "user_led0",
; o4 K1 i6 R% l. C .default_trigger = "default-on",2 }- P d2 O, [$ F. L
},; C! k' \$ _% c1 p v9 X: b
{4 O8 o2 J6 n, a0 ]
.active_low = 0,
/ ?4 K- w$ o( } .gpio = DA850_USER_LED1,$ a8 n9 E/ O3 E
.name = "user_led1",
, ]3 ]& m. K" t5 @# Q .default_trigger = "default-on",; W2 l( d7 {/ U% E
},& L2 ^6 v8 ?2 H8 L8 q5 q
{
) h4 {$ {) S7 k- l: d .active_low = 0,
( z2 L7 ^4 j. {0 b+ Z .gpio = DA850_USER_LED2,
! ]- R- J+ [& q7 w3 {+ @1 Q( q! h .name = "user_led2",
$ E8 b/ U' _/ x9 Q3 z/ N .default_trigger = "default-on",
* q5 r" R3 g0 L' e/ h },
1 T# n; Q6 l% _) q+ z! I+ t {
; m8 o9 K. r6 ^# S8 D4 b* q+ C .active_low = 0,
: b' @: i, \' [ .gpio = DA850_USER_LED3,
" e: ~) S. v& u9 I3 T G .name = "user_led3",% ^8 `1 M: k! E6 X
.default_trigger = "default-on",4 x6 \% N8 O7 @8 O! s( h0 Z5 f. b
},
/ J+ Y" S4 F0 ]# L0 f$ m2 q- g: _$ }};* [( M8 K- g" P' V5 N
2 [: a& G# k) ]9 z$ `" h' V
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" B: z7 r: u. V5 O
.leds = da850_evm_tl_leds,
. w$ z1 S B2 m2 ?3 Q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),- C4 I. e( _+ A$ j/ Z. G# ?( ]( ~
};
& f5 a+ L4 [4 x4 i0 F. P: D" t8 t
; `1 W/ v, j y( F: o1 pstatic void led_dev_release(struct device *dev), p+ U0 S# `2 ?- g& r' i
{5 T& W+ q B% m7 G/ I" t- ~& |
};
5 [; m* p" K' Y' j/ b0 O: i) s1 |2 w# Z. X! l
static struct platform_device da850_evm_tl_leds_device = {
8 w/ ~- a: U6 V& {. E6 ` .name = "leds-gpio",& z3 p j+ x" M. w* Y2 D5 V5 @
.id = 1," K, ?4 c2 g8 U
.dev = {% y/ L1 s) q9 D' b" r
.platform_data = &da850_evm_tl_leds_pdata,
; P7 c- u* z3 H$ D1 d1 u .release = led_dev_release,
3 Z2 Z) z% C' ~8 i2 W5 T }7 \& G4 @& }' G a
};
0 R' P; A% e4 K! f* j- A
8 U) L- ^: u6 G9 D2 s+ estatic int __init led_platform_init(void)
5 Z% H( E2 u% N. D. O; W{; U; g! [* i& Z$ N
int ret;
/ L# R! U) n6 q- q#if 0, K, _' W0 w. G, X
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 S5 Z: I: k) w6 } q# u if (ret)2 l! u8 g* a/ Q3 a; A: {* v& b- `6 d
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( b( Z% b: r/ Q# f/ H) j
"%d\n", ret);3 H9 u% ]4 l/ j
#endif% a$ G) T! G4 R) W) B( x+ X* S, ]- _
ret = platform_device_register(&da850_evm_tl_leds_device);
6 n; g5 h% x- x r: y( @$ X0 @ if (ret)4 f ~0 s/ [6 W# P/ S1 K
pr_warning("Could not register som GPIO expander LEDS");
, P0 C" q# v' }$ |- z3 Q3 ^. k else
, k( T6 ^3 {2 n% y printk(KERN_INFO "LED register sucessful!\n"); ^" \$ ~8 i/ h' E$ S3 d
' `2 L. Q2 C' K3 p4 K
return ret;
! j. O# C) m9 c. u8 y" x+ H2 y# }}
( K% |, E+ |7 ` x( E1 Y& P
# p0 \& E- e9 q+ x. J. d, ystatic void __exit led_platform_exit(void)
( L: Q# T5 A( m& h* H3 N{
9 c& w; R7 S5 r, O% C platform_device_unregister(&da850_evm_tl_leds_device);
* c$ T, f2 X" b( c# T! ]' K# X' k* h
. C9 E! p2 s" d) Z$ x printk(KERN_INFO "LED unregister!\n");$ M& \3 n' X. u; s, M1 B
}
9 ^7 m, C5 J4 ~- z% d% Z, z: j9 ^* \6 k+ Y6 q! b* X
module_init(led_platform_init);4 `( P5 ^6 u% T5 n( B
module_exit(led_platform_exit);4 d$ L& S0 N s4 v/ R- B% V( h. K! A
& k0 k+ ~: `9 F3 w: T
MODULE_DESCRIPTION("Led platform driver");8 Z3 I3 j6 n' z. M, Q; l+ ]$ M
MODULE_AUTHOR("Tronlong");
# I4 Q7 s5 ~- Q' ` ^8 X9 [MODULE_LICENSE("GPL");
3 m9 W4 g i1 I, X3 V$ J* ^% v# d( u# m: B0 e3 D1 U9 [
|
|