|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
0 s7 s: h5 P# Y" ^6 q- ]#include <linux/init.h>
$ P9 W z$ W, @( T7 |( d1 s#include <linux/module.h>
! _; {2 x2 d, v( u# @2 E#include <linux/kernel.h>6 _) G: Y! C+ y4 C
#include <linux/types.h>. F0 q& |5 G" y8 M
#include <linux/gpio.h>
{0 K+ R' O/ ~: G#include <linux/leds.h>
% M- b9 e& C; P: ^) b: K" R0 A0 D#include <linux/platform_device.h>
. G0 Y; V. ~0 }8 W, z3 W+ H: ?/ m, V! ?' S! z
#include <asm/mach-types.h> i& p. w6 }* `; O
#include <asm/mach/arch.h>6 X3 `+ l5 |" h# F
#include <mach/da8xx.h>" I/ O9 H2 ~' ~4 {2 f1 a5 D7 L+ m' o: E
#include <mach/mux.h>
# ?7 e4 A3 w( A
7 N$ n$ C# i! U- n% V! ^: Y ^: c#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! u9 D, R" X/ Z5 r5 ]5 V#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 K; c+ l4 |, c2 M( Q( I#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! Z' A" ]! o4 t; r# [! K, F#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
8 s3 f; l) Q# D2 }5 G8 b. A* }" e( }& L9 M
/* assign the tl som board LED-GPIOs*/2 X9 o0 F) _7 [1 W# V
static const short da850_evm_tl_user_led_pins[] = {
8 H" e7 u0 s, Y7 \. { /* These pins are definition at <mach/mux.h> file */
7 G9 A$ \4 @ ~ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 t5 F# R+ |; O3 T1 {5 _ -1
) L" N1 @ r8 ]3 M$ e, I/ ^0 T};5 U+ X0 T3 R4 c6 B& f
9 e; ^0 \: w8 \# H8 D7 I* v3 }3 estatic struct gpio_led da850_evm_tl_leds[] = {2 V* q8 J g! X) S, o. L: J
{8 r6 [9 V! N0 A! ?
.active_low = 0,- W N1 _3 b1 ^8 k2 s' g" Q, F. c* t+ ?
.gpio = DA850_USER_LED0, {6 [& [* p( q) F/ r# l$ ^- l
.name = "user_led0",6 @4 i' w8 P) b. A
.default_trigger = "default-on",, F5 d1 R' m' Y9 i7 B: v0 f
},
) X# D' X. M, \# [ {* d4 r# a5 X9 n$ ]0 d
.active_low = 0,
/ d5 W7 e& j% v; J .gpio = DA850_USER_LED1,
7 F$ a7 f' V0 _8 L: C .name = "user_led1",
+ x- F. V/ v. f# y" c .default_trigger = "default-on",
( n3 {+ a2 K$ N },
/ ~, s9 R Q8 A% C4 b {, m: X0 \/ ~; B( S+ z1 y
.active_low = 0,
( r3 S, F9 k0 V A. O& i .gpio = DA850_USER_LED2,
& g/ w1 Z5 P( h/ F .name = "user_led2",
1 p! H' c! G, C( x( ?! V. z, V: I .default_trigger = "default-on"," n2 e6 \9 R* [: [% R7 H
},; X6 g9 E; m" \
{6 F7 w" y: T! \5 O5 B7 X
.active_low = 0,& k- U" ?+ G! B9 ~. h% D' c0 h
.gpio = DA850_USER_LED3,
' Q( K+ R3 y" z* M .name = "user_led3",0 M/ W7 ^2 s& i& N3 \9 {
.default_trigger = "default-on",4 h6 O: y7 E! }* R o8 G0 u
},
4 E" D* c* g6 E};8 @" y1 Z+ p4 K+ m. ~: a
* A P' l9 d8 w9 }* |static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: G. p' u6 }. G6 N4 C: ?6 E8 H
.leds = da850_evm_tl_leds,
' `" x) E" L3 |0 x9 \ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
: z5 v, o& v( H/ F) l};+ i/ e; K9 S# T
. o# ^+ H0 A, f$ _, b* s* ]7 j5 ^
static void led_dev_release(struct device *dev); ?4 k" H/ g6 o& f4 m
{
4 D" m+ D9 t/ W* S/ p: l) c x5 D};
9 f7 o3 h$ N# R) m/ v, i& ]4 X3 }; a1 \3 t
static struct platform_device da850_evm_tl_leds_device = {$ @: w/ a" K! d5 w7 e z
.name = "leds-gpio",
+ [3 N, P) t, o* z# \6 v" V; V .id = 1,
) J/ m; {; ~4 y- N8 _- D .dev = {
/ M# i3 `8 `; L/ O .platform_data = &da850_evm_tl_leds_pdata,! a: E" [% I7 j- p
.release = led_dev_release,
$ ]. w/ X! h! x o& v- L9 A }
+ `% l0 y% R& L};" I1 g* l! w. ~+ j& i% N1 v
8 g B: N' `2 W' q* g
static int __init led_platform_init(void)
" R, n2 Z* _6 \/ U" n/ K9 B{% l c- o, o( a; I
int ret;
$ E1 E* `+ W- O# g _6 v! ~4 }#if 0
9 R" N' w9 Q: w2 @0 t$ E ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) d" ?' O) g8 K- M9 i5 V3 [
if (ret)" c4 j4 K% C$ G! w7 i( f% G0 Y
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* N J5 W i5 x' Q0 Y$ o "%d\n", ret);
0 F3 w& e& l/ [0 H. o4 @5 W#endif
. I8 x' M) X- m! p ret = platform_device_register(&da850_evm_tl_leds_device);1 e8 W I0 [/ o0 x& f
if (ret)- B, q: l$ t& }+ I
pr_warning("Could not register som GPIO expander LEDS");! V1 v! O: ?$ D) @& s. l
else
* N& P! W Q8 G ]1 x% Y printk(KERN_INFO "LED register sucessful!\n");' ~# W7 v0 w" u; L" z7 {2 `
* y8 W1 U2 }/ l% P9 U
return ret;
( [$ ^) n) l2 W2 `: w W}
5 P1 ~- A+ `2 p3 c; C* r
9 l' j: e+ W, ^; Fstatic void __exit led_platform_exit(void)' D) g; L! @ l
{
) A9 \& k; K( V/ i( K platform_device_unregister(&da850_evm_tl_leds_device);
& r. t: K. P7 ]6 k% ~) M8 Q) ^) m6 g, B: D4 t
printk(KERN_INFO "LED unregister!\n");
& |( o" u1 ? B}
' Y- K# v, W" a1 M+ E* J4 T/ J
% E" h# t+ Y7 @3 G: G! }module_init(led_platform_init);! D4 h9 A; `6 f/ o, }3 Q) S! W% V- [
module_exit(led_platform_exit);$ A6 f, p7 w% b! d7 m; \
, J6 Z1 ~ N! b) VMODULE_DESCRIPTION("Led platform driver");
2 e) J; ~0 R4 G! K* e8 r7 m" dMODULE_AUTHOR("Tronlong");- k# ]4 |! I ]' k1 r% t
MODULE_LICENSE("GPL");
* v4 ~; u$ I* G" N y2 B5 v+ L$ A# Z$ u N3 e( N9 q' O2 \/ o
|
|