|
|
求大神给下面的程序做注解,请稍详细些,谢谢。: Y+ ? A& x2 Z( f: Y: }
#include <linux/init.h>) o: B# E$ g5 n
#include <linux/module.h>7 _, K4 W- v* o3 S% e) ~& |) [
#include <linux/kernel.h>: o: P6 `1 _+ h9 V; C
#include <linux/types.h>* H6 L6 n/ q4 f9 @
#include <linux/gpio.h>
. a7 F' l* ?" a" `1 g8 Z9 a; G#include <linux/leds.h>; ^. g/ b/ g, c1 b- Y$ Y) m
#include <linux/platform_device.h>
9 ~7 g9 d9 [6 p6 {
' G( @+ U! d. d8 c5 v#include <asm/mach-types.h>
m% R% X9 X2 T6 m I#include <asm/mach/arch.h>
2 Z7 E" H" m2 R# z/ D& j! U! R#include <mach/da8xx.h>
# e& e. {" f1 C3 W9 u#include <mach/mux.h>6 @6 A+ U; r- |
) ]& z. o7 B8 I7 [$ v @( B) X, x. A#define DA850_USER_LED0 GPIO_TO_PIN(0, 0): [9 n2 P1 J; |2 \9 [3 T
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 \0 d! @. F& A+ T% E! J% S#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
0 b8 g% ]4 M8 M5 E, L#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 V, s- i3 O! k0 h4 I3 F. G
5 |2 R9 X" w1 n" J+ z( P0 L
/* assign the tl som board LED-GPIOs*/3 U5 I) A0 |9 ~
static const short da850_evm_tl_user_led_pins[] = {) O+ w! G/ s6 P
/* These pins are definition at <mach/mux.h> file */
# n" U, ]1 k; c DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 z/ u0 z( t8 L3 N/ S q
-1
) }, l: x1 m* J! _};/ {" d7 h* Y4 |! T
! C+ t `0 _3 g. j1 [5 e8 n0 s
static struct gpio_led da850_evm_tl_leds[] = {
# w* V3 T' U" v! e0 ^6 W {
* P4 A) k% n$ b$ U6 y .active_low = 0,
4 `) |; |. y( u' ~2 [, m .gpio = DA850_USER_LED0, K* ?2 p/ C t% R5 @' S; |8 V
.name = "user_led0",
3 H' I$ m0 A5 D* s u/ b .default_trigger = "default-on",8 Z& F M1 y; H, l
},
( B+ W8 v O, z4 H+ m {
8 Z2 m0 }& ^9 n a .active_low = 0,( K& {4 Y+ ?7 }& i! o
.gpio = DA850_USER_LED1,/ p- }; i3 ]7 p
.name = "user_led1",8 C0 [3 b2 C) Y7 c. W/ }( R
.default_trigger = "default-on",* {: c- O+ l0 R0 o- Y
},
" ^3 `* B* b* P {
: b0 j; d6 [1 d' M3 x6 t .active_low = 0,) M2 J4 |9 a5 r# p' X
.gpio = DA850_USER_LED2,7 A6 c6 a, i/ K @, `1 M
.name = "user_led2",
) N, d9 q. O. [3 { .default_trigger = "default-on",
4 E: Z3 X/ O2 t" i }," e7 T8 K: a6 N* m. w
{+ X+ K/ }0 m e# W
.active_low = 0,& V. T# ~* e2 ~, T0 P! x
.gpio = DA850_USER_LED3,/ Y3 v: T; P$ y
.name = "user_led3",
! z0 u( n0 w+ K3 [2 g$ |, V .default_trigger = "default-on",1 n5 M4 k8 \! i! |% M( e
},. v9 z: ?- G8 _$ h% m" }
};% I K) [' F1 i) ^- P
/ b5 c7 K B* d. p2 ]static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ ~& }# p b- z/ r .leds = da850_evm_tl_leds," c/ h# K2 Z$ h
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# C& B) N5 Q& L# d$ H- e$ s0 C};- h' W: f8 N! V! h2 k% i/ Q8 u
0 i7 r% h+ ~* X; ^* i
static void led_dev_release(struct device *dev)- {3 N- }; Z% U; C$ @' ^
{$ `) D; c, g/ Y; i1 M5 x# ]
};0 G' U; B% T* |5 E8 q, d5 h+ b# W0 Y
' _: R5 X# z) }/ \7 M }+ ~static struct platform_device da850_evm_tl_leds_device = {
0 d6 Z& F E4 t .name = "leds-gpio",' O& u" Y9 q$ _# z: Y3 A( D% n
.id = 1,
/ c3 ^7 n, g' W2 ^; `0 E% H .dev = {
Q9 |# T/ H" P8 S+ v- z .platform_data = &da850_evm_tl_leds_pdata,
3 m: d1 D0 ~& N1 k$ M" r .release = led_dev_release,( A, e' N9 H9 ~, y3 P! \7 C
}3 a, m$ y# r1 h; V& p; f
};
: k6 g& k9 i+ W7 ]! \- N8 M
k2 u0 M; D+ ~# |static int __init led_platform_init(void)
7 s5 n9 C1 o! ?% t6 o5 V{8 B6 k, x8 S9 n* U0 s6 i. n
int ret;, o# ]2 ? G. R* p2 Y+ E
#if 0 w# m+ I. I# g3 h, D
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( |0 U1 d8 N# N7 m
if (ret)
" N7 }5 l3 a; ~5 |4 h) w# d8 w pr_warning("da850_evm_tl_leds_init : User LED mux failed :": m3 K9 H. V9 `4 P. N1 }
"%d\n", ret);
0 k0 \6 f, ]& }#endif
6 M8 j x* o6 U& `# K3 r7 k6 g ret = platform_device_register(&da850_evm_tl_leds_device);: u. \' f' Q2 [/ n# o
if (ret)
* L) p! w# \ x$ X3 N: A( m, n pr_warning("Could not register som GPIO expander LEDS");: a' [- W9 e; q, A8 @( z, ^$ E
else
) X# V" \1 }5 y printk(KERN_INFO "LED register sucessful!\n");
7 v3 p1 @ k% @5 V$ A% e! s5 s' T9 V) x
return ret;
+ h" [. v5 o+ j( H L L}- `% q& R$ L1 \$ U9 @. b9 p
6 q8 E* W! e; Z; R" nstatic void __exit led_platform_exit(void)
. ?: B& _% } J+ h7 n{
( m- a; L0 z0 ^$ @6 O platform_device_unregister(&da850_evm_tl_leds_device);( ^7 G# L! H$ f1 H+ @6 [
! j+ T5 N4 }4 J
printk(KERN_INFO "LED unregister!\n");9 ^1 Z+ F8 X q' \
}/ S% S1 z w! k% y
& X0 A) q4 Q6 R2 q& t
module_init(led_platform_init);
, p" `7 ^# c" B0 `7 Gmodule_exit(led_platform_exit);
* s& ]) l# W$ W/ _8 x }
/ h8 D T( ?8 R5 W& b7 a) T5 h& YMODULE_DESCRIPTION("Led platform driver");& |/ ?0 K$ ~9 |3 L- x! Z* ^, H
MODULE_AUTHOR("Tronlong");' K o! x9 ^* z. s4 }( R
MODULE_LICENSE("GPL");2 U2 _2 _7 f" e. P$ e, F3 q
4 U+ g# x2 _8 N! [ |
|