|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 `- n. L) K. \# c
#include <linux/init.h>) |, A6 y, y B* p% y* k+ h
#include <linux/module.h>0 w# I3 d: Y4 B& M+ k
#include <linux/kernel.h>6 p& X3 N% Q* E7 Z* i, O2 I+ z) V2 J
#include <linux/types.h>
9 I( M# z6 R- G* |#include <linux/gpio.h>
1 Z. Q3 {& a3 l) ]& i9 I/ C#include <linux/leds.h>1 ~5 } X5 T0 |1 h' g: R1 ~
#include <linux/platform_device.h>
+ x' K: Y5 h7 V9 X ~& ~8 n( d
8 ]' J* t" I4 m+ f* B* |! c8 T#include <asm/mach-types.h>. q! L9 {" O4 n+ W5 R
#include <asm/mach/arch.h>
2 ^- A9 |5 C2 {, x#include <mach/da8xx.h>4 L6 Y4 t4 w' w, W) H L3 ?
#include <mach/mux.h>
( V) D# c3 G( I6 M0 p! w. r0 z. k) {" L* G. l4 `0 e7 Y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' y$ _4 Q' B4 I3 y3 [3 o; L
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)- q* p! f0 K" T. m5 ]
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; _3 j- _/ M; n, G7 }#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! F) o6 v3 i$ ~% ~; v" ?/ G! D4 y m) M' h' k& z8 I4 v6 m8 d
/* assign the tl som board LED-GPIOs*/ g4 l6 X1 f+ u C0 t7 o1 P8 ^
static const short da850_evm_tl_user_led_pins[] = {
4 P e. j* P/ y* K+ j4 z2 G /* These pins are definition at <mach/mux.h> file */
8 R* a( o/ G( Y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 y( f" h* W$ H1 u! E* | -1
' I0 K: a9 e! @- n, ~; {% w};
, A' e0 @; ]. d
b3 [1 N" j2 ]! ^5 b, \& n8 tstatic struct gpio_led da850_evm_tl_leds[] = {7 b4 n& t& N' m* ~$ H0 u
{
) P; | l4 f* K8 U6 p# Y, h .active_low = 0,
, m( l; L. O8 X6 [ .gpio = DA850_USER_LED0,
: W* \0 E. g7 h5 M( e .name = "user_led0",
: A) v; }: ~* t+ i& y Q .default_trigger = "default-on",
$ W& S. r9 A$ ? },& ~' E6 w# G- n, I; D9 M/ I7 F! _( I) p+ O. u
{
/ I: b* ~5 u7 v .active_low = 0,
9 `: _! F- b9 N; R, W .gpio = DA850_USER_LED1,+ v, C- C% g7 W- Q4 F
.name = "user_led1",
- {. l3 w+ Y' @+ \+ @2 P .default_trigger = "default-on",
# P# z. Z+ ~+ L9 ]0 P4 O' ] },4 {5 ]4 \, E# G
{
7 Y3 M- |6 e, h# L9 b5 j .active_low = 0,
/ Y- t# a% T2 q% n+ u .gpio = DA850_USER_LED2,: r# O& w; i" i
.name = "user_led2",
+ V1 ~7 | O) J9 z$ i% B .default_trigger = "default-on",
: R) Q3 }! O4 m g1 u },
3 b O. M7 b. w$ w# X {
1 T W1 ~6 W% D5 ` .active_low = 0,
% u2 Q- v: u+ n2 r. ^6 N8 ? e .gpio = DA850_USER_LED3,! ^9 L( X+ S4 |, p. z
.name = "user_led3"," u& w: r& O; o" q- b
.default_trigger = "default-on",
8 _& R- F8 g# I: u! b },; b5 ~' F7 u" A+ Z1 _- K D6 F
};9 I f) s' |/ a" }3 @( K
8 s& C. K- }$ W/ E6 L
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 s, h: A9 W" ^" A2 u .leds = da850_evm_tl_leds,+ a$ h' ?, K' T' _3 V$ ?
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ V* @( Y3 `, X6 d+ D( ~& R
};
3 _0 S0 ?& v! S( a: Y4 Q
1 H! j8 V8 d/ I6 ]4 S- Gstatic void led_dev_release(struct device *dev)2 J& Z. k% N- n; C6 ~5 n
{
6 u5 o6 l, |: S};
) p$ K+ V; J6 W) U1 z
. E/ K1 A" Q% f6 x- lstatic struct platform_device da850_evm_tl_leds_device = {
8 A H% W& ?% j) _! v .name = "leds-gpio",
. _' W3 F/ X3 v$ D& K* y( x .id = 1,
$ P% W R& ?% `" W: T, o+ _ .dev = {8 @0 C& G3 N4 C$ K7 z: }
.platform_data = &da850_evm_tl_leds_pdata,. b1 C9 \5 s4 @7 d
.release = led_dev_release,
5 v$ J! `1 C. C; K' T% i }/ ~2 ~& u p9 _0 Y/ S1 ~
};
+ H ]( v" k( g& t* f5 @7 r8 X6 T! L7 i, P& x
static int __init led_platform_init(void)6 ^# W: e9 J+ p7 z* W$ O+ }
{1 v* `9 Y: {5 Y; h* i/ B! k& A
int ret;5 k5 x. I5 H" A- A8 W
#if 0
' `2 |+ a, U5 Q8 g3 C/ p* [ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);- z* e Q+ q5 ?2 S
if (ret)
7 d9 E6 x8 A; V: G pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 L2 h$ O. m9 C) b$ j; X7 i: R7 o2 p "%d\n", ret);3 S4 k& b; B( c5 M7 N
#endif
5 p# w" y9 q2 E6 ~ ret = platform_device_register(&da850_evm_tl_leds_device);
+ e P+ y& j2 K if (ret)
% b- s$ D v( j) O2 P+ R) T pr_warning("Could not register som GPIO expander LEDS");# p5 w6 Q" }9 U5 S" q7 q% H. S
else, F* t% a3 X' G6 p$ A
printk(KERN_INFO "LED register sucessful!\n");
& K6 f5 A9 t& b$ | @) W* m) d) d
return ret;9 \4 X( |4 B. \$ }+ v
}
3 e5 t5 o: K( W/ @
) m/ A! J0 b1 mstatic void __exit led_platform_exit(void)
/ {' i; k& u7 v P9 F8 m{
+ M5 C; {- g& @ platform_device_unregister(&da850_evm_tl_leds_device);
3 s. |: C1 \. V$ z- a
* O/ o+ |8 L' d) Q printk(KERN_INFO "LED unregister!\n");
# ?: W- U) U/ c/ k' ^}
0 Y; a6 ~/ o- W* d: T' W
. W4 o* B2 r" `) M" H* umodule_init(led_platform_init);
9 F9 `* k4 T# Dmodule_exit(led_platform_exit);) y, U) B w. D3 r9 u: u
0 `9 l7 w, I+ c# `4 K8 i4 Z9 b
MODULE_DESCRIPTION("Led platform driver");$ T5 A6 N7 }2 D
MODULE_AUTHOR("Tronlong");
) O4 Z# Z7 _' m8 S- U0 rMODULE_LICENSE("GPL");( g) `: D2 K W \
. `/ a% J0 D3 O$ R1 g/ b
|
|