|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 U* `! |: m2 u* a#include <linux/init.h>
5 T/ i, A5 L4 T* O2 y- |#include <linux/module.h>
* l0 u; g- i$ {, o#include <linux/kernel.h>
: O5 W0 L Q$ @$ e# v" V* Y1 C#include <linux/types.h>. }2 l; f6 [9 |, }# e
#include <linux/gpio.h>
6 F0 ?3 p. {; D# C% U" D. n+ E#include <linux/leds.h>
3 v0 n9 |3 Z, U" o#include <linux/platform_device.h>
' l" g$ p+ L1 p* _ Z/ }. N$ z! L3 ?2 J1 ] {7 s5 M
#include <asm/mach-types.h>! Z+ M% p* D* M
#include <asm/mach/arch.h>
: Z! [- A+ b, V#include <mach/da8xx.h>
4 x% I$ ?; ]: u% x#include <mach/mux.h>
' Q$ P) n8 A8 |' b* v" n
( h+ r: J' T0 D$ j" w- \1 H#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)# C. A3 q/ u( `. Q. q+ o
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! H, W O& j% ^
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), m* q7 N) }& Y# k) d
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& Q6 V1 Y3 N. d) S5 d+ b8 [) h7 o' N& \$ m4 [9 {
/* assign the tl som board LED-GPIOs*/' _9 |$ ^' ~; W; U) _6 j7 Z9 r1 H* q
static const short da850_evm_tl_user_led_pins[] = {5 _+ w: D- o- [" F" B: R
/* These pins are definition at <mach/mux.h> file */- y$ W2 T0 f* n# j; h( P
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' u8 r- E% W1 G& x$ Y -11 E# `8 k, |( R1 ~
};5 I, B, E9 b# Y
, S+ p' E6 A t* \
static struct gpio_led da850_evm_tl_leds[] = {
% M6 L+ N; [1 f# b {6 m* Y: d& h( Y' M/ C J+ K- q$ t
.active_low = 0,
6 I9 u0 e7 F+ x) ~7 \* C2 n .gpio = DA850_USER_LED0,% ]' P1 b( s! q& [7 S4 Q1 F; y
.name = "user_led0"," n, h) Q3 R; P3 C
.default_trigger = "default-on",! u+ K1 J9 N L+ H& W+ }8 Y1 J5 @
},
) Q' @8 {' K: P( j0 ?4 H k {# F3 Q" f' X% g1 w: u2 \
.active_low = 0,6 l8 W6 K$ K9 t& B- S3 W
.gpio = DA850_USER_LED1,, x! d- D9 Z9 C& | s0 r9 P3 |
.name = "user_led1",
+ U1 G! ^# g5 B7 Y W; n& |- C .default_trigger = "default-on",
1 Y6 W% ?# y& }7 E1 |5 t$ P# Q },
+ E: X8 q) w; u* D0 b* w {& Q3 M1 \- y- f* |: g) r- ~
.active_low = 0,
& C8 X& W. H/ p, I& X .gpio = DA850_USER_LED2,
9 l+ q; f, v, Y4 Z4 A2 ~ .name = "user_led2",1 P! Y. ~ g* ]5 V2 K" z5 t
.default_trigger = "default-on",) d5 s7 z: Y: F& [5 M5 o
},
" X4 u/ w$ ?. S# }7 I {
8 X9 S2 M+ W5 Q) S' V$ ?' E8 g .active_low = 0,
7 c0 U" b: A$ V$ Z2 k% E .gpio = DA850_USER_LED3,2 A P9 O. h! J4 B
.name = "user_led3",
; P4 y4 H: X& B5 P .default_trigger = "default-on",# a2 g) n- Y& |
},7 m: L% X7 C5 }- @! N7 v1 `/ w6 y
};- h; E8 w" m0 x
1 R5 z) \3 z7 {# Q3 `
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; h9 w9 r( {1 b
.leds = da850_evm_tl_leds,
; F2 E4 {4 S/ x. E0 T7 \7 n: x- H .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ D: P0 V+ s E* X};5 ^! z, }8 v3 c" c) L6 c( X' w
6 J' w6 X& `4 m& K) qstatic void led_dev_release(struct device *dev)* ^9 y! y6 @% H; E! K2 b
{2 B# H; G+ y5 m8 R: J- n
};' E Q# N! }, K6 Y* A$ ?% W7 q
) _6 @1 E: ~9 o8 Z I; \
static struct platform_device da850_evm_tl_leds_device = {" p4 P0 W2 Y& }4 q, A9 K
.name = "leds-gpio",( v$ P Y1 U! O- c$ A. J" B: A
.id = 1,* K6 S5 H8 L# b% R
.dev = {9 e, `5 N R7 R4 ]0 w) |5 |% D& }- R
.platform_data = &da850_evm_tl_leds_pdata,2 k, O1 z5 u# j4 Z1 b5 m% b
.release = led_dev_release,
8 |. `4 p0 Z, k s& ~/ S }9 U. l9 U0 D$ Z6 ]
};
& O0 U' F5 A+ C4 j( B& z' y; l. F* I3 W' {8 f
static int __init led_platform_init(void)6 h/ J. T8 Q& W$ d, d3 Q
{ G1 k6 \' r3 }" c5 m
int ret;
0 X1 K) g4 V, R, e1 j+ V2 z0 y3 B9 Z#if 0 b; f. d, c, \, w! K. Q5 M+ E
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 r1 @2 l+ F5 X% |! \, |
if (ret)1 c% T+ N) m0 z. `7 O1 {6 w
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ y* C& [# A0 E( M/ h$ D "%d\n", ret);
y5 H4 |5 N( a5 ?4 f#endif1 x9 N- X3 M" u: H0 }
ret = platform_device_register(&da850_evm_tl_leds_device);" A9 q# P; M8 S
if (ret); h* c+ v" d2 z4 n0 m
pr_warning("Could not register som GPIO expander LEDS");
4 [* y n4 M. @. x4 {: H6 p- a1 j else
6 g ~9 a! ]; B' X5 M! D printk(KERN_INFO "LED register sucessful!\n");" `* b: Z7 K1 Y) x' W/ o
# l0 Z1 F+ v5 x4 w) S9 z8 z$ P/ O+ y return ret; K& [ q2 N* i/ R0 R2 l
}
: q: K. r2 {; c: ~, a! A& v
* p9 r' O1 I' {static void __exit led_platform_exit(void)1 a# O0 ?: t: v/ I- P
{
4 R/ t R1 P/ v% V# t4 }. R platform_device_unregister(&da850_evm_tl_leds_device);3 N! i+ F3 @( m" b
9 C- w4 F" z. y$ W! A( L s: ]
printk(KERN_INFO "LED unregister!\n");6 m; C* ~' U2 t- C5 u6 v, q
}+ W+ _) E8 U4 t4 S; z- S7 \
3 {, ~7 Y0 @- g6 M3 Amodule_init(led_platform_init);/ C) c' W4 K) I
module_exit(led_platform_exit);
! s8 y \! ~: I0 k! E
! D6 a* i2 k) Y" cMODULE_DESCRIPTION("Led platform driver");& h9 y' L$ B+ }5 y
MODULE_AUTHOR("Tronlong");( U) `& O8 J( R
MODULE_LICENSE("GPL");9 w" U, ^# F' c4 e* n
# n h7 a- a+ h
|
|