|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 d- b7 ` k3 K& K k% [5 K W
#include <linux/init.h>
# v% \6 ?4 g4 N" B) w& ^#include <linux/module.h>
0 b. g& J" i3 N- x+ S8 u2 x#include <linux/kernel.h>" t* q) v5 r! X$ q- j' o
#include <linux/types.h>9 E5 ~! m3 P! t! m4 |
#include <linux/gpio.h>; R) T& V. u: G3 x
#include <linux/leds.h>
# V# x! W6 v5 e' J/ B#include <linux/platform_device.h>8 y( \0 P5 J" V. _2 D
) a) t: ~5 S8 z `/ Z#include <asm/mach-types.h>6 Z# H$ X9 @$ _, G, z$ \% O6 f
#include <asm/mach/arch.h>3 \4 ^4 ^! N" J* |
#include <mach/da8xx.h>
; E6 Z8 Q/ w6 S#include <mach/mux.h>
. ]7 i3 L r+ J- U
& O% Q: q+ ^6 I1 O A2 X! B#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ i0 n% F) z+ G e$ b' ?) S! j
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. i2 \2 ?6 e' S) E- b, J5 Y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& ?/ j+ o# @( M/ T6 u#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 Z! J) j* l0 c6 p d0 F$ F! x4 \+ A
9 X$ ~+ J8 W9 H& |
/* assign the tl som board LED-GPIOs*/- g+ p. M& N3 _7 e
static const short da850_evm_tl_user_led_pins[] = {5 I- l O: z! F
/* These pins are definition at <mach/mux.h> file */
3 b4 Q7 E+ P: p, q5 R& l& M DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 ^) A1 y7 H9 q -1+ G7 R8 @. ] G; ?' `! @, \
};
9 n" b' r" Z9 ]* a9 W
, {* k0 M9 {' C. Gstatic struct gpio_led da850_evm_tl_leds[] = {* h" a6 ], Q! R7 c+ |" Y Y
{
% l* W# |* g( [& N0 u9 r .active_low = 0,
) o; D6 {# D! Q. ^, ^ .gpio = DA850_USER_LED0,
9 _& M9 ]4 a, J# }6 }; x& G- w .name = "user_led0",
+ m* z; v; G, s0 z, {3 s. S2 [. C( u .default_trigger = "default-on",8 q* e1 B. V r9 ~9 k7 Y( `
},6 o% u6 a' W. n4 j# k6 Z- U
{0 r2 i4 }7 Z* [; {
.active_low = 0,
& m' {' [2 O0 i$ K- T5 Y. ]) s5 U .gpio = DA850_USER_LED1,
5 q6 h3 L7 S6 s! F+ f; l- O .name = "user_led1",
5 _/ r/ K! {; N .default_trigger = "default-on",
1 Q' m, h. i! C4 W" A5 _' E },
- e1 E( T& m$ P% A6 o, T* w {2 E8 k1 I% c1 q
.active_low = 0,0 I1 X5 N1 \, `! g! X: o l
.gpio = DA850_USER_LED2,
7 m: _* ]" q* p& I: _0 ?# E .name = "user_led2",
0 t, L' K. i" L: q+ v# l, I .default_trigger = "default-on",
% l9 O' B- J. n' @9 q3 D },
8 p4 A/ K B+ s! C% D {: U) |2 o2 b" { O+ d% w
.active_low = 0,
$ p* J9 }, I( _0 k; g. Q8 M! \& X .gpio = DA850_USER_LED3,6 f- n) |" B- |- X s
.name = "user_led3",
7 Z+ R1 x0 m# [" m .default_trigger = "default-on",
6 i- M) z" W9 {8 ~6 p9 I },
! z! Y# L0 w# k g: d" j( Y};
) q3 B$ ~* ^" b+ j
: |- Y; ]( g2 I, Ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; C, P$ ]& z* p .leds = da850_evm_tl_leds," y9 ?! R' l6 k( K% K5 `
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 p- D% O! R% d# R/ h8 C7 m4 Z
};& l4 t) v& ~- L
' t& m. l+ ]; Xstatic void led_dev_release(struct device *dev)
2 N9 t! K! G" k$ @5 z* y5 n5 Z{
/ ^7 A! ]0 J: B3 p};
! e+ ?4 \0 {9 h- b; y: t# n
+ B# [9 A$ ?8 M, N# rstatic struct platform_device da850_evm_tl_leds_device = {5 ^1 Z& H4 k0 F
.name = "leds-gpio",
7 h. z2 x0 _7 _5 k" @! H( x4 D .id = 1,) L( K3 N8 l- B5 b6 J, o5 \
.dev = {
0 L; I$ c9 U( N% m3 N- x* d .platform_data = &da850_evm_tl_leds_pdata,
! l" z* @6 c4 F, @, }' J1 J4 T .release = led_dev_release,: X- j5 S' ?# k( K5 h+ q* h
}1 G: i! h" u# V
};4 L# N7 s! X6 ^- m& n) `
, G7 r7 _- t# I4 w: Q( K a: c- m6 I; j. zstatic int __init led_platform_init(void)
% r, t" o, M# U+ W* J* a" v3 K{
$ _; U/ @/ Q% T( h5 ^1 @# j int ret;3 }4 \9 F' m8 n
#if 0
3 ~2 [0 }( j1 Y9 N9 B8 w: ?0 s ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
8 L0 v; h# o/ _: v; B" e if (ret)9 T |2 d) J6 C2 V
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"8 Z6 G5 P1 n. n+ y1 }5 ?0 P
"%d\n", ret);: R" }: c" \9 ?
#endif
6 o! s' g; l! C ret = platform_device_register(&da850_evm_tl_leds_device);
" k3 Y6 [) y- Q2 x) A if (ret)
3 a0 G# O1 f" G- D. k" W" _% e' \ pr_warning("Could not register som GPIO expander LEDS");7 w/ x4 y* P+ [8 |# d! U- x
else% q) x. d+ j# ], x1 ~4 Y
printk(KERN_INFO "LED register sucessful!\n");
8 j7 Y7 k2 S8 [5 U8 V0 |6 _7 Y# W5 K. c% v3 c
return ret; N( V6 z5 v1 C1 s6 F# u
}
8 e& t& A4 Q5 }7 D- f- {% Z Y
; t( L$ F- A7 n W& {- o& Z, s2 R4 N; |0 D. Estatic void __exit led_platform_exit(void)/ _1 h+ U' f# U6 e. K+ W- Q) ~
{; o9 d! o. u' s% I! I7 p, u1 F- r
platform_device_unregister(&da850_evm_tl_leds_device);
, n0 `4 D, F- M! ?/ V' u' n# X4 g. L# N* h8 C' q
printk(KERN_INFO "LED unregister!\n");
8 Z( Q# u* p5 R6 x( o}
- ^, y1 s' P: D
( a! D. |9 e. ymodule_init(led_platform_init);/ }' r9 o7 r3 }
module_exit(led_platform_exit);
: u8 B/ e9 z' {" C2 I }
. Q0 ^% {: ?( aMODULE_DESCRIPTION("Led platform driver");' z" `. o9 @1 q( p; ]. p+ [
MODULE_AUTHOR("Tronlong");$ A9 U9 T$ F' `1 n" x7 S
MODULE_LICENSE("GPL");
& \3 W+ u' ?+ X0 _
4 \' F& v( R4 I, I6 n- A |
|