|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
% q6 n+ s4 R3 t% Z#include <linux/init.h>$ T6 v1 i3 w8 a, B# p/ n
#include <linux/module.h>
; M3 u8 T$ J% C% @2 F#include <linux/kernel.h>! D$ k6 f/ ~, C k' j
#include <linux/types.h>/ h: B' @0 b4 G
#include <linux/gpio.h>
' ?: M G2 j$ b0 R9 }) d#include <linux/leds.h>1 `4 A3 n. l: U/ V4 \ Z
#include <linux/platform_device.h>2 Y5 u3 B8 a& H2 o8 c% [/ W
8 T; ]2 d: f$ d: B/ c#include <asm/mach-types.h>( \/ H$ K1 [9 J
#include <asm/mach/arch.h>; B6 q5 u+ n: Y
#include <mach/da8xx.h>
@; P; h* `& W/ J#include <mach/mux.h>
7 C1 `! Z0 n6 Z! }" A
5 H+ A, S& c3 ?. q( }#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! `8 b4 v% t c7 @#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ V9 J! b- `# E* S* ?#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ X9 s: `. {$ I I#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) C( x: f6 E1 x
9 ?3 K' Y' L/ ?4 P: o7 v4 j" c! o/* assign the tl som board LED-GPIOs*/# L5 f5 P" r7 g8 y% ], g
static const short da850_evm_tl_user_led_pins[] = {2 A @. n" ]2 P: H: c- S' G9 m
/* These pins are definition at <mach/mux.h> file */
7 f8 q0 z& K* M( b! [0 V: I% @6 } DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,3 o" S& X3 u4 \
-1: q7 ~% e- i- J1 e6 W( p
};
6 a. y6 ?4 n9 I. v# j; s" h7 m" ^2 u# }% @' x
static struct gpio_led da850_evm_tl_leds[] = {7 [5 ~' Y2 w. }; |9 r( d, T
{1 U0 H- Y, b% ]) f
.active_low = 0,
+ A7 o* A- X7 t+ u' }- q .gpio = DA850_USER_LED0,
; ?8 i: U1 R" q9 t$ M+ _1 ? .name = "user_led0",) e) s8 w, { s, i9 e$ X% J
.default_trigger = "default-on",' P# t% F+ p* B* _. ?7 W
},
* D6 Z/ o4 L* Q- J5 E7 R7 N5 L. U% y {
: y2 \( S( V. E .active_low = 0,
0 d* E: a. B8 Q: w' w7 e .gpio = DA850_USER_LED1,+ S6 h: V, p+ z4 E! o
.name = "user_led1"," O+ X+ v; O1 A. l) _( s
.default_trigger = "default-on",
- C: t4 A: l, X* s/ `" |" q },
& ^( h4 X& J5 X, T; b' a: T8 } {% }+ \) A6 G9 Q3 J) M
.active_low = 0,
- J& m' W3 e: P& S' M2 i .gpio = DA850_USER_LED2,
, s: c+ T0 S( f, K6 g% z .name = "user_led2",; u' f5 G" r) V' o, e8 H; ?) j" u
.default_trigger = "default-on",
+ T( V: K5 ? @: g6 P$ R },
6 x) c+ s0 Z1 z( ~, m2 @# s8 ~ {& E9 B, z$ h" D$ j$ e3 g6 d2 K9 f
.active_low = 0,/ \ p1 u O, ~
.gpio = DA850_USER_LED3,
4 n& d7 ^1 Q6 N. I+ d3 G: Y .name = "user_led3",
9 [0 z; q2 i+ x: I .default_trigger = "default-on",& r" S; V3 ~( |
},
* m3 d! N( f4 V' `7 i9 A! }};
( n( z% o8 S7 t* r3 X$ `
' k6 y o& @1 Z' X; E c3 Cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: s7 i/ C2 R3 j, ~) v& Q
.leds = da850_evm_tl_leds,' g/ w- ]0 F6 W! \* p
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 ~/ G! B q X6 X2 |1 J/ @
};9 T! j7 m$ z- |; ^5 e$ E5 V3 c
3 v6 s, E% e q3 n. L' Mstatic void led_dev_release(struct device *dev). P, g! `9 `& y& b6 P
{5 g, v d/ E; q( c% @% p
};7 K1 k) [+ _8 V# X7 y; H* n
5 u; D( g( t! Y, ?static struct platform_device da850_evm_tl_leds_device = {
6 A8 {9 H( ]1 S .name = "leds-gpio",; ?! Q5 j0 X8 _/ \0 W$ \! h
.id = 1,
. k& b+ P/ d+ k% T! S .dev = {5 I3 D% Q3 d0 d5 h
.platform_data = &da850_evm_tl_leds_pdata,
, j" \' E H- I# J. ^ .release = led_dev_release,
* R# n! N- S1 e/ r( P4 ?. _2 {- J }$ U9 d. Z8 y/ X
}; t& Q2 j, Y6 ~( I; H
- X7 M9 D5 k$ l8 Z4 X* l& y0 Nstatic int __init led_platform_init(void)% q( o' z; y9 y- I: u; ?
{
1 r, F9 J, z- L, h: e# c8 F int ret;
& r4 b6 M6 w) ^#if 0
2 U9 v4 [, m: P! y0 H. A2 u$ F) z, ` ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ l ]( W2 a+ N7 n( E* ? if (ret)
) B4 s; i) v: y pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 A' I3 j5 @5 A2 ?8 s6 d "%d\n", ret);
( S) i0 V. u& T2 D4 m3 J+ ]#endif
; W; f2 g$ \# o' s ret = platform_device_register(&da850_evm_tl_leds_device);; Y9 B# M' q- q; N) `' v. r
if (ret)8 b! ~& v, ], C: d0 A* m& K
pr_warning("Could not register som GPIO expander LEDS");
# ?6 P4 D; X4 X9 n m else
/ @1 S5 R! d ]6 k; ^- ? printk(KERN_INFO "LED register sucessful!\n");
v: M! R9 ]- }' {- N1 s' T3 a6 y( }+ N
return ret;
' z) G! }8 A( S4 k6 J}
3 O0 I% h( p5 }1 ]2 `/ S2 k
) ?/ ?4 i5 P( j- g! f% Cstatic void __exit led_platform_exit(void), a( z& U5 r4 |% x1 `
{% A: `, u% g7 ]: Z9 Y& m7 U
platform_device_unregister(&da850_evm_tl_leds_device);! J. d- q! @ e! t' f ?
5 I; ?: n- `. N% D: v- F6 P
printk(KERN_INFO "LED unregister!\n");+ w5 c# K! H" k0 X/ V0 q- u
}4 b9 ]* J/ l" n
, A: g7 F$ y& [8 V8 ?$ \* F% Fmodule_init(led_platform_init);
! `- Y$ k' v$ |0 H9 z1 E. rmodule_exit(led_platform_exit); n2 Y0 Y, y( K U
: G( f: \' ^* w0 d+ ]2 b- P/ `MODULE_DESCRIPTION("Led platform driver");' C0 P! f7 b' q6 A: ~# h; P0 M
MODULE_AUTHOR("Tronlong");
' g1 Y6 e5 m9 ?( s; l1 [- \MODULE_LICENSE("GPL");$ O: j! R- o# k" h4 y6 s M5 v5 V2 K4 K
8 c1 I2 C3 Y9 X2 `) Z/ } `" M+ X
|
|