|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& t4 v, u; w- { s! V3 ^
#include <linux/init.h>+ U( h5 @# Q! Q/ x( C6 E8 T. s. E
#include <linux/module.h>
7 |" J' c/ m- H5 y- ^* Y#include <linux/kernel.h>
5 `/ ~3 \- ?5 g" x#include <linux/types.h>
: Z0 X6 F7 g+ Q4 m#include <linux/gpio.h>
& _( F+ e C$ S. o#include <linux/leds.h>
9 s6 e# s" U( M: b' b2 S#include <linux/platform_device.h>
+ T& d3 y3 p5 ^6 h
2 v5 F& m1 n: v1 L5 F#include <asm/mach-types.h>
& o# U* d' t# b7 \ M/ D#include <asm/mach/arch.h>7 P# ~2 W3 r% J6 I& [
#include <mach/da8xx.h>
: ?8 G' U# C/ t3 v7 S( k" H#include <mach/mux.h>! S0 X" T u( t% q& p# }
+ C7 j4 D o+ G+ [3 R6 n#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% O/ q; M( K* D A1 P#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ s. l. x* B" ~#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" C- z$ H& @9 S, w' Z# A4 ?$ `
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* @1 @# C; [- T
) Z& ^+ |' P% U+ ~; T0 D/* assign the tl som board LED-GPIOs*/
) T& l. h( f# O" Kstatic const short da850_evm_tl_user_led_pins[] = {
& z) L" H1 j5 Z /* These pins are definition at <mach/mux.h> file */
* D, K& s( ~' U* g1 {' f DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. @1 o4 Q5 t2 b- H1 H! f: q7 D
-1
! ]# I1 F O: S4 T) j5 n};+ ]2 q# k& X) _8 U3 H$ }1 z% p/ z* E
N0 C; @& t1 e. L9 s; \5 tstatic struct gpio_led da850_evm_tl_leds[] = {
3 }1 p6 g r% e+ E d- m; t3 C/ k% S {
, A* {: T$ s' U# m8 K .active_low = 0,5 Z8 A5 o' b7 I' O& n
.gpio = DA850_USER_LED0,) [6 f" I* S h1 [- e# r. w2 o, a
.name = "user_led0",8 }" @3 Y1 T2 j' U/ Y4 y5 u/ K# p
.default_trigger = "default-on",
& J( Y1 d, b, Q },
0 f" B2 ?6 }* Q& } {
. C2 D( p: ]# @1 _3 g! ?2 Q4 c .active_low = 0,+ J# ?3 n* `) u) R
.gpio = DA850_USER_LED1,: ~: ~0 ]* r* {# z0 w$ P7 g1 p
.name = "user_led1",/ ?3 j- Y* ]& ^% d
.default_trigger = "default-on",
/ B: ?$ w2 H: i4 ~( H# [ },: f7 ]) {9 I# }( m y
{
% p; Z8 j- e! k) Z! V1 l .active_low = 0,
, A+ i. Q6 Q0 p0 X+ Y .gpio = DA850_USER_LED2,
7 q% x: |2 u8 K9 M% O/ V6 }. B .name = "user_led2",2 r# D. d7 S6 H! c0 |! d5 t
.default_trigger = "default-on",
- e1 m% ^- l+ n: d) M$ \ N },% ]! h! W c1 A: K. d9 F' F( Y" Z
{
/ E# i' C7 o& _1 m* y6 h .active_low = 0,
' a p% l+ C& Q3 U .gpio = DA850_USER_LED3,/ g: V) C$ Q; a
.name = "user_led3",
$ O$ A' S# c) ?" l" v9 X .default_trigger = "default-on",
# ~! I1 X% l/ d+ A$ j( u },. O' i3 z3 u3 F% _' a; j/ r
};: Y+ \. c' l# p- L7 Q) r0 S6 O; @
; H' v: P% g z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 D' D+ m+ s& V .leds = da850_evm_tl_leds," s6 P1 c' Z2 q: H, ~
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 T2 J, _/ H: W7 T% D5 w};
0 O E+ I+ \$ i# |& R) i, u
# }) t- w) H5 F+ X6 }$ Bstatic void led_dev_release(struct device *dev)
3 Q( Y; J }* z/ W- b6 e) L{8 v# u8 Q' E$ G g$ `6 K: Q
};
3 s4 W; m2 ^6 z; x# C" B
: H$ v3 Q ~& o8 j( y# v3 y# C, Q/ Dstatic struct platform_device da850_evm_tl_leds_device = {0 l% S, ~) U# A/ s5 x' D8 D
.name = "leds-gpio",5 V& i+ m& d ?" b/ L, \
.id = 1,
( j3 b& A6 f- C' f( A3 ~: q4 h1 \+ g .dev = {$ z* q0 r9 N, S4 A' p3 v
.platform_data = &da850_evm_tl_leds_pdata,6 n1 R2 L) D' G
.release = led_dev_release,
2 @4 W' g' ?; L) \% Q* J }
: g5 L4 v/ x& X};
$ ]0 i% p. m. t- T6 } v
6 o( [9 D# X0 P" a( Y3 kstatic int __init led_platform_init(void)3 F) H1 w$ O' Y4 T9 w3 I& z
{
. C/ F# E' [6 a5 ?# C6 D3 Q int ret;
0 U# v5 k z1 ^4 E9 i#if 0
7 ~) m0 U; _2 H! @ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; d" W: f7 z) w! o2 V
if (ret)
; y0 r* p, w6 @: x3 m1 t9 L pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. X4 `8 w U1 O8 B "%d\n", ret);
" s" G2 ]% T% X9 H- c$ y! P#endif7 p' K5 {) X! R, q8 u
ret = platform_device_register(&da850_evm_tl_leds_device);
3 @, E: o3 ?% W" T( | if (ret)
- W# B9 _3 P7 j# B. {9 K pr_warning("Could not register som GPIO expander LEDS");
. L& t( l5 Q( u. j: o! S' H+ f else9 ]" T7 K7 ^& g) @4 O9 U
printk(KERN_INFO "LED register sucessful!\n");
8 |9 N2 a3 D/ R! P1 y/ Q6 a3 E0 Z; W @: Z: l: K* Y" F% M
return ret;+ `" ?" E0 N. y1 N
}
% l$ J2 C8 i4 i7 A! o, W& f7 j
& H" v9 W" o6 u" C/ H6 jstatic void __exit led_platform_exit(void)% P( O& A+ B, d; T* P- L \. o. t
{% B( e0 a! k6 Y1 s& V
platform_device_unregister(&da850_evm_tl_leds_device);( S& Y- Z7 p9 L/ r) l
' _% n+ O) V% w: m% j/ y6 t y. o printk(KERN_INFO "LED unregister!\n");/ Q9 k( i2 l8 ?: L
}* [" s0 t+ G, C& I; V$ A
2 {/ r. y9 s# ~ K: I* }
module_init(led_platform_init);- R" [/ }/ V7 k. Q8 J. ?2 N
module_exit(led_platform_exit);
3 R% B( v0 I# G' }9 j+ M) }) Z6 g5 R+ _, u" K* c8 s5 ~
MODULE_DESCRIPTION("Led platform driver");
. }8 @' Y1 V! Y& q s4 I: GMODULE_AUTHOR("Tronlong");
; a( m0 u/ n0 a! ]MODULE_LICENSE("GPL");
. J" @% o1 d# b" H
$ \1 _, e& f @ x% Q |
|