|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" t: b, u+ O" P4 ^* G) a. f#include <linux/init.h>
& J& k0 d! E' j. |& F#include <linux/module.h>
/ V- O* C; ]8 _% O4 {; ~# T' g+ }#include <linux/kernel.h>
! ~* s* U! w( b7 S. v/ d% n- l#include <linux/types.h>( d4 _5 P, i- e1 ?" G" d/ l
#include <linux/gpio.h># f: Q$ N' f) T/ V" J8 b {9 M
#include <linux/leds.h>2 u4 x; Y* T5 b# A! S; R D- G* L
#include <linux/platform_device.h>
+ G: l# D# ?7 B( ?3 Q
: n9 H/ q0 v! R8 F: G! A( b: w0 o#include <asm/mach-types.h>( L) K4 {* j( Z
#include <asm/mach/arch.h>
" j+ {& O O6 R6 E1 v5 F#include <mach/da8xx.h>
; k R4 Y( S+ K#include <mach/mux.h>8 \# ]" f! B4 D* K# e1 x
0 y0 J8 }. I1 U9 K% M% h#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 u4 A" V+ u1 B& M$ ^
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) e3 ]; l0 [, L2 k2 R
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 j: x' ]8 q* |2 ^& [+ ?7 M#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
/ W; ?/ i- W& O3 P0 A1 L7 J8 y2 _$ m N/ p" J! g4 N
/* assign the tl som board LED-GPIOs*/
! ~8 \6 m% \3 q1 M& t% Q5 }static const short da850_evm_tl_user_led_pins[] = {
5 t l" M% `) g2 m3 d$ n /* These pins are definition at <mach/mux.h> file */
7 O# G ^; {/ O$ E DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. m4 H% G+ M8 Q5 _+ ~! Y
-1
W7 r' r' [: ?5 T. T! ~1 s};
9 Y* i5 l5 Y% o) G/ J: H2 o$ a# r+ {
static struct gpio_led da850_evm_tl_leds[] = {
0 o q- R- K9 N, m, Q {3 B6 L% ?: B5 j8 P
.active_low = 0, ]4 f. ~1 M# O3 A
.gpio = DA850_USER_LED0,5 n% |+ b* k5 b
.name = "user_led0",, S* I: \4 D! `" f
.default_trigger = "default-on",# [- ~$ y( c* e
},
* M2 m5 |( O P& d {
6 u; n' _; t, o; i0 t .active_low = 0,
+ d( \. N# n/ u; m+ B- b/ Q# a .gpio = DA850_USER_LED1,
2 S/ [# ?6 v8 Q" C+ H% B! h! A .name = "user_led1",& c- v. Q" C: m) @; f0 ?
.default_trigger = "default-on",9 P# e6 Q8 x# U9 l6 v* C
},, Z; S. F; V+ }8 }( N5 @5 o( _
{
1 r( A$ U5 J0 H: G& H+ Y) e: ^ .active_low = 0,: x# g1 @$ S( i6 K: o
.gpio = DA850_USER_LED2,
4 Z# G# I: M! S. W1 i4 V .name = "user_led2",
! w5 T0 U- L4 Z .default_trigger = "default-on", Q+ j3 r! i3 h% p9 S/ ]0 G. E
},
$ s& ^) m Q: G+ a/ x: T {/ c3 T, G8 i) E
.active_low = 0,
$ L7 u6 O& g/ [ .gpio = DA850_USER_LED3, h$ r6 ]5 Q/ y I
.name = "user_led3",4 P1 r/ u* v6 p* `5 i
.default_trigger = "default-on",
& n; g! ]. [8 p! t% M# p7 B1 O2 J" F },! q/ d$ L: n( _& T. K3 j) B
};& V; p4 n4 T! n$ e/ {6 y* l h5 _
( H' X( ~ D$ b0 Q0 M; Z# x
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% k1 u/ F5 v/ h* ^ .leds = da850_evm_tl_leds,# s# S9 z' ~7 M k' I2 r2 G
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 W1 H2 P& z G( d# w};9 l- W! ~/ P. X$ s* A
* B% |0 d$ v( w# Y2 V) `
static void led_dev_release(struct device *dev)
" U/ A" T! r+ C* ^8 y" l3 i{( V# T6 W( y. G. F d8 X8 a9 b
};
2 r7 q e0 P7 G% \% [$ p6 T I: s
& e' P7 O6 `7 y7 Gstatic struct platform_device da850_evm_tl_leds_device = {7 u3 X! E$ _4 u% c
.name = "leds-gpio",0 B! q' T( l1 x3 N
.id = 1,
! f/ [) _) K* P# L% h$ P .dev = {
0 f' `- |( }/ E" Y: w3 R. R .platform_data = &da850_evm_tl_leds_pdata,2 y) N, Y0 b' G9 k% \1 s+ y
.release = led_dev_release,
& x- Y. f$ m. |2 N8 h% u }0 T+ ?7 s1 X, Q+ q x' A
};! I! V+ q1 V) Y
6 D3 H% T8 e4 m8 Ostatic int __init led_platform_init(void)
5 o& d- r' x3 w1 O( ?# D{
1 W: d0 w$ }( o) D/ t9 L% c7 z int ret;
$ J* J& b9 w* H+ T3 A#if 0
9 S/ e$ j+ z6 l% U" V, ^1 H$ Q ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 ^1 B* a0 ]- V/ i1 Z
if (ret)6 A# t; l$ S$ ^ V3 h6 X
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
4 W# J Y2 @6 [9 Y0 h4 F4 ^ "%d\n", ret);$ T* [/ I5 U- r9 U
#endif
: Z( T) ^3 s0 @' P1 ^ ret = platform_device_register(&da850_evm_tl_leds_device);
# A0 d/ p9 X+ d! F6 C if (ret)2 H( b. L' X: s# N6 c
pr_warning("Could not register som GPIO expander LEDS");
! {# e c+ M" z% a else0 L: F0 y3 x4 A: W3 H: r) a& b" w
printk(KERN_INFO "LED register sucessful!\n");
' q, Q& V* d' [2 P+ X0 S/ u/ [9 m( R7 O9 A9 M8 e z1 R
return ret;
! A, t- o; Q7 _/ [+ k0 y}( E1 W6 t+ O! g o8 M7 z: Z5 Y, E
- b" s9 T" q, U. y; |static void __exit led_platform_exit(void)8 e% N* [3 t; F$ L
{ ^5 x5 ]6 T! O, L2 J
platform_device_unregister(&da850_evm_tl_leds_device);
- K" a+ X: z( k! F- @' q; \, \8 u- V* C- C: }8 H+ \1 B
printk(KERN_INFO "LED unregister!\n");" [, |3 Y, d6 ^( _! j
}
6 o& u0 F7 Q3 C5 r! T2 ]! j+ _3 H7 B1 E$ |; W8 B# B* g& t
module_init(led_platform_init);# T U. e( L. j! H9 q2 [+ h
module_exit(led_platform_exit);" O* c' \/ [: ?/ T9 ]
9 h7 ^) w# i& T1 D- h
MODULE_DESCRIPTION("Led platform driver");
* x$ f# i4 Y l. M" d8 XMODULE_AUTHOR("Tronlong");4 n6 d6 X, \, f4 M/ k
MODULE_LICENSE("GPL");
* x y: R5 h V7 d6 I3 c6 Q3 n& V
|
|