|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ A+ J( ^/ M/ z/ ~; B8 R% _#include <linux/init.h>
9 X5 h5 A% |1 S8 }# ^#include <linux/module.h>
, @) E5 j# c+ A% O#include <linux/kernel.h>3 k6 Q4 T7 [5 I8 _4 `( U
#include <linux/types.h>9 P) J/ A% T& |, [
#include <linux/gpio.h>
! [# a" B1 a9 M6 f% E. W0 |#include <linux/leds.h>
1 J* D' Z/ K" V+ ]#include <linux/platform_device.h>
: M! a; a$ m& F. R
' D/ A5 Y7 g v4 w' n#include <asm/mach-types.h>! i+ ~: d7 P4 t$ x) x4 k
#include <asm/mach/arch.h>
0 D( l/ G+ @* l9 F#include <mach/da8xx.h># w) E2 b3 w. E3 ^. {. D. J
#include <mach/mux.h>
( q9 i1 F6 C: ^ l( c3 }2 F, V; j* [# `* F; N
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% D& N, z4 u$ F& Z# D
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ p$ L6 {9 B) d; Y" M# ]! U4 e8 f3 T#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) C H/ ` o' t& z3 V
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2), `1 @# c- |9 [$ \$ b9 ~
! C9 X) C7 L. |/* assign the tl som board LED-GPIOs*/
; q5 B% t4 j7 ?3 [7 a% `$ {, Zstatic const short da850_evm_tl_user_led_pins[] = {
1 | ?4 D1 s6 \4 B9 U" w4 v /* These pins are definition at <mach/mux.h> file */0 q: \. M. q6 O x
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, a8 G, {! r$ S+ B. |0 x7 [
-1
$ P- b9 j/ T0 k};+ i8 p9 s; T. r# \5 p; ]9 `
! T9 b6 q5 e, e5 y; ^0 {: p: L
static struct gpio_led da850_evm_tl_leds[] = {
, I* B2 X2 B. ^- k0 E" U {7 W# y* f) V( Z, H
.active_low = 0,
: D) c: v* Y: g0 K5 Y .gpio = DA850_USER_LED0,
! P, s: u5 C7 r9 c9 d .name = "user_led0",
7 v; G+ I: P1 B .default_trigger = "default-on",
+ C, n- Y8 I, D; Z },
8 }! o3 i& H) W/ T" m {
2 n$ U7 T$ ]; y5 O# ^ .active_low = 0, K6 W n3 R5 G
.gpio = DA850_USER_LED1,' g9 W( m% p! h4 r
.name = "user_led1",# h g& q9 `: N
.default_trigger = "default-on",
+ Y8 d* ~) C {0 f/ @: C; h0 s0 p },
6 P, P5 t! _/ c* q {2 a0 L9 d2 o4 b( k- b6 V0 ~6 q
.active_low = 0,
- T- D! k* I* Q7 T* U% q. v- G5 Z .gpio = DA850_USER_LED2,
& R. ]( i& o$ i. o9 u: M .name = "user_led2",
1 \) ]0 {2 _1 d7 Z. o9 k" I9 m .default_trigger = "default-on",; Q# U7 r8 L; y$ [) e4 j' M
},
$ ?5 j. c' u+ g w7 w; ~ {* Z7 ^" ~4 R4 d. ~$ y- f( H3 ~: U
.active_low = 0,9 ^' b& `) ~6 D; n1 b
.gpio = DA850_USER_LED3,
0 R' H9 ^3 g4 ^4 M .name = "user_led3",
) n! t9 ]2 y1 ?" y! [ .default_trigger = "default-on",! f9 U- W4 } R/ ^4 W$ _
},
: l3 |! L/ I" t/ Y7 P! W. d};" b( ?0 J& d, p2 w4 e0 [# b
. P V4 ~( a# D/ a( \0 [
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 ]3 k: Y) K3 \; ?# p" c+ z
.leds = da850_evm_tl_leds,6 R: |' v5 M3 n0 H: q3 W) l
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
5 N7 N/ s* a0 u};4 F6 U0 m$ n) [; s' G
( _% i. R0 V3 r+ jstatic void led_dev_release(struct device *dev)
, X) Q& f3 x% f# r$ Y1 n{
# }$ V+ G, g% ]2 x) p- z" l};9 N9 i4 k" S# ]5 z/ n
2 n6 j: X/ J* N5 E
static struct platform_device da850_evm_tl_leds_device = {
- p/ Y( v) r& \* L5 i0 b* {- b2 M' H .name = "leds-gpio",
# j+ Z, b2 Z- p3 d. V3 b .id = 1,
1 {) I6 c. t) a .dev = {
2 m6 s, ?% `7 x .platform_data = &da850_evm_tl_leds_pdata,, \! J1 d& o0 Q% A1 l
.release = led_dev_release,
: V# R n. W4 N' D* D }
- t, L4 L9 d% Z' ^' e% |};
; \$ g C5 d" L t" {! u' X1 Y. c2 y/ D
static int __init led_platform_init(void)
m# u8 {; L( V6 ?% m{2 y) c5 z3 G7 \- u7 J6 o8 }7 u
int ret;3 t- D* ?, T* }) |& d, v0 \' P
#if 0- k2 ~; x6 Z% X# w9 n
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
5 _- N% w' ]9 ~. _! D if (ret)
# p" V, ]3 B/ a3 e( h+ @; C pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, S5 W$ j* L/ H* x; o$ R5 J "%d\n", ret);
) K/ h/ i: r) q( N. [ b* h#endif
2 V; u7 M8 i. v ret = platform_device_register(&da850_evm_tl_leds_device);7 v% F2 ^) ~6 g; G
if (ret): @% a7 Z- e5 [- c7 _4 O
pr_warning("Could not register som GPIO expander LEDS");
% R# Y' M% \( o S( B) o7 m else. g& s8 l+ O6 ~+ q, z
printk(KERN_INFO "LED register sucessful!\n");
5 w) y4 q$ @/ |+ T; T# O* B
d8 Q5 v4 `6 C* K1 k return ret;4 x+ N& s. v$ K) M2 n
}# u* D2 a) y% ^* p
% q4 V" z1 P" d
static void __exit led_platform_exit(void)
9 ~: O) Z6 _" ^6 | W, ~0 F/ v{( o& ]& A" f2 l5 S. n/ f
platform_device_unregister(&da850_evm_tl_leds_device);
. {7 z9 `7 I' H# ^
7 S9 S$ R2 _& E; a8 ]1 x' l7 Z printk(KERN_INFO "LED unregister!\n");0 H# J% w8 ^1 W, j: M9 H
}
+ _6 H" R0 I# j( d* Y0 U6 ~/ V' j8 P$ ^( u" F5 _% y7 J5 I
module_init(led_platform_init);2 S. R: n6 f3 P0 x: \
module_exit(led_platform_exit);
n7 ^% C2 z5 ~$ {- w: L7 w8 \$ F3 j$ ~0 @" k4 O8 \8 b% o) C% n
MODULE_DESCRIPTION("Led platform driver");
4 h ?) |. S+ K- Z- c& G8 O3 r+ ~: n4 {MODULE_AUTHOR("Tronlong");
' i% ^$ x1 M( _MODULE_LICENSE("GPL");4 Y& u; Z0 F1 O' P s
: q; Z6 P0 K+ W# [* p: Q( ^2 @ |
|