|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 h9 w" ~. P& a#include <linux/init.h>5 J' W- E' F) G3 I7 _
#include <linux/module.h># _& G; e& D6 M3 T4 j, @8 S0 D
#include <linux/kernel.h>
( M. a" B5 B& c#include <linux/types.h>. B: {6 M# N! k- d8 X" z
#include <linux/gpio.h>
# _. M1 x% E! U( d* G% K. o#include <linux/leds.h># W E4 }1 M* g- ]) o. S
#include <linux/platform_device.h>. K7 A) X$ r( X! _$ x3 ]
0 K/ j* J2 n5 D. ^
#include <asm/mach-types.h>
7 \" {2 Q6 q* D$ [. a#include <asm/mach/arch.h>
8 a" s; o* f% V, O4 N7 K#include <mach/da8xx.h># v1 l7 v4 N+ L, E, b( v
#include <mach/mux.h>
5 y n- B( z2 [0 y5 K: w
; G" R! b: h1 w0 A#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- ~/ |( S) F$ L
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
& {. w6 ~$ E/ u- F" X#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)6 C& E4 C' f- F5 V
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 ]' A$ T1 T, }6 O- }
3 y( }% h) T( _0 i6 Z! n$ W% S
/* assign the tl som board LED-GPIOs*/) q9 H( K; P: P) L
static const short da850_evm_tl_user_led_pins[] = {% l" T! F! X; n# H) M
/* These pins are definition at <mach/mux.h> file */
% {& `' A6 }8 { o* z DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) f: |- I& g# X7 d0 {# j
-1/ q" Z" j8 O0 ~1 R4 _& z" O+ ^
};' X- ?% X; Y3 d/ [
6 x8 X \; O/ n/ o8 z7 @
static struct gpio_led da850_evm_tl_leds[] = {* k" ~$ i8 _# K
{
5 j! @( s1 s, J0 ] .active_low = 0,
* t7 L' Y) n9 c. G6 C- r' L- q$ D8 w .gpio = DA850_USER_LED0,
0 ?& v1 {0 w. Z- A" I .name = "user_led0",
# v! z. m9 C% R2 |+ o .default_trigger = "default-on",
5 l* |! E, j y5 i, z },
X9 u% h1 x$ C# z B2 M {. a4 i8 W" \# v6 C8 h9 ]
.active_low = 0,
) E4 Y- j/ _" A6 f9 M* c .gpio = DA850_USER_LED1,& ~' s8 }# Q! p
.name = "user_led1",; ~9 c4 }0 s$ q( E4 ]; Z
.default_trigger = "default-on",
3 |' ]- R" g( T },
& {- n) Q- X, N {
9 s( Z- v8 g2 H/ P0 m .active_low = 0,9 a/ a8 M7 z9 m7 C4 c4 p0 R4 S
.gpio = DA850_USER_LED2,0 i7 b/ ^, Q; a) H
.name = "user_led2",
" | _1 _" B$ v1 m .default_trigger = "default-on",
& y \) }9 j* `* l },
8 f; i" W# r* p! p* w& c- v! H# K {
# U& P, t7 g1 h c& [! @# n .active_low = 0,* `1 b. i% X; A3 o
.gpio = DA850_USER_LED3,8 v9 j- K. l/ x9 I/ N
.name = "user_led3",2 w2 l4 g0 l$ b/ a2 N
.default_trigger = "default-on",
' m) X; {' E4 H* D5 j },
! \9 J$ q* {% e3 k' g/ }};
/ I4 |' ]9 {' S4 N
, G q. b9 c# r/ V6 Ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 Z3 S- L9 Z6 z5 K$ [' U9 w" P .leds = da850_evm_tl_leds,* D" e3 B, V( u$ Z V
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),( S0 Z5 e; G; i
};0 P. [5 J( P- \$ a5 N
* j# y8 L" P0 \) `
static void led_dev_release(struct device *dev)' D6 s, V% l9 [1 V& f. P& X: a
{# H j/ c& q, A) [( K
};) J& M5 g; f( r: ]& N
9 C7 i! J1 D# i: W& k
static struct platform_device da850_evm_tl_leds_device = {
# T Q. w7 j* {, U .name = "leds-gpio",% n6 O7 f+ ^& O5 q+ [3 M7 J
.id = 1,
1 C1 R! C& n$ I- y# _7 m .dev = {" d3 ? j8 ?( u; ^* u$ `7 a8 G
.platform_data = &da850_evm_tl_leds_pdata,
& X5 r1 y% U5 v$ h .release = led_dev_release,1 g7 S3 T7 h% I
}
' o+ L1 s- z! g# Z) \};
1 {/ ]$ {% e6 R4 f+ w6 s3 o/ F
* |( ?. h j3 g3 q. I! dstatic int __init led_platform_init(void)* w/ Z, f2 L8 i Z/ N/ Z
{+ j9 l* }$ A b. t' w
int ret;. a- {) m3 ~: m) \
#if 06 m( Y. u; X6 N4 J+ s" d0 o6 z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) h8 R# G* I! } if (ret)
F& Q$ L# m, y; a* x0 \ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ e& |' r- Q9 f! W/ J; X "%d\n", ret);
. @* i6 q4 z( E4 K4 c7 G#endif
% z. J, o8 o a: ]* g z ret = platform_device_register(&da850_evm_tl_leds_device);: x( B2 \) C3 i" ^
if (ret)' B+ ~3 D7 X7 R1 ~$ z( v: d
pr_warning("Could not register som GPIO expander LEDS");/ Q5 Z+ L; O" y
else7 X, }( C. X- ]. C
printk(KERN_INFO "LED register sucessful!\n");
. g1 m: k8 M+ R, E
. l$ ~+ A [* ^ return ret;
6 t: g1 x- j F( ?}- n5 z$ K5 z) }. \" M: P5 p
4 O2 {( R, y( q$ T
static void __exit led_platform_exit(void); q9 C& M. M1 l* X' S
{1 V8 T; q" f* p5 u/ u1 V
platform_device_unregister(&da850_evm_tl_leds_device);0 ^6 z! N5 H6 p) O. g4 }# u
7 v, m4 {; w+ ]& {* }9 _, u printk(KERN_INFO "LED unregister!\n");
z5 q# i9 m9 X}9 a+ ^7 w3 o6 H( e' g
7 N- z V+ N: w+ ] I" W
module_init(led_platform_init);$ u" B5 K7 {: b1 o2 c. ?+ w
module_exit(led_platform_exit);
) h+ [& @4 K# t
$ ] A' u2 O6 ]9 XMODULE_DESCRIPTION("Led platform driver");
3 G- I2 j# U3 aMODULE_AUTHOR("Tronlong");: A' A+ k/ x- W& {6 {
MODULE_LICENSE("GPL");
# x+ c4 e: ^$ a& y. m; W7 x3 ?
# V* b5 B) L/ Q. D0 E2 ` |
|