|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& Q# N2 e D4 O: x% r! q' m
#include <linux/init.h>. t1 S, M7 f- \ d
#include <linux/module.h>4 `! ^0 P( ^2 ~( O# o) P5 ?) P& K
#include <linux/kernel.h>
6 c0 k1 L% ~; J1 i! a+ |#include <linux/types.h>/ P: s6 X6 i9 ^1 t
#include <linux/gpio.h> I- n, l# [6 U4 `& [8 E
#include <linux/leds.h>
5 G: T! g# Z I: j! O. I#include <linux/platform_device.h>
" P4 G& `( N% |/ @% |. ]1 _8 Y/ d& `4 d- P6 i7 G& w1 ?1 [& C! i
#include <asm/mach-types.h>
6 C8 x6 R* s. C, W9 f3 g#include <asm/mach/arch.h>' R0 m" ~, D0 \$ g9 X; g
#include <mach/da8xx.h>
% t6 H+ f3 S/ s$ i7 S4 U#include <mach/mux.h>
6 ]( j) p. l- d- b, l' H9 Z' u; g+ v- g, L
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 y) Z, O/ S7 i+ S% g
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)' [+ ^0 H9 c; |. Q
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
/ r. d8 F% B* [ D# O#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 ?5 u+ b0 F7 _5 d
# f+ B( u9 N' [3 L/* assign the tl som board LED-GPIOs*/
9 l& J, x% Y, o Estatic const short da850_evm_tl_user_led_pins[] = {
5 m% H3 u4 U# B- T, ^8 o( | /* These pins are definition at <mach/mux.h> file */
; S3 J# `2 j r DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: i0 ?2 r) [ b2 Q& B
-1
7 m% v. c& p0 M. x};
1 a k5 o! S* C2 u% K
8 o1 Z7 Y5 f7 L5 I: Xstatic struct gpio_led da850_evm_tl_leds[] = {0 c! I3 k* B/ C! I, H
{, F7 K1 j& ^' a) c- Z7 r
.active_low = 0,
$ I6 R; y, J( } g8 y' f! V .gpio = DA850_USER_LED0,
) a8 j6 T) o1 V/ }9 u( X( Y .name = "user_led0", {! {3 N3 Q4 X$ a, C; ~1 H' l
.default_trigger = "default-on",; h) b! ]9 M( Z- S
},
8 M a0 p& E0 g {
+ p0 U( V0 l* {6 e4 l .active_low = 0,$ W W; J6 J# [/ J
.gpio = DA850_USER_LED1,- B) P0 E+ _$ ?! E9 H+ Q
.name = "user_led1",
/ e1 \) L4 c. n2 [ .default_trigger = "default-on",: }% P' I) c$ C2 c2 ?9 i
},$ t" m$ K8 c% J, ^) U Y; Q
{$ v/ e" s: e0 f! p
.active_low = 0,
3 n) [4 f1 D m+ C9 T .gpio = DA850_USER_LED2,
( T' C) O7 a, d4 K) y3 K0 o .name = "user_led2",
9 j" y! {# Q$ {* @1 K4 ] .default_trigger = "default-on",
% g" c: w, ]/ T. e },4 G7 u3 o# c) A
{
2 t3 D/ {- w' G' j3 [& x .active_low = 0,
, `; k+ A/ c `# B y' q5 B0 P .gpio = DA850_USER_LED3,
% s' U( P. {' {0 v3 @8 o' O& S* ] .name = "user_led3",
8 u* {, I: Z# ?7 t/ K' w5 M. i5 u4 z .default_trigger = "default-on",# u! e) R, x3 |9 |
},. u0 R- I$ T0 n8 q8 H; F
};" ~/ `8 j2 l& g% z
$ B, s! X' I) B
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 \- i$ i! S" v( |; L9 ?
.leds = da850_evm_tl_leds,& e. F/ @* i4 R4 _% H' ~, U6 g' P, U
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; z; M6 X8 E" j# J. R* Q. b: P$ f};* h3 a% s/ P* [/ c3 p( }
% A2 e$ {. d) n, r. f
static void led_dev_release(struct device *dev): }# L) [3 h; ?
{
" m+ P2 N$ v8 g. P; v9 }};
# k. A/ ]% X0 M$ z4 Q2 y) m. p- Q
0 Z0 h7 w- w' ]$ A4 k* Z4 }static struct platform_device da850_evm_tl_leds_device = {
3 \& @, i$ V5 `! q- T' [" I& Y .name = "leds-gpio",$ [& N% e$ ^/ v- j8 p5 b' Y/ A
.id = 1,
% c2 J" p2 A5 v .dev = {* d, t8 G, d1 |+ z0 {
.platform_data = &da850_evm_tl_leds_pdata,
2 r. Q6 y9 {* u .release = led_dev_release,
8 O% M! c H2 [7 r# r }) X8 _6 z. |7 n9 u+ [
};
, {& c0 ?. K8 X; ?+ J
7 C! E7 g+ R# a) u6 E/ Zstatic int __init led_platform_init(void)$ h! E5 A1 k" b& E
{
8 E) o% R; j$ p# k% O1 ^5 h2 T int ret;
5 \# J/ |1 b6 l# F# Y& W: }" b#if 08 H- S, p' Y+ L, P' T
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% z. V' D U& p0 Y& E! A5 q. N4 Z1 ~0 G5 N
if (ret)8 r8 F% p4 [6 X) L/ H. h1 h @
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"6 B: x& K6 P) ~( Y) l
"%d\n", ret);" ~1 i/ O# k9 t+ z3 K
#endif. c) {* D4 n1 p* P9 T5 O k
ret = platform_device_register(&da850_evm_tl_leds_device);& s9 s) F; i6 j$ J: u
if (ret)" {4 X* ?4 U1 D
pr_warning("Could not register som GPIO expander LEDS");1 u. D8 }; D6 \- S* S6 o8 z8 |
else4 K2 w- n! v' q% f: m
printk(KERN_INFO "LED register sucessful!\n");
! [. C+ r' ?! p0 v+ k" i Q3 ?. t I' ~ H
return ret;' s3 C' ~3 _# i2 O) O \
}
) c% e1 k; ^! r0 P1 I' a f y- d
0 x5 W& O' q/ G8 \7 Jstatic void __exit led_platform_exit(void)2 F3 E2 u! V/ |8 a! L
{: ^* j7 U" w) ?1 d8 w, {2 {
platform_device_unregister(&da850_evm_tl_leds_device);
, P o( _7 m3 a7 J7 a
! c8 G7 z4 V, D printk(KERN_INFO "LED unregister!\n");
5 u5 M1 M. c2 r}
" m' `& l/ p9 r* ?; G8 w4 _$ ?& h0 X) [' i+ k- @- S+ D) D l
module_init(led_platform_init);
6 e9 K) s" l. w1 [, Xmodule_exit(led_platform_exit);
Y6 z7 E* O* ?( O( ?2 c! ~# B- U
/ _. ?0 ?& l$ e* q1 i9 y' P. OMODULE_DESCRIPTION("Led platform driver");5 j2 K* g8 S" F+ Y4 e/ u
MODULE_AUTHOR("Tronlong");
( P3 m. K1 |: w' o% sMODULE_LICENSE("GPL");
: V$ E3 u8 C* C( u7 [7 x( o
A# n+ a! z9 R5 U+ @) [ |
|