|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) Y. _7 G6 U9 I
#include <linux/init.h>6 C. S- r, r9 Y( D
#include <linux/module.h>
% W) p# P/ k4 C0 n. l' Z! R* r#include <linux/kernel.h>, s' W, [. E/ I/ X
#include <linux/types.h>, X! f6 i! H. q H# m# V
#include <linux/gpio.h>4 @7 G$ X* M# v" Z) H- D/ f
#include <linux/leds.h>
. U% h( w' j9 J! t5 ^#include <linux/platform_device.h>
6 V5 q# a$ G+ U8 m' a" ~2 e
% p1 D' ~) B1 v. @#include <asm/mach-types.h>: J& {7 M) C+ f0 R7 h. E
#include <asm/mach/arch.h>4 l5 c: K9 w @+ s
#include <mach/da8xx.h>
8 v* y) D5 C6 `' @5 E#include <mach/mux.h>
' k+ G2 e/ ~5 M) w/ N$ j
) g& n1 l4 `7 C#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) E2 Q0 T7 S" ^0 k9 f# g0 n. ?
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
$ m. T' y1 K* A5 \#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# p: T) o% ~+ t) n8 f0 i
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- y4 {0 l; K! Z3 g5 q' R/ ~! o
% |8 i( l% K/ ]& W: ?# K9 y/* assign the tl som board LED-GPIOs*/% W5 e# }. W0 @ A! P; I1 M# N
static const short da850_evm_tl_user_led_pins[] = {
. @; E$ w) b) F: K /* These pins are definition at <mach/mux.h> file */
. v. b; f9 x7 v: x, F% j DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- S* v1 m+ K% n/ C4 n u -18 u: q9 _# P6 K, {3 j0 ]& I( y
};
- p# G: X0 O2 T9 {! y$ ]4 B& A3 q; {/ V, v' ?% ~: W/ N8 w+ n: i+ g% l
static struct gpio_led da850_evm_tl_leds[] = {4 y! k5 O$ c8 ~/ `
{
2 F& X: _: ]- ^/ \1 U .active_low = 0,9 K* _3 L4 p3 J# ^! p
.gpio = DA850_USER_LED0,
U. G3 j+ o8 B( |3 x .name = "user_led0",( R s$ T+ u' C- b3 |
.default_trigger = "default-on",
8 r0 G. N" \: K, ^8 _2 [0 g r },
/ b( R' w4 z) J" L {- ]/ p& k( \! p. W) i* l
.active_low = 0,
2 w) _- X% p7 u .gpio = DA850_USER_LED1,
7 l, @& s8 s G' J, S t- _6 b+ v6 c .name = "user_led1",
' s# T. t5 o6 {! a .default_trigger = "default-on",! @8 z& T. V( T* O8 r
},
5 [- T! K! ]/ s. J& [, ^ {
) f" B0 |% D9 o* W/ z. \ .active_low = 0,
) f7 b$ m1 D' f9 O+ }, p .gpio = DA850_USER_LED2,
) X) C6 r% Y4 t4 F2 X i .name = "user_led2",' L: v6 N0 c. j" b" P- G
.default_trigger = "default-on",; c Y' S! ?! K2 P0 b) F9 i
},4 O1 v* ?. M, Z4 X5 w
{0 n3 _: e8 ]$ ]: L
.active_low = 0,
* f; W$ A4 i" @& t/ r/ U, m6 V( G .gpio = DA850_USER_LED3,+ _# k7 Y- D( m7 ]1 G
.name = "user_led3",- @1 s; K! ~) [) W3 [* o( p
.default_trigger = "default-on",
+ D7 _7 X) l& v" x; o },- R& k7 P8 C/ J8 |) H! Z1 C0 F
};
2 X$ Y8 J5 y/ u" A2 ?) c# b9 M9 F* O! u0 W" T7 B( d
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 T. r" Q* a- e8 B9 I% B
.leds = da850_evm_tl_leds,
) Y# U: z- y+ [" U .num_leds = ARRAY_SIZE(da850_evm_tl_leds),# V! |4 X8 ]# b6 p. u4 D4 A
};
6 I) w! P* v/ n% F1 k' j1 m% f4 K$ p3 m6 `" [5 K
static void led_dev_release(struct device *dev)
: S) u6 V% C) T) k1 H8 {{7 v' ~; d! B/ s- d/ u }% v
};
* u# P/ Q9 y$ X" b: A& \
0 z, x) s6 j4 X8 v. kstatic struct platform_device da850_evm_tl_leds_device = {4 j/ y2 c @. D8 z' u& j
.name = "leds-gpio",
{! z2 z9 V6 z; f0 c' o: {. b .id = 1,
5 `9 b2 F$ P! A# f .dev = {" _5 d! q5 ?5 ?# k2 u" f' [( [
.platform_data = &da850_evm_tl_leds_pdata,
; v2 v; i, v& m7 S .release = led_dev_release,
! u6 |6 n# ^3 e }
$ t8 U4 O, r: ~};1 _/ ]1 p2 z: r1 ~+ k" n
* C5 G! ?" S" `+ r7 n3 d* D
static int __init led_platform_init(void)# W2 ` b% N3 ]- Y9 c4 ?4 k( g7 r
{$ i/ g# c8 K) O7 g2 K
int ret;( z$ F' i% C* [2 |- X
#if 0
3 M4 i3 Z: N9 A+ _ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! I3 l# O& d3 j* ~, h
if (ret)6 c0 Z, S! V" F4 c3 |
pr_warning("da850_evm_tl_leds_init : User LED mux failed :": n) q' ^' m4 L6 h6 A
"%d\n", ret);
7 v1 O0 c" C$ y% N' Q#endif2 ~! s8 v" Y6 n2 k; [
ret = platform_device_register(&da850_evm_tl_leds_device);: w0 U3 j) y, f+ Q7 H
if (ret)
; ~( T% E$ _' J1 U! l+ S pr_warning("Could not register som GPIO expander LEDS");2 L4 p. p9 d) j2 o. S! Y6 h
else
1 O6 Q7 O: d: \( B1 m* ^2 Q printk(KERN_INFO "LED register sucessful!\n"); V* n* R$ |1 f% t% Z7 p
/ B- o$ Y, e, y/ c% A return ret;+ n, { }- H! ]& X5 [& R
}1 m; v7 ^2 L; s, x1 [6 X# u# C: P
9 e/ y/ i' ~5 c8 L7 e- ]static void __exit led_platform_exit(void)
3 n" q' W+ \4 z3 y# ?{
3 P$ ~. t" d! J8 j8 c: X platform_device_unregister(&da850_evm_tl_leds_device);
+ @5 j6 m, y9 L% ]
# m0 A9 e( p3 U: U) w( x printk(KERN_INFO "LED unregister!\n");
, J+ I/ K, ~7 i' W}+ n6 J9 R* ]7 p, g ?) X
; Z! \% ^% Y* c9 Gmodule_init(led_platform_init);' |7 K) \! x/ [ H
module_exit(led_platform_exit);* s5 r* ] w) S+ L
3 \* k; Q6 g0 N
MODULE_DESCRIPTION("Led platform driver");; {, ]4 s! z! @5 F# o. B
MODULE_AUTHOR("Tronlong");: f+ D. g! h# D* n; T) i8 w
MODULE_LICENSE("GPL");
; g4 D' a' Q6 W4 ?9 R' i4 V$ R1 B8 E9 b* z5 g% I
|
|