|
|
求大神给下面的程序做注解,请稍详细些,谢谢。$ `2 Y- Q9 r ]+ `3 D
#include <linux/init.h># e7 j9 n/ Q" X _; q T8 C3 g2 T) Z
#include <linux/module.h>
* P, q8 B. g1 z( q' h" ?9 V#include <linux/kernel.h>' K- k3 T9 z5 R# J# x- t
#include <linux/types.h>
) b" G0 z" h5 t, I4 k& s#include <linux/gpio.h>
1 n+ T8 g1 \ p0 i( K. r' O E#include <linux/leds.h> ~; }6 U# [7 K1 b
#include <linux/platform_device.h>
( @% W4 ]& R! ?6 ]% X$ W
8 B6 x0 E; V8 O/ G4 \#include <asm/mach-types.h>
( @$ {0 j+ Q9 f% @$ _& Q#include <asm/mach/arch.h>
/ g' F# o. X/ W: [0 W#include <mach/da8xx.h>
7 O. x% i" x w$ D" y#include <mach/mux.h>
: q$ \. z0 |# c2 d, q+ z2 R. K$ x
0 H# p2 a! o3 T" N7 _. I#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- B$ \" x3 `! g- l3 r) b' q$ Q0 S#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! ?4 d, ?, @0 \) |8 p5 |9 q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 `% w4 Z' M r# Q+ G9 x#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( m3 z. i' Z' g: r' J, q- S1 t! M7 N* R
/* assign the tl som board LED-GPIOs*/% X( e3 `- T7 i0 s0 c0 }
static const short da850_evm_tl_user_led_pins[] = {' W, R {& ?1 N: k- E
/* These pins are definition at <mach/mux.h> file */# A& _8 B- N% N# \ g! _! k
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 K7 m$ o+ I, `7 [
-1
7 [2 @/ f, o# E. d% V1 a4 i8 E};* u% E. i5 N7 v* f W8 ], v' E
2 Y& s) h$ _, L8 Istatic struct gpio_led da850_evm_tl_leds[] = {2 G9 [: N' i& p7 x% g
{4 _, n, O1 l. o9 h4 t9 {
.active_low = 0,
& z8 j6 I; ~! Z8 w; f .gpio = DA850_USER_LED0,) K$ b1 j! W3 ?% z0 E
.name = "user_led0",
; t! C0 C& L+ U .default_trigger = "default-on",
4 v1 R7 T3 h6 z" {) a+ r },
/ |/ J; s/ z+ L* b0 K# I8 F {
( }6 s, k/ ^2 v& c .active_low = 0,
3 ^) f4 \1 M' ]! t0 k .gpio = DA850_USER_LED1,
$ P6 v9 I P/ t" |0 c d6 N4 O .name = "user_led1",
( y H) F2 M# ~0 r .default_trigger = "default-on",
0 i7 ~: p+ o/ M$ p },$ ]% J. P' N' x$ Q
{% s/ k! P& b. S; u
.active_low = 0,
9 Q$ x! _. t/ B( Z- `/ ? .gpio = DA850_USER_LED2,
2 W- I: i1 A. Q. S .name = "user_led2",
% K! @" V, Z! h .default_trigger = "default-on",
; t6 `8 K1 t/ M* J' y" t R },
: B$ T9 o$ V3 N. _; u {: k6 c$ n' X' a6 p" [2 Y
.active_low = 0,0 [- x1 z5 o; K* Y4 i7 U/ n9 B7 L
.gpio = DA850_USER_LED3,
9 L+ f$ B# t# q$ j' P8 @0 m8 l .name = "user_led3",4 o. r! ^: X' I/ T( B
.default_trigger = "default-on",, e% u) D/ x) ~5 ~! o
},
9 N. e2 T: s6 r; l k% N5 H; O7 I};1 d. c L6 a% c. \+ t$ } O* S
& N0 O6 `1 L( b
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {5 z- o0 w- a, u/ R: P
.leds = da850_evm_tl_leds,
9 a: ~8 L8 |9 {' @! J6 H .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 Z& ] s1 M2 \- d};2 Z( [: z- ^) Y% R6 a1 x. {
' a. }) t$ O' J" K: Tstatic void led_dev_release(struct device *dev)
2 W0 W* o6 h) r{
; o! s7 i& h. f3 z8 w" d9 Q7 {};
! Q6 w: y4 ?8 l# k+ L
3 }4 L% e- ~/ v6 F; A9 E0 ystatic struct platform_device da850_evm_tl_leds_device = {: b3 a/ p$ D8 P* C: }% S
.name = "leds-gpio",
0 l$ v+ O+ ^& [ .id = 1,
- f1 G: w& j8 H g' C8 r) R .dev = {
) T1 {) P) w% T5 y1 ~2 V; e! V9 P .platform_data = &da850_evm_tl_leds_pdata,: F E6 E0 n9 r" ~
.release = led_dev_release,
L" d. R1 y. c8 v }6 l: B+ R$ ^ Z; W' M8 \
};/ E5 N7 b* u1 C8 Y* ?
a8 }7 \$ h2 Z/ @) q: I9 q: f! A
static int __init led_platform_init(void)
' n+ c, D$ a( \4 _* f( [2 x{
4 _, }* z1 H# R0 T% Y int ret;6 i" Z3 }* P) e) S+ G" x
#if 08 K/ ^; q- s" R% l. s9 }
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) H$ E0 ?, r7 I8 ?0 W& v7 Y if (ret)$ e; B( ~3 J! U' }' c8 n
pr_warning("da850_evm_tl_leds_init : User LED mux failed :": `. X+ g0 o, ?
"%d\n", ret);* O3 @& ]! ]% b z4 v& Z
#endif
) }9 j* V7 J8 m" r7 c& t5 t ret = platform_device_register(&da850_evm_tl_leds_device);* o# B( l! G1 |" X% Z
if (ret)( j) O C3 \( x4 q) L
pr_warning("Could not register som GPIO expander LEDS");
' P. X% O3 V! d8 q4 B1 m8 l else
( m2 D! Z( t' n" @ printk(KERN_INFO "LED register sucessful!\n");
( H3 @' @# y2 c7 A7 s5 I/ j, I) G
$ E4 y4 O; C% x$ y8 d7 ? e* ~ return ret;
0 L+ }7 _+ X7 y l}$ D! p- J9 Z) a" C" B) t8 ]
. h5 Z4 f- o& m$ S* J% estatic void __exit led_platform_exit(void)
# T9 y# f* F3 k N$ ]$ d7 W{* h# V5 ?0 W( D7 M, V. w: h6 s0 n
platform_device_unregister(&da850_evm_tl_leds_device);
1 e2 ]+ m9 v# y1 m+ A* L8 f- B$ h( _' _
printk(KERN_INFO "LED unregister!\n");9 _ |( y- N3 w
}
) ^. N9 ]; m+ z- B* `8 U; A5 @9 R8 q$ T
module_init(led_platform_init);1 n* T- n* t& \ v: Z; ]
module_exit(led_platform_exit);1 E9 P& t$ E. l) Y1 X' j+ [
7 r7 k2 |/ A& n6 HMODULE_DESCRIPTION("Led platform driver");! O( X6 j2 ]1 z. x
MODULE_AUTHOR("Tronlong");3 D2 b( @! [8 @, d0 _# L
MODULE_LICENSE("GPL");
2 a, h1 [1 e/ H3 |& r
! h a W9 W7 Q2 w* ~; D8 k3 G |
|