|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 d; C H% Z1 ]
#include <linux/init.h>/ Q0 w2 b6 u. T) n
#include <linux/module.h>
7 N% c. n1 b! q/ d! g+ P' O; M* {#include <linux/kernel.h>, E% X# \# V+ j+ ~8 _7 A
#include <linux/types.h>
3 O M h' r4 N7 ^! \#include <linux/gpio.h>8 d% I9 K- S# O/ ]) y6 E, ^; p' L
#include <linux/leds.h>0 n7 D7 S( S2 k4 }' d
#include <linux/platform_device.h>
; w. h# i2 y7 |
9 q, P' d( Y0 l3 U: }#include <asm/mach-types.h>. I% Z' ?1 ?" ]! l/ x3 H" X( p; N8 o; Z0 o
#include <asm/mach/arch.h>' B/ g- b' ~4 F6 L' S0 b
#include <mach/da8xx.h>
% G3 a: F0 C) Y E+ F#include <mach/mux.h>
5 P4 ^" t1 t2 F( V6 O- K6 S" F5 A" I: @) F% o: }$ S
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)4 V3 Z1 A3 Q5 r3 O5 h: Y! Q1 [/ _
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* ?, J$ v9 o( ^. y# M#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) O* k& s3 H+ A. I#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* b/ [, E- [# P7 x
. T @' o. @6 T T2 j/* assign the tl som board LED-GPIOs*/- T! _$ V. D, x9 h* s
static const short da850_evm_tl_user_led_pins[] = {
3 m8 S0 f5 z7 q2 N /* These pins are definition at <mach/mux.h> file */
. q7 z* x: Y* ~3 I- M2 T9 S DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) Q6 j& A: c2 p+ Y$ A
-16 N$ f0 M' O; [5 N% ]
};
# l" y7 j' m/ u
! ~. Q/ q J( w7 qstatic struct gpio_led da850_evm_tl_leds[] = {
! n4 S6 Z. }* T% }! C) E$ J+ h {
4 W: L) V% T1 H, S2 @ .active_low = 0,
. [2 l4 Q2 N7 i1 Z3 s .gpio = DA850_USER_LED0,
4 n- d6 w8 |: r5 @, d, x0 _ .name = "user_led0",
. @ ~) Z0 L; } K5 H4 R- ` .default_trigger = "default-on",1 T6 D* n" C, ~! u
},
- ~) A( C4 U0 g U6 g, Y" m7 l {2 r8 O4 W y5 e3 B
.active_low = 0,
. E1 H* i2 D8 ?, P2 ]: ^6 h .gpio = DA850_USER_LED1,
2 ` d) F3 b) C2 W .name = "user_led1",3 m1 h5 W" A5 t
.default_trigger = "default-on",1 |6 d) H3 b) V# W4 q: o
},
# o! t7 C: h+ L, {0 {) X7 N {% G( a& y9 }% P$ o7 F
.active_low = 0,
/ j3 ^7 r& E& ~) D .gpio = DA850_USER_LED2,
- \6 `2 K( p/ y5 @( V* K/ f .name = "user_led2",9 R9 b3 e7 X8 \6 o& [' \
.default_trigger = "default-on",) K9 G g* `, I
},
8 g: T; X. O/ n9 C) n! ^5 s/ g {
: B, G/ ?# U/ K# W8 o2 v- J" B .active_low = 0,0 @! _$ @! n" j0 x+ t; N* ^
.gpio = DA850_USER_LED3,
* {# S% { i6 U' h; v) I .name = "user_led3",
5 f' S1 g8 V- B$ |! S z2 L' i .default_trigger = "default-on",
, u( M8 S$ r: R- s% w+ f },# R2 o9 k! q/ }" S: D& @
};9 c* ]9 x! `6 g7 \+ K
! m2 C: z* {6 e/ O9 l8 U
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: e( w( R! s! e; h+ X# ]. o
.leds = da850_evm_tl_leds,- _% z6 s6 |9 N
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),; K" s" X1 H: |9 Y* F
};
' U' _7 I! }8 q1 C" o' d% n$ x* G& L+ Z; J- ~2 w1 B. d k9 \
static void led_dev_release(struct device *dev)" h9 a/ b6 U8 J. Y) h
{, ?3 K/ h/ C3 Y# L! V9 j5 }
};
2 W7 [( C" N; Y! h2 P. T( j! u3 }6 S& F
static struct platform_device da850_evm_tl_leds_device = {, @. P5 a* i$ c4 c4 Z
.name = "leds-gpio",2 J. S# m. j! G2 @( a7 q
.id = 1,$ t5 f" l+ `3 f
.dev = {
" p! g" V" l3 B2 O" { .platform_data = &da850_evm_tl_leds_pdata,6 ^. a* l( j9 {) B2 N0 i
.release = led_dev_release,4 w% r! q9 m0 m" h/ D K. y. R/ W
}
/ K0 U! Z" }1 n2 P! f- [};5 l- ~: r/ i% C/ b
* I* j8 u7 I; X5 U% B( e# Wstatic int __init led_platform_init(void)
- g6 p3 m3 u" A4 X; j{* x% Z4 G5 @/ i9 Z8 S
int ret;
9 u- C1 f0 J- \) B3 `#if 0% K, K! d. D: Y* P& y+ W9 b
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# b- {: b2 E, h7 Y4 m
if (ret)/ o1 ^: }/ E) p- n" ^* O
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 {" F: m) |: u: A# Q+ o4 L
"%d\n", ret);
- W8 Y1 Y) H" U2 J#endif9 `) J, \, d+ z o
ret = platform_device_register(&da850_evm_tl_leds_device);* r! \# V/ T5 d& Z
if (ret)7 w( Q2 F* ]( j. M9 J
pr_warning("Could not register som GPIO expander LEDS");
. x7 }& j3 d; S; E, G# R6 F else
3 B- R1 z% p( o' n printk(KERN_INFO "LED register sucessful!\n");* o! c) ^' Q& i
3 D0 A, v0 [1 ?
return ret;4 Z' j! e$ h1 G$ a7 A! {7 F' G
}
/ y3 m6 U. s$ ~( t5 _
$ f% L9 a5 j* |9 _* Mstatic void __exit led_platform_exit(void)( O! J7 Y! p1 n1 P
{, H& t# C6 \0 V1 i3 f5 W: s
platform_device_unregister(&da850_evm_tl_leds_device);2 i: r6 _- k J1 X, x
! o& Y0 m0 A% ^) w
printk(KERN_INFO "LED unregister!\n");! E" K e. R4 A" F: I ~
}
- i4 y' t" c+ ]/ D) e( T3 p- `3 j. o* h0 q- P% |4 d/ T9 D
module_init(led_platform_init);
, F* w3 p6 G; l9 r! tmodule_exit(led_platform_exit);! `" ^6 T0 q: n! S7 B" g
! `8 T) J/ e b7 ]$ u& k
MODULE_DESCRIPTION("Led platform driver");9 |+ b* `9 X6 y7 X$ t" W$ ?
MODULE_AUTHOR("Tronlong");" @ ^- @4 ~# J' R0 k
MODULE_LICENSE("GPL");
% n I3 B6 i q$ [0 S* P! B
! {% i7 [1 t2 d& y! g& u* X$ s |
|