|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
) D! N4 r0 N# o9 L% j4 n#include <linux/init.h>
8 N" _- J) n9 `' r( L- A7 i* X( }#include <linux/module.h>
9 m% T( y2 x! S' S#include <linux/kernel.h> t) K2 s, B( \" [% j
#include <linux/types.h>; U/ ~! @7 E; _: x6 G
#include <linux/gpio.h>
/ f2 z4 O1 E' c6 Y+ o3 F- s a- _#include <linux/leds.h>
5 e( x4 U, O5 k8 C( u. V; s! I4 s#include <linux/platform_device.h>3 G% e6 ^$ _% z: A
1 E/ Z8 y' _! T#include <asm/mach-types.h>3 \! M# ]# @/ x( Q
#include <asm/mach/arch.h>$ K. I, S/ H. m6 x
#include <mach/da8xx.h>
7 P* Q* ]$ A3 P& \#include <mach/mux.h>
6 ]) P9 E3 P9 Z
( ?9 _1 v3 M. _' X4 Y) E( B, J3 b#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% S& Y% g: i" S. W- ^#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 E0 K/ b- o" }# [8 X) C
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); {8 X& @! {. c
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, m& y* T; M2 v- Y" i* N9 V, s& V, P: f( _7 R" A% I
/* assign the tl som board LED-GPIOs*/& u% Y4 w" ] q2 P4 }" W6 G7 ?4 Y
static const short da850_evm_tl_user_led_pins[] = {
3 n" k* I2 n" o8 u' N5 n3 m; j /* These pins are definition at <mach/mux.h> file */
9 }0 R9 J+ v2 N. G8 O+ L$ u7 O DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) P/ K# }6 D. E$ d" F% E
-1
) p9 f& J' Q: h- K};4 w" E- [' ^( T! M
4 r1 A: @6 M0 ?2 e- L0 O8 O7 l
static struct gpio_led da850_evm_tl_leds[] = {
* C" \/ C: Y8 Q; h {
9 B% L- h8 q5 y4 b+ N .active_low = 0,$ G/ j4 Q- V. r/ X
.gpio = DA850_USER_LED0,1 l& g' \0 W9 Z! G
.name = "user_led0",
) \! e8 \5 M0 _2 O .default_trigger = "default-on",
( A. E+ i- i! G* Q. j+ [ },8 ~: r# L! N0 Z' q# y* X, I9 }
{. C: \; t. [4 l, e. h
.active_low = 0,$ k& |2 q. B8 B3 f2 J) N
.gpio = DA850_USER_LED1,
2 B* J' k1 }1 l- y2 f9 P: A .name = "user_led1",
) F1 a4 R* T+ t. a& ^6 o& N .default_trigger = "default-on",/ Q* Q" S0 O) y' p4 }* Z b
},
/ Z* `- y$ b% J3 r% p {
, n# B" u: c8 y7 | .active_low = 0,
! V F3 e3 N% W. D .gpio = DA850_USER_LED2,
4 d& |* |# `* h. f' D- C# W+ B" M .name = "user_led2",2 q2 l$ Z. _0 s9 h# Z) e3 {1 `2 x
.default_trigger = "default-on",4 O+ B. \( X* w; s" O8 e% q
},
1 Y8 B* e( e; V9 @. v7 y {
/ a; h+ b2 j4 Z3 t% Y/ P/ x .active_low = 0,
3 `8 m- e$ Z5 O n% ^# `' q$ C .gpio = DA850_USER_LED3,
' \, H- N" u/ r* m( }8 E .name = "user_led3",
8 I M/ h4 ?' z6 U, j .default_trigger = "default-on",
6 @: V2 u# P. b' e },
7 g" c* O( B$ V2 B" K" s. Y6 [* w};
( b2 f/ h H1 F8 W$ u
) G' J: r( ^$ y1 `6 M9 x6 Bstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
0 D. y _$ U* Y4 C: } .leds = da850_evm_tl_leds,4 ]# [% W9 C$ ^) |
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
( J4 E6 r3 t" q( b};
1 _( m2 `2 G. w! ]3 d. f8 u5 c0 `3 g0 ~! m5 d6 s
static void led_dev_release(struct device *dev)
# \. D) E4 e9 o: J{# \7 i" O. ]1 }& [) B% {' Q
};
: `4 D6 k" k: _9 o5 o8 k3 @ z0 W3 @
* Q& @ o5 ]8 q" F1 O) Z& X4 cstatic struct platform_device da850_evm_tl_leds_device = {/ A/ o* E# W$ G8 V, z2 z: t
.name = "leds-gpio",
- |0 `! ?- e' y( H8 D .id = 1,
8 ? C' X h# }/ D7 z @ .dev = {# d9 K1 ?$ p5 `3 D6 g2 |6 y. q
.platform_data = &da850_evm_tl_leds_pdata, T! `/ X. s1 G
.release = led_dev_release,9 i" G7 E4 n: q5 s
}0 m+ U8 w9 a: D* I* i9 i! w
};
* k) Y7 Z5 Y3 Q
# L1 ~- i. M' K4 A" d# Ostatic int __init led_platform_init(void)
' \6 E6 P/ P4 X# N4 T4 V+ n; k{" A' g; V* {: y0 S; w' u* y% E
int ret;
% [1 P% r& t5 S: `# l#if 0
8 ?' D5 e8 i3 r/ _% n& L ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
& @6 w+ M4 Y0 p+ A( L3 x7 o if (ret)
M) t! P& e( z4 K. m pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 I" S. b% w7 w0 I3 U "%d\n", ret);
, k) D4 W& W1 }' z- q#endif
" v: m0 E2 [* o6 @ ret = platform_device_register(&da850_evm_tl_leds_device);. D4 F! W6 Q T% ^) [& @
if (ret)2 r$ i, Q) C2 I$ Q7 K
pr_warning("Could not register som GPIO expander LEDS");
/ Q& f5 {0 J0 H+ W+ R else, F, d- k7 N m4 o: c, W! ^
printk(KERN_INFO "LED register sucessful!\n");+ |3 v' p9 Z2 D7 ~& @7 @
- V4 [7 m; |$ f* m6 m return ret;+ |7 H0 K& T7 a4 z& {) |
}
b; h$ S! ]: b
/ T$ ]- ~2 ~/ p/ estatic void __exit led_platform_exit(void)
4 @' C9 I) _9 U$ |2 ^{
0 ]: p5 O0 K( }2 U platform_device_unregister(&da850_evm_tl_leds_device);
+ d/ V7 Y$ {8 U/ p! q0 f- B4 h( ^6 o: d& O5 D) V- C% J+ _
printk(KERN_INFO "LED unregister!\n");7 v/ r. S3 v* R) k
}1 Q1 _$ n7 t |1 k L/ D, x
' {( T8 h( x: K+ nmodule_init(led_platform_init);$ I. J7 a; z/ k- m. h
module_exit(led_platform_exit);
. r' U0 E; r; j6 B& i( A$ C) r) H$ T; l
MODULE_DESCRIPTION("Led platform driver");8 {9 s3 G6 {! N3 \) h" j: U- m
MODULE_AUTHOR("Tronlong");9 F+ G" w9 a+ Y. o& r/ b8 u' {
MODULE_LICENSE("GPL");
% |6 M. c' e( N
' w, X' V4 `) b* \# Y, w. _! w |
|