|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% e' t: u/ M% ? t
#include <linux/init.h>+ K9 a$ t9 T; N- ~
#include <linux/module.h>, n* h' F4 J" u. @: H2 @
#include <linux/kernel.h>
: W# t+ m9 T" s" J; B# H7 D( K$ b#include <linux/types.h>3 e0 e# D( q/ j |* G& ?5 c
#include <linux/gpio.h>
U* Y6 V! y2 q- I9 l#include <linux/leds.h>1 x- D; P0 B T5 R4 b6 X/ C- C& m8 e+ d
#include <linux/platform_device.h>- n4 I0 v- a; G; X8 k
& p* `7 U2 g6 y4 [6 i0 j: G& _
#include <asm/mach-types.h>
- B' ^- D6 D# y$ }#include <asm/mach/arch.h>
8 R! g. p4 K2 T6 X" k" i& b#include <mach/da8xx.h>6 \, ^+ n A, X8 d3 p2 I
#include <mach/mux.h>
" a/ k9 A' G1 R- R( x! @5 k
* Z. T9 i. ?. I#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ K. x3 G9 f5 |: L6 s# \: Q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. R2 y1 l. Q0 b$ s#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 e/ x( T/ I* T! ~#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 r& a4 y! k* N! z: s; m7 h
' ]1 q1 [ k8 M9 q9 e/* assign the tl som board LED-GPIOs*/) J( G. |2 O8 P6 F+ s
static const short da850_evm_tl_user_led_pins[] = {* \" s' n5 z, G% E& w
/* These pins are definition at <mach/mux.h> file */% B. k( C" N& M0 g
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
! _ W* e! w! `4 R- Z& g; J5 |0 \ -1' V( m4 x& ]/ a1 }3 Q0 b/ ]
};
. O- ~: l }9 a i& T3 _+ H; e$ x6 }: \: s! C
static struct gpio_led da850_evm_tl_leds[] = {+ C* i/ P+ v3 H% E K
{
" U! ?# b8 z8 V- Y .active_low = 0,
' q1 o/ z* z N3 }8 W( s .gpio = DA850_USER_LED0,4 T7 I( M8 t/ B3 z! b' U. D
.name = "user_led0",4 Y: h' {$ Q4 s
.default_trigger = "default-on",
- K, m3 W# _ }2 l9 _! k0 G: } ^ },
% Q8 N. m$ v1 h6 u+ h B. I( {5 ]* w {5 ]4 L, s6 y! `: w. a6 [
.active_low = 0,
' i& v; [, B% V6 C" ~' d! Y .gpio = DA850_USER_LED1,4 m I# S5 j& h0 c* c& R0 ]- ^5 Z4 ^; ]
.name = "user_led1",3 h( T" A* R5 P8 ?( N+ w
.default_trigger = "default-on",( a: ] B8 d* B8 N
},% x1 N5 c! w) B
{! q2 |) O7 {/ [" q2 k. j: ?6 k
.active_low = 0,
3 |( j3 B: U" Y .gpio = DA850_USER_LED2,
) O) Q# K% X1 F .name = "user_led2",; k/ G$ ?& r: |; Q: r/ ]: z9 g, [+ U
.default_trigger = "default-on",
# w7 J7 s! m0 b- s },
2 Y- s, D$ Y% s$ r9 P9 W' g+ E* a {. g9 M$ [ @( H/ ~" }
.active_low = 0,
* G, p _+ [5 b' A2 L .gpio = DA850_USER_LED3,
1 z8 s2 h: N4 D v2 D3 O .name = "user_led3",
_: r- ]2 B- }7 X .default_trigger = "default-on",1 r) P* u% k/ G& r+ ~- D0 r. _+ O
},2 o. u8 B% ?6 g5 ^: ^
};: I3 B! k/ _6 _5 j y
9 k: u) P& q9 R: A; o& Y( vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) K7 I: \1 R6 Q q6 O7 M) s
.leds = da850_evm_tl_leds,
7 m% t& L# @$ v1 y4 F1 q: G- o5 A ~ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 H# @: i1 b" @
};
# ?3 ~+ e$ ~( K: A* p# T. x
# c! w- Y. d" p2 l: ostatic void led_dev_release(struct device *dev)
w8 o0 [! K, {* D) l3 T4 r$ P{
$ Q& I H2 `: K. _# k' b% s};
6 t+ t7 X. e( _' A5 v6 d- e" m! W# E
8 E) d0 v+ E4 A+ X$ ?static struct platform_device da850_evm_tl_leds_device = {; R8 o1 y! p5 C+ g/ {$ l' Z
.name = "leds-gpio",
1 R2 V) C5 J+ i3 ]% B6 D8 X2 f3 u .id = 1,
" y i! A4 r/ ]" } .dev = {
* Y: M/ m' y" U- K: H9 O .platform_data = &da850_evm_tl_leds_pdata,
% m% t; u1 q9 I# c9 l# [/ }( j .release = led_dev_release,
) o s" ]* e* ]0 J8 M+ v }
' C' L, z, z1 F* R- u};
' K2 M& D0 [& {: p7 T1 o \; z! x/ q* ^6 G% q* h9 [2 {
static int __init led_platform_init(void)
+ b- \( k+ h& A6 C0 \% @{2 ~4 f' ?& w" t2 Z- c( G
int ret;7 M' }( s1 l* S6 K9 s h
#if 0
! z; I7 X) R- F! q ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ }6 h5 Q7 R; u0 z, A( C7 R: e
if (ret)# m: J8 j2 T' R6 _0 X% X. E; p% u
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"" f v1 Q/ v: L$ e
"%d\n", ret);
5 w) D0 k- M/ h2 s% T6 N5 f#endif
" o) J% J( D5 S: e, [' _2 E$ I ret = platform_device_register(&da850_evm_tl_leds_device);
( x; s( w: z! ]7 H if (ret)2 A# a0 E0 d. f) Z( H* ~# q
pr_warning("Could not register som GPIO expander LEDS");
. N& s1 Y1 ]& I. ~) u else& K! V2 `2 u) j: k8 R! T2 r
printk(KERN_INFO "LED register sucessful!\n");
( [+ k& Y& V K O; z9 \' n' x; v! F
' i, c5 z: p- f) k+ C1 F; K return ret;+ }. F0 M' Q0 Y, P
}# ~. k5 l- v9 \9 }
8 k& O" p$ g3 n- \; p8 i+ I) a' h
static void __exit led_platform_exit(void)% L% |7 Y* s, y- q: f
{
0 }4 _! v! L+ q5 x platform_device_unregister(&da850_evm_tl_leds_device);
2 x$ ?4 v( h1 X
( V4 j7 r8 G8 Q7 m8 s1 O printk(KERN_INFO "LED unregister!\n");* i6 a0 j4 i. U- A
}
8 s1 Z$ \. o; d& f4 p7 r4 G/ p# n! d6 L7 j" D- [5 h
module_init(led_platform_init);
- i( ~$ W+ X5 U4 ~" kmodule_exit(led_platform_exit);
) Y+ Y& _* v3 Q. W, D
4 t# R2 s9 b& m) _& `MODULE_DESCRIPTION("Led platform driver");
" `* U. c! M. z2 v, _$ DMODULE_AUTHOR("Tronlong");
. l. C/ F8 C$ Q6 d- D7 PMODULE_LICENSE("GPL");! m, `* N: R( x8 E4 w7 Y; S0 F
: }" @9 `: V# H& G K! T |
|