|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" m9 k; k5 t; e g9 q/ z#include <linux/init.h>
/ N; f: n* u" J0 e1 L) g9 T/ |% W#include <linux/module.h>6 d3 m c# m9 A% d
#include <linux/kernel.h>
/ X3 u7 h/ K9 ]. M) V8 }0 e9 A#include <linux/types.h>
4 |# g0 `& y& M- ^# k d#include <linux/gpio.h>( t$ ?+ O* f9 T' H
#include <linux/leds.h>; Y, J4 [1 g7 w
#include <linux/platform_device.h>) `3 X# b ^6 ]0 W/ p# H
+ m& a3 {4 ^5 m; G* _
#include <asm/mach-types.h>; r' b: }# k- C" n% x3 G
#include <asm/mach/arch.h>
# r8 l7 C+ j( H: }5 _* q#include <mach/da8xx.h>
3 W: S1 _( k/ `# ]#include <mach/mux.h>
0 n% J4 f& N3 i6 u) j( j3 S6 L% O
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 B# Z8 @1 f% a" W* ~) |3 q* E; z
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. ^2 [" f: o) J3 s#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 R* Z: L0 L9 g( H2 ?* c0 w#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) T' a/ C5 F. w) f+ z F' z! I/ k' h7 P+ b4 g D
/* assign the tl som board LED-GPIOs*/0 h5 O1 d/ a$ Q5 S" k+ o: U
static const short da850_evm_tl_user_led_pins[] = {" w+ P0 W7 Q( D9 N# ?2 q
/* These pins are definition at <mach/mux.h> file */
! Z) W% ^; I. B) f% U DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ Q; l D3 q5 C
-1
# x6 Q; f0 }+ f2 o5 d5 _7 S( H};
1 Z3 M# T. b# l+ K. }* {# k# g% |' z" s3 d" N1 R) r4 I" w
static struct gpio_led da850_evm_tl_leds[] = {% M n& _, x) K+ w
{4 [% p# A7 k) W6 t, F' B0 S. t
.active_low = 0,
4 a% G$ G! w% p% k( P* E .gpio = DA850_USER_LED0,% p, B% f, m% d7 I0 B' h0 g) D9 M
.name = "user_led0",. S0 L% W/ i5 B; h+ B0 a
.default_trigger = "default-on",
+ X: i q& [8 Q' t },$ h# a/ d) `3 {' f- V
{* ~0 X) `4 k/ j3 F2 |4 `
.active_low = 0,
* Z% h& f. l, ? c! N9 A' R .gpio = DA850_USER_LED1,
; s8 \- C" \/ ? L/ J; W# a+ m7 F- ~ .name = "user_led1",4 `7 w, ? J, _& R3 t
.default_trigger = "default-on",
; T- o7 z2 N; N$ M( e },
% K; _7 i4 w; C- M, `3 l9 J( W: J {
, u: o$ b! \2 G; Z .active_low = 0,
0 z* K X% t! l7 G. H5 p" A) ~ .gpio = DA850_USER_LED2,
$ N6 f* U; F4 [( c3 W$ F .name = "user_led2",
' U0 b, A$ j* }/ w9 m .default_trigger = "default-on",
& g) I$ T% K1 ?- r$ @- Z },
5 B- L l2 C" a; Q% f# k5 m {& I/ {$ X: A7 B& A+ e
.active_low = 0,
" V; T& Q3 l% Q4 C: n3 Q+ z/ P .gpio = DA850_USER_LED3,
& \( L. @( g& s+ Z, H6 V4 Y/ r o .name = "user_led3",9 R+ h+ N& v+ V9 ^
.default_trigger = "default-on",
- ^9 N, m U* S2 `! B) ?# t: z; N },1 v1 e* C9 q& a
};* |9 ^# p" r# G* j% B$ z0 V
' L; p2 S% N: @' L- G
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {- K( j; |/ H/ D4 X
.leds = da850_evm_tl_leds,
) v; H7 k! c5 c1 Q! a .num_leds = ARRAY_SIZE(da850_evm_tl_leds)," S) A+ z" [# _; q8 I8 Y- h
};$ P, [+ ~% ?! S" d" L( v+ I1 y$ g
6 g/ R- A- E6 j( L5 {5 E8 f3 Zstatic void led_dev_release(struct device *dev)$ F4 g, p& h% v/ X. m
{
3 S& z3 ]. N+ u' _) v" C};
2 h* P( M( V; {8 I& q1 [$ O8 R$ F. q; ^
static struct platform_device da850_evm_tl_leds_device = {% T! \* L" X) A
.name = "leds-gpio",
' V: d% w2 f$ t% Q e/ X .id = 1,
1 V6 ?9 K' e j .dev = {
' z Z# {' J0 k" S0 X" P+ y .platform_data = &da850_evm_tl_leds_pdata,
! ^( c, ?( C! |% {& O* [ .release = led_dev_release,/ R C' V0 z1 E$ y- E
}( g, B! [7 `/ o
};6 E5 N9 W1 j; P" ^. V N: L
6 z: J4 x% L2 t1 qstatic int __init led_platform_init(void)8 h: _5 o3 g5 h1 Z5 i8 v7 j, ]$ ^
{6 ^+ G9 C" @% `2 j6 B
int ret;
' v0 d Q, P" r9 w4 K0 N#if 0
; f5 m- U/ Z9 V. y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- `. L1 F8 F4 z0 Q$ U6 a if (ret)& U6 D C- I$ B* M, R. V2 X
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 S# X4 G/ H% D4 U+ J& L4 M: R
"%d\n", ret);
3 z4 `. c2 K* @+ c! G& K. M% R7 C#endif
! j& Y7 J2 n# k* R ret = platform_device_register(&da850_evm_tl_leds_device);1 L# l2 y- U! R5 V7 ?" S, h7 P
if (ret)7 K( s" I7 o& o, J l- Y4 G
pr_warning("Could not register som GPIO expander LEDS");
) S. ]) n/ l, R! ?/ C, v2 V else) x" w* Q% r4 X- v4 f4 l
printk(KERN_INFO "LED register sucessful!\n"); _* z* \8 ~# E1 c- S
& ]9 |$ X8 l8 A" Y
return ret;1 p u6 a0 G/ \& ]5 J% K
}) k: I5 a! W9 U4 a. A
. ~" {2 L1 \; J( n' v& Dstatic void __exit led_platform_exit(void)
0 R8 w& H, U: I N% X- Y# U{
8 p# f. p) _3 X platform_device_unregister(&da850_evm_tl_leds_device);
6 D% @3 O4 L% C; ?1 F1 `: ?
' Z- L( b% y% f: ^. N! Z; v6 e printk(KERN_INFO "LED unregister!\n");
; h) Y7 Y2 D9 X; k+ U}
% z! a2 n, M' m1 X2 d* ]$ [( g" A" G
' \6 ~/ \ u& d& mmodule_init(led_platform_init);* y" f+ i h; D& d* y7 H
module_exit(led_platform_exit);
8 k/ u7 n1 E* I0 F- G
* S; ~! g. z2 n+ z- L, Z! d0 JMODULE_DESCRIPTION("Led platform driver");. L& G- Y7 G8 ]
MODULE_AUTHOR("Tronlong");0 ^$ [1 P8 n* ~ X5 f4 C4 Z
MODULE_LICENSE("GPL");6 d: s5 m0 ^; Z" A
. d4 h% f+ ~+ }7 r |
|