|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* m3 Q4 _+ k8 F4 r#include <linux/init.h>3 l0 s9 C* u/ S: L( D
#include <linux/module.h>* x3 m4 O, G5 }. K0 ?( {
#include <linux/kernel.h>
& E2 T! N6 b8 m/ A#include <linux/types.h>) C, {+ P/ G. _; L U% d; i
#include <linux/gpio.h>
. n1 e: \, f# U3 a#include <linux/leds.h>( H& R3 o f( K0 N0 u
#include <linux/platform_device.h>. j& l$ h9 I7 S, o9 i0 ]
! ~! N+ C( C! G7 o/ @" P#include <asm/mach-types.h>
a2 k7 P/ S1 r#include <asm/mach/arch.h>; l* F0 i2 v4 F) D9 W" U
#include <mach/da8xx.h>
" m& `' h2 y+ d/ [' v# X2 H- e#include <mach/mux.h>
9 D& C9 J: O+ ]- G& z
/ y, i7 y/ j7 k7 n3 U8 o& R#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% i0 n4 K( M' I' d2 I* ?" ^#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) ?, `4 b* L# i) ]6 @#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 z5 C7 h- ^8 }; t
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# g3 Z1 h/ y3 p
5 B8 q* U' R8 e5 ]" z) t$ v/* assign the tl som board LED-GPIOs*/
5 _. G% |! ~4 D. c9 V5 }9 |static const short da850_evm_tl_user_led_pins[] = {
; r6 p4 [* F* |9 \' v! G /* These pins are definition at <mach/mux.h> file */
% E. y G+ a4 Y* J DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ P: r4 B/ C! ] -1 k* S& J! M3 Y8 @' ?" L8 N
};* _0 d4 T1 x' l
7 {4 f! C& f6 D9 q/ w* x! o
static struct gpio_led da850_evm_tl_leds[] = {7 T) X, |3 y; f6 \5 Z7 b& c
{% [7 p5 l! \$ a% A5 M" E
.active_low = 0,8 @+ u: r6 z; b
.gpio = DA850_USER_LED0," V5 |! v5 a( Q9 `( Y
.name = "user_led0",4 r6 w. _: N; K7 o+ L7 g1 V
.default_trigger = "default-on",
8 h* A; O( R7 p },3 _1 h- f8 y- k- p# p
{3 r- U y# ?( `' Z. O' @
.active_low = 0,
2 ^7 \' d: d6 T0 e. ]2 F: z! ` .gpio = DA850_USER_LED1,( O# W* j6 f* b
.name = "user_led1",
! J4 l3 M2 w8 H! [ .default_trigger = "default-on",
3 N/ n& b, q S9 l( \ },
( |$ u3 ?- j% p5 r# ~7 p {5 v: z8 N% j" j/ u+ t5 g
.active_low = 0,
% }8 a9 z0 n$ `5 q: G6 k .gpio = DA850_USER_LED2,
* `/ s3 M1 v" J, t! O0 c .name = "user_led2",
( ?7 A+ F) C$ [' ^. f8 _ .default_trigger = "default-on",
7 n6 ?9 {$ R/ M4 ~ { },
) M" J, S% T1 `' s/ f% j {# y7 U. F4 B8 |: d" c9 E
.active_low = 0,
. _" L/ u' Q/ _3 z' m9 H; g .gpio = DA850_USER_LED3,
2 ~9 f9 p& [1 Z8 Q6 k .name = "user_led3",
1 D( Z+ l" k- @" g% w: i& r" A .default_trigger = "default-on",
; g& ]- U- A7 q! } },8 j9 D" _( I1 h2 H# q+ x% I
};: H2 v4 E* P# ~7 X$ Y
. _) A+ f* K! N; X, `5 D0 H! k
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = { J$ x2 ^( Q! ~/ z/ Q
.leds = da850_evm_tl_leds,
. Q d7 y* Z3 t .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 `* |; P$ U0 [3 W5 b8 _};+ H8 s: C2 V0 Y, A
0 F/ m( e; q1 _3 `. b
static void led_dev_release(struct device *dev)- O( }( F6 ~7 y( h2 _
{* A$ p1 _+ u7 ^4 ~# Y3 O8 `- j
};
9 L0 i' }* P. Q/ m+ M, b9 {* ?5 I3 [
static struct platform_device da850_evm_tl_leds_device = {( e/ P2 ~& D/ l, s6 a
.name = "leds-gpio",& p" A4 z) w- N
.id = 1,. i+ L' H" l+ i" U, A, A
.dev = {
+ T; u a ^3 Y9 e# b! V .platform_data = &da850_evm_tl_leds_pdata,
, x- D- h/ I0 b, E7 J8 h, S& z .release = led_dev_release,
8 @* n8 [4 z' Z* u0 |' Y7 Z+ U }4 G( f: f S1 H) w
};' T/ a+ J) ~6 p$ J0 n
4 R# D5 L* s! k0 C, f3 Z* R/ _2 ~2 Bstatic int __init led_platform_init(void)
& p# X% a4 B4 X{8 m0 l- X4 x# z
int ret;/ O+ }1 B6 i5 N# a) j" r
#if 0
! v% A1 Z8 r2 K. _ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# g' O8 @; [! v8 u+ j if (ret)
, G3 J/ {! y$ U: q ?$ ~7 F pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ G/ r. d E5 a" G+ d f7 k
"%d\n", ret);
; o9 s' g R2 j* k#endif
* {$ o! ` k. }% v: i3 m( H- q ret = platform_device_register(&da850_evm_tl_leds_device);' W6 e, r6 J3 ]( P* M' {
if (ret)' [; I/ O4 c$ g; `" }
pr_warning("Could not register som GPIO expander LEDS");, k* p9 V# J& e" a. ~
else1 Q7 X; R; [# }' W
printk(KERN_INFO "LED register sucessful!\n");
( m- \" z6 p0 [0 g. J2 ^0 o7 B) S7 i
return ret;* o9 j- ?9 u1 Q, ] e- { K
}
* ~9 d7 S+ i4 h9 f6 }
3 t# h- J" O* b- s' q9 k/ Estatic void __exit led_platform_exit(void)& k! p; \: G; m$ y" }3 j
{
( Q! y B' T; H# R0 q% n' P platform_device_unregister(&da850_evm_tl_leds_device);
. O$ s" A, m3 l/ d& X
0 e3 Y1 U" K; S: d5 v3 K printk(KERN_INFO "LED unregister!\n");
+ y3 z: R B0 h6 ?3 s6 W) ]9 [}, }1 S7 p2 i( a" g/ B2 \, F n
& |2 w# @1 z# s1 I" @" J
module_init(led_platform_init);4 b. A4 ~& |1 F' V: a9 N
module_exit(led_platform_exit);8 M$ J' A2 f1 s' B9 Q" `
2 r1 g9 Z* ^1 d3 P1 SMODULE_DESCRIPTION("Led platform driver");# {* H w/ w6 @/ m/ l5 T$ W9 w4 R
MODULE_AUTHOR("Tronlong");
- v- M: k2 {- M3 J+ TMODULE_LICENSE("GPL");
7 A& u' W3 C- A9 M1 q
* `/ }! y1 ?" u) l c1 q |
|