|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 @, ^3 W) M' v% ~4 ]+ t#include <linux/init.h>" t R" u! U2 s$ T( U; Y9 \
#include <linux/module.h>
3 r/ R$ M+ z, R. T; a! i#include <linux/kernel.h>
. }. `! E Z/ ?8 H$ |#include <linux/types.h>; h* N5 b7 D+ x
#include <linux/gpio.h>
/ w& m; J" p! c' S" g% t3 S: y#include <linux/leds.h>/ t7 s* a( J( z% U
#include <linux/platform_device.h>
7 i& O/ X6 S) H' k8 n
1 V, b) Z, {3 J# g% \" {2 O! z#include <asm/mach-types.h>
3 {& b9 k- N4 y! w2 z* c* l! e* L#include <asm/mach/arch.h>3 H, k8 F5 t; M! t- w7 b
#include <mach/da8xx.h>/ T0 n2 p8 {6 [
#include <mach/mux.h>& L) A7 \: A" p/ |# E
& n7 \; H M: z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 A( n7 `0 |9 ^& G0 e+ x
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 ]- O4 a1 b5 Y* e" K5 q S#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& M9 j" S! \: n
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: C7 y3 d" X) Q6 i9 Z. q
' ^, H. l2 |: n* ~3 q$ X6 W |/* assign the tl som board LED-GPIOs*/
5 I: H' `# f! lstatic const short da850_evm_tl_user_led_pins[] = {
% v( L% V8 G% p7 I& p2 A /* These pins are definition at <mach/mux.h> file */0 {& o6 \) r" W; u, A6 [0 B
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 J4 g8 U8 n# c5 J
-13 u+ Z& y& h* ~/ M1 _9 N
};5 ^7 T3 }: e" _4 c7 S
4 H: p$ ~& ?$ l$ r, j) Q
static struct gpio_led da850_evm_tl_leds[] = {7 \/ \- B/ J( j$ S4 O
{+ e& R3 \" v, H
.active_low = 0,7 M0 v; G& h) C+ k! i1 X3 Y
.gpio = DA850_USER_LED0,3 n/ i8 s5 R+ Y
.name = "user_led0",
, \3 t5 {; k1 c E .default_trigger = "default-on",4 T K% L7 s. D$ c3 U4 v
},
3 P1 A. \' ^# j {0 K% Q$ V& q7 z$ G7 s' e
.active_low = 0,- D1 |+ X# _' @% X6 t9 a3 \3 W
.gpio = DA850_USER_LED1,
3 o/ \$ a _ n& H: X .name = "user_led1",
: G- h- b* ?. e8 K: L9 K, m .default_trigger = "default-on",0 i" _8 H) a, n3 W
},$ d3 N0 r5 F, J7 z& N
{7 Q! h' @8 R8 ]9 [; _
.active_low = 0,4 v; k! Y- n: i2 q
.gpio = DA850_USER_LED2,
: w0 Y1 r8 ~* K. ^' P) P .name = "user_led2",4 m$ X; _, F4 g
.default_trigger = "default-on",
# @- P. S2 N H$ T1 w r },
; A/ s# i+ g8 g, B M {
: z+ J4 E7 G# ?5 P, g4 c' n* ? .active_low = 0,
( s- R: \# |% |& I, N! E; _ G .gpio = DA850_USER_LED3,
! Z3 H) ^7 Q8 O; d$ v2 _ .name = "user_led3",1 M" ?( c. O% _: n) X) \* ^6 z
.default_trigger = "default-on",5 X" e r' C' T& z6 A
},$ \3 r6 q5 h( u* d7 L
};
) `% l+ \) Z( a9 P5 e r$ X- ^. R1 x
! E8 d9 x! c" X- ]static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* _) w5 H7 |) T& R& }: y% w
.leds = da850_evm_tl_leds,! b' z% I% M A7 ^9 P
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),. m3 V! L) p5 u2 j1 H! P
};# J9 y& e9 ~9 Y$ p5 _) G' h
$ u( v3 v3 S- j! D, u- E8 E- Zstatic void led_dev_release(struct device *dev); c/ R: }" k" U* }9 Z! P" r
{
* _) L5 S$ Y' E/ W2 s2 m: f};
! c0 o0 g0 c L( p9 u5 Z* i$ v& ?$ U) B
static struct platform_device da850_evm_tl_leds_device = {# h+ b' M5 I# {. j# m4 s( o+ w
.name = "leds-gpio",8 w( x3 @4 Z, x' s
.id = 1,
4 T2 S% @! O; \& f6 G .dev = {+ \1 b. T; R, _- y' D
.platform_data = &da850_evm_tl_leds_pdata,4 n. e( H, ~8 { X
.release = led_dev_release,+ T- }2 c% ?$ F s6 C* v
}0 h" |& T* _- G; x; O& k- K
};
, [. m" n& k: ?9 {
, M2 u# w4 G2 S% y# b! y4 Ostatic int __init led_platform_init(void) W0 e- [4 D- O% z% V
{
* g" T" Q1 g9 T& h9 B; ? int ret;1 F/ r0 ^2 v4 \/ o/ V
#if 0- j4 z! {2 X: e; q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) N* k/ ?, ]5 f2 l E% \& j. H+ C if (ret)
5 v5 u9 P" {3 N& p pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ B2 V* _; F: U; _1 H5 W "%d\n", ret);+ Z7 n j( T, D& ^
#endif+ F, P8 S# A* K6 \; d8 Y
ret = platform_device_register(&da850_evm_tl_leds_device); ?+ f& h& T1 i/ G8 m
if (ret). `2 U8 @5 G* S- x* x5 @* s7 m
pr_warning("Could not register som GPIO expander LEDS");
! O4 Z0 p$ z9 }, u5 z else
0 \/ t6 E% ]! w( C# D printk(KERN_INFO "LED register sucessful!\n");& o2 Z& q! a( A; ^# n2 Y
- h! ?7 z/ m+ h% ^4 c% c; F+ F
return ret;
6 c. r3 ]+ s; K n- ]4 S4 I}
0 L- k1 S, r _' t9 w5 \9 ~: Y4 x( T2 b2 u5 L. N$ u7 M( l
static void __exit led_platform_exit(void)6 e- c% ]9 s% B2 o; b5 l) m. o
{( j% l% p; W* P$ C( q
platform_device_unregister(&da850_evm_tl_leds_device);
) |( a& c; L9 u0 M: ]& W# B
% J' s8 \# z$ Q' s8 k! s& B; H printk(KERN_INFO "LED unregister!\n");1 }8 I# ]2 C, v; i+ ]' ?
}& n, l9 |" \* l+ @+ O
& A8 u- k7 W; ^+ P. Mmodule_init(led_platform_init);) P$ w) o2 _" n; s& U
module_exit(led_platform_exit);8 g( `5 ~# p6 ?& a. d
9 Q; L: g9 k: b+ n* O
MODULE_DESCRIPTION("Led platform driver");
/ I, Y6 K' X( w" l, M7 o& Z2 i- {MODULE_AUTHOR("Tronlong");
6 x) T6 h9 F& r6 S; X1 y7 V3 |MODULE_LICENSE("GPL");8 d" U* m) j$ D- n$ L
* e" C0 ^" }8 V. ^! L( w5 \ |
|