|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) j: g- n1 W5 L( ?9 W+ V
#include <linux/init.h>
; I5 \) x a8 ?$ y5 T) H& v#include <linux/module.h>
6 v" d! \7 }5 \ I h& v$ K5 X! Z* j. G#include <linux/kernel.h>
/ h1 J. M8 q* s' N$ Z#include <linux/types.h>
; Q5 W' D( U, ~, K5 P- h#include <linux/gpio.h>
3 p- ]9 f* `7 w; K7 {1 i#include <linux/leds.h>
6 F( \. \5 O6 t" C( u7 G#include <linux/platform_device.h>
7 a9 J5 J/ Y3 s; r% k5 d! ]" ~) n
' M P, W: E8 O5 I$ I) I; C, c* a#include <asm/mach-types.h>9 \! X3 E& g+ w# q1 j" t9 S
#include <asm/mach/arch.h>
( Z* a3 C% s, \9 D% o( f2 s2 g#include <mach/da8xx.h> |* B! Y# G/ E+ ?
#include <mach/mux.h>
3 ]+ O0 d! p. r% k8 w+ c
9 i/ v3 Y$ I8 p& u#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 h& ^5 j+ E: c, _ J4 D#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ e4 Q* u' R, B5 e#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! }3 E; j. x: F, M6 N5 B% }. y#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ ~+ v; P \" a+ ]; ?$ b! s" G8 O3 S5 a7 T7 \, y
/* assign the tl som board LED-GPIOs*/) ?5 r! ~$ B# A' |3 ^
static const short da850_evm_tl_user_led_pins[] = {
7 L: s' K" ?& j /* These pins are definition at <mach/mux.h> file */
1 r3 y" l9 h/ C9 [ }& e3 H DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 B4 r, ~, ~5 ~: @, E
-16 I5 [' F1 q0 w; f
};
2 Z6 r2 r: a. j5 ~
0 ]5 E- I4 n8 V( z- i, _static struct gpio_led da850_evm_tl_leds[] = {6 m" b( h/ n: Q L& b
{. X, ^5 Z5 a, I$ P! A/ B+ P
.active_low = 0," n* g" D) {9 x' d$ p* t
.gpio = DA850_USER_LED0,
j8 E1 x' \( _7 F .name = "user_led0",
; _: q' B$ d4 D/ I& A- n8 {- l# k$ d .default_trigger = "default-on",
; z) f5 x& I% w& `: r },
, G2 P" V& l! e' a, } {
, m- \% r! K- i; v2 } .active_low = 0,- i9 c5 F0 ?2 `" @
.gpio = DA850_USER_LED1,
0 S& A4 Q# M: c- B( h* t .name = "user_led1",
) S9 ^! ~8 ^" h& {7 U% [3 f .default_trigger = "default-on",: Y9 s# E& V& F7 a1 R+ {
},
8 C& S( u6 g& h. ]1 o {
6 b Q& A: g+ H# a0 u, _6 S. N. r .active_low = 0,
2 Y: R2 _5 ]0 n) \7 w& [! Z .gpio = DA850_USER_LED2,& u+ H n3 R* K+ ^: ^
.name = "user_led2"," m# n, K8 f/ g2 C J
.default_trigger = "default-on",
8 M" ]: g2 r4 S$ j& e },, W% {# @5 c( A, |2 D( F
{4 e" G7 ?. D7 [' \( o: S
.active_low = 0,
- H% A/ a8 e5 J .gpio = DA850_USER_LED3,5 ^4 s+ X3 r$ O" {* r( p
.name = "user_led3",/ y7 r( c+ b5 ]
.default_trigger = "default-on",
) K- M$ V6 h8 Z/ Y6 L2 l' s },7 h" m" m- C6 G/ j4 e4 R' a8 T, U
};8 j6 Z9 L& V, G+ P7 O J' N
- ~7 W& J1 Q, p% j6 o4 \% H
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {. s8 \) Y0 w5 j
.leds = da850_evm_tl_leds,' s# q4 U, B8 a1 r6 C( z
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# M' m, [3 [+ B};) B1 ^. d6 @- ^# t
, D9 Y4 ?& a R! [& `4 Lstatic void led_dev_release(struct device *dev)
0 U( S" B) [0 t2 L f: T{
4 P% i& f+ h) t4 S};7 Z4 Y2 C4 X3 g- g
6 }4 | E, u% e9 V+ Q3 C
static struct platform_device da850_evm_tl_leds_device = {: V* c0 P% }( O. V3 |7 p Y
.name = "leds-gpio",* ^9 e, N/ B- B
.id = 1,
8 J/ V! H! @; w6 C .dev = {* [: J+ s. b# y
.platform_data = &da850_evm_tl_leds_pdata,- A8 l% m1 x0 O' J- P; o* U
.release = led_dev_release,
W# H6 K9 l# ^( b! m' h }: r. P- B& _( }) a) M; U
};: M' r% P' }9 e
0 k. L( ?+ z- D8 F
static int __init led_platform_init(void)9 R, e2 [+ q3 @) P% Q Z
{# h* a. e5 d: \
int ret;9 f2 ]4 V( u4 F* ]
#if 0
, L: H# z; i2 B0 h# [7 K ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
8 H+ `" g1 x% C! \+ H3 x if (ret)
, G' d4 ]3 O- p# i ] { pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 a! g/ O$ I. r. k "%d\n", ret);2 ?! `. Z3 W* i* c3 H, s! }
#endif x' s& f0 Z4 s
ret = platform_device_register(&da850_evm_tl_leds_device);
9 y: b& d9 j0 t/ s4 x3 b/ p if (ret)
# F q* L$ z4 _4 ?( h5 W1 l6 n/ p pr_warning("Could not register som GPIO expander LEDS");: s$ x T- R5 l
else1 F' W9 K$ i2 N+ c6 `( g1 f
printk(KERN_INFO "LED register sucessful!\n");0 Y" H+ q2 K' A+ p; F+ I2 @) |
0 t3 k' T8 H+ s) i6 c; i. X return ret;9 w; x/ z+ N; F5 |
}
) K2 Z0 U) H2 h, y
+ }$ c K, p/ U2 m: I2 o: K1 Ostatic void __exit led_platform_exit(void)- R. ?/ h- M0 c5 s0 N
{$ k9 n" ~: a- Z+ X$ f3 {6 U% n& H
platform_device_unregister(&da850_evm_tl_leds_device);3 s# W5 r( {, g1 A
' l C: B8 \" }% ?# k* C
printk(KERN_INFO "LED unregister!\n");4 w# o' \0 L6 E% n, o5 X
}, j8 o% J! ?- @) j' l7 G
" F! W9 \. {8 V: Imodule_init(led_platform_init);% M" M/ Y% o8 i( |
module_exit(led_platform_exit);
8 s" r8 h, ?! g/ @1 ]
0 R- d* r( g& Z. X( x$ L; |' @MODULE_DESCRIPTION("Led platform driver");
u% \. r% x+ S2 G0 GMODULE_AUTHOR("Tronlong");) t' X1 M; J2 }- _
MODULE_LICENSE("GPL");) @" S2 M" [+ |& K* o! m* `
0 ^/ C4 K+ X# B/ d0 ~4 h+ N7 ^
|
|