|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! S v; l3 \- M9 w, h/ ?% x#include <linux/init.h>
5 d: K' U V: u2 R8 c#include <linux/module.h>
4 x$ R! w# }/ f3 o5 z#include <linux/kernel.h>( H3 b9 p4 n5 G3 _$ s
#include <linux/types.h>
4 _5 X$ d9 ?$ `% C1 P3 I#include <linux/gpio.h>/ B4 y3 s! Q5 |8 [5 z8 w6 O
#include <linux/leds.h>
" _5 W4 {! q' Q% R#include <linux/platform_device.h>+ C0 v' R1 P7 W
) N4 G) x0 a' S
#include <asm/mach-types.h>3 X! _& S6 Q+ x* a5 ]8 k6 [
#include <asm/mach/arch.h>
/ [9 ^, u/ K2 |# F% r- s t#include <mach/da8xx.h>
! _/ X$ U0 c- o& v* f#include <mach/mux.h>; t6 A# k% e- s3 f- S/ n& s
0 n# Z& c6 V+ m2 V y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0): d1 t. r, G, F: u
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ d4 q7 s% K5 E9 `/ I) u* }! J
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)5 s/ I! I9 u: [, O0 O. \% S- g
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" O2 h) z0 r+ S5 l9 H4 w4 Q9 x, S
+ t& p: W) r! }. h6 p/ ^/ [. w, F
/* assign the tl som board LED-GPIOs*/( \2 ^1 [9 |8 q/ C, k. a v
static const short da850_evm_tl_user_led_pins[] = {0 |: c) A$ \% ` g
/* These pins are definition at <mach/mux.h> file */0 L2 G5 b) c3 t+ N5 X( F3 w/ x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) l O+ s' v) E# s: t -1& W( G) o, [/ f& @. C: k, @
}; R6 i2 i$ W9 ]
" F( q! I. Q5 a- ^$ }" j5 n# O# S
static struct gpio_led da850_evm_tl_leds[] = {" _7 q$ D& D9 f
{- B8 c' E. Z7 {7 O5 f' \9 q' ?8 u- ~
.active_low = 0,( e& X; S" a. q- `
.gpio = DA850_USER_LED0,7 I( B; q6 i5 c7 u. Q5 v" `
.name = "user_led0",
4 J8 X. [; O! V+ Y" t .default_trigger = "default-on",+ @! ]4 j# D! a7 s3 W% A( F
},% u9 H5 Q5 X: l$ ]
{; a9 c1 q4 B1 z* | M# N! ?
.active_low = 0,
% T# C: A% L& l( A: @) H .gpio = DA850_USER_LED1," `$ J5 j& ?& k" v1 U
.name = "user_led1",. N7 A* B$ A9 k4 e3 e
.default_trigger = "default-on",
& q3 r, k9 X% Q! D7 a+ ` f },/ V4 \* p' D+ p8 Q* |6 q9 ~
{
3 K+ V, }% f* p% J# i .active_low = 0,
" R4 f) Q* f$ {3 D& [ .gpio = DA850_USER_LED2,
* {2 B7 T$ f) c$ h6 K2 h .name = "user_led2",
' \' ]' q% ]' T$ A$ v. C7 l .default_trigger = "default-on",
4 W, ^. h1 P- s( w& V- Y: ^ },
/ Y7 I" L- f( s- A8 i {
0 Z5 ? d1 q. J" x/ Y .active_low = 0,: ~: G" i% X! ^2 I
.gpio = DA850_USER_LED3,- w7 e4 q, ]( w! \, S e
.name = "user_led3",
& ]0 k; \7 m9 [# Z& R .default_trigger = "default-on",% ?( p! y* o1 J) I( C2 t
},
6 n, e, K9 P0 Y0 b5 e* s# k};% t* i5 V/ x$ G) T5 d; i2 e
, J0 \! |0 F$ s4 `( dstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& C0 o; L2 H1 _4 h6 I .leds = da850_evm_tl_leds, B' i6 L/ j! h3 ^( s' U
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 ^5 Y' M% f9 F8 f/ \" |; C}; U8 L' c" a3 _# |8 A9 G
3 x2 T, P. s6 J( \4 |; sstatic void led_dev_release(struct device *dev)
! s: O6 \/ ^/ a{2 [5 T& ?) N( `8 W& ~7 [& t9 M8 P! `
};
1 W( V* X, T: }1 R' ^# s0 q1 F1 b2 q: @9 h+ j4 q4 c! u
static struct platform_device da850_evm_tl_leds_device = {+ ~: ^7 W( m& N% z \$ C. _
.name = "leds-gpio",
" x; S4 X, u8 W8 C+ x" U .id = 1,' h# _7 L7 w2 u! T3 Y% q
.dev = {/ q: `5 s" v0 F$ W/ E, e; C2 w8 t
.platform_data = &da850_evm_tl_leds_pdata,) g0 a" v }$ T' c0 @" Y8 a
.release = led_dev_release,& F L8 J, k( M4 a
}
8 Z0 I2 h& i( h( K. m q};
6 b2 V* c2 s9 s L: {. z) r8 t7 \- L% c# g: z' _
static int __init led_platform_init(void)3 `4 D( L) r" A: _, w$ S% }* Z
{
0 q) q/ P# `) B8 } S3 {. \3 b4 A int ret;
! j6 J' o* ?; i#if 01 ^5 @1 ]( u0 n1 j! w' |
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
8 Z/ p. e+ T2 |6 d if (ret)
2 L$ ?* n0 v6 M1 B# C; {0 x) Z; L pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# b; @, @) M7 E7 q) X7 G, [ "%d\n", ret);
+ A9 O- v& q" }& L#endif- b @3 _- m4 D0 o+ f- x" M @: ]
ret = platform_device_register(&da850_evm_tl_leds_device);
% l1 U0 K% D/ G6 c# { if (ret)
1 F) A* ]; y7 l, l5 ^4 O# L: j' ~3 B pr_warning("Could not register som GPIO expander LEDS");
& Y( ]1 j Q1 y else
4 Y5 q2 K" }5 k: u printk(KERN_INFO "LED register sucessful!\n");$ i5 @ H n; E$ s% R% E' P$ C
! S9 p7 F% a+ p* y* p. e0 x: X
return ret;" [: l( w- A3 ^/ O& r+ t
}/ x5 e6 [$ }3 e' q2 p3 s
- U2 a$ b, `4 l# S4 X' k
static void __exit led_platform_exit(void)7 Q3 e3 B$ [$ m# ?# D
{1 _: x- L Z! s, @ x
platform_device_unregister(&da850_evm_tl_leds_device);
- p9 x" [% `" G2 Z5 k: U v3 \- [- \; ^
printk(KERN_INFO "LED unregister!\n");
# u* ~1 S. r. `}3 J# B- i: U7 R
5 y- Q; v" ?! _ x+ v
module_init(led_platform_init);2 N- K; A9 h3 x% ^% B" q
module_exit(led_platform_exit);' p* \! n3 B- T8 }; {) y% R% X: v
* N7 N% {+ G4 y+ g y
MODULE_DESCRIPTION("Led platform driver");
; J7 ^$ k e' t& a9 Y7 O, L+ yMODULE_AUTHOR("Tronlong");
( X; H" n8 @. SMODULE_LICENSE("GPL");
# t4 [. \+ W0 m3 R2 t: i, O4 ?- ]8 z- }6 N
|
|