|
|
求大神给下面的程序做注解,请稍详细些,谢谢。- p9 [5 g0 c U+ u3 b8 q5 C; {8 n/ l
#include <linux/init.h>1 @& P, e! b4 c7 l u6 ?
#include <linux/module.h>
, A' q6 |. |( W6 Q; T4 j5 ~#include <linux/kernel.h>+ r( m$ W1 e: e
#include <linux/types.h>6 a5 |3 Y+ g# y2 P( ?0 }4 n
#include <linux/gpio.h>
) c8 @, T% j/ ~#include <linux/leds.h>
1 |4 |: Y: ], |9 d' a#include <linux/platform_device.h> S. N& l+ P8 {9 ]0 K
, b5 n5 h# [$ Z
#include <asm/mach-types.h>
; C, k' R1 W$ U8 V#include <asm/mach/arch.h>4 t! j% h0 m. U7 C7 T' f
#include <mach/da8xx.h>
$ w+ J) Z+ Z& M F1 F9 Q#include <mach/mux.h>' P/ k( p3 g" i Y- F) T% q6 o( C
4 o* U4 {, S' ~5 n- Y2 D+ R#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ g2 t! Q. y5 I#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 c2 C) F- G9 k4 U; C0 `! v- [4 O
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)7 ~* X1 V& P. n7 P" H& ]; L
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 g$ k5 X, X; e- n9 C% \
" B, [* F4 \' e. R/ _7 I! s/* assign the tl som board LED-GPIOs*/
& L) b, o2 X$ ?5 l/ _static const short da850_evm_tl_user_led_pins[] = {" l# b+ l( Z0 G( m5 A
/* These pins are definition at <mach/mux.h> file */3 l5 |9 t; Y# _7 ]
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," m$ S6 Y: s3 I" s+ T% e' y: N% `
-1$ v# G- h3 G- G! q! b( F: `
};: s& G$ w/ n7 \# h( X! \. V6 W) H
$ f+ B# x6 e9 ]; {) D/ istatic struct gpio_led da850_evm_tl_leds[] = {
/ R3 Y5 h3 n Y+ O$ Y2 E: [) w {
$ w; y9 @. f/ C: E, \% n2 A q, \ .active_low = 0,
/ n G, f9 N& g4 B! ]5 C- k4 [ .gpio = DA850_USER_LED0,1 M) G9 A/ Y% r! X. X
.name = "user_led0",
5 G& [, C) \/ h7 Y .default_trigger = "default-on",5 ]" o; B, e4 C& N1 x/ d
},& n+ A6 d; v. p, A
{; C1 U" S5 v+ P8 i' l/ F8 r
.active_low = 0,
; ?) ^# H2 r z .gpio = DA850_USER_LED1,
8 p% ^) |5 i6 s7 S; { .name = "user_led1",
6 U. q! g# Q. N8 g .default_trigger = "default-on",
) F) Y/ @5 E: Z* g' Z4 _8 Y },! n; r$ U1 S( N! G9 T6 _
{: G: v' ^0 V! `0 h" U! H- ?7 |
.active_low = 0,; k- v3 k: i3 {
.gpio = DA850_USER_LED2,
, U# D- k/ X* T .name = "user_led2",
# Q8 g: _, n( Z% I% g. ` .default_trigger = "default-on",
! \! \2 |* V- }/ }& a% g+ M. X7 r },
- s0 i: d Q5 m0 {/ x. @7 i {+ S K @3 b1 g* T5 Y; B
.active_low = 0,5 @/ k9 z% d3 q/ X8 n
.gpio = DA850_USER_LED3,
5 M3 T* o# A8 n* K1 y! J, l .name = "user_led3",
4 T+ j' B6 Y7 Y .default_trigger = "default-on",2 E$ f( \: A) \9 j* a
},
' e9 q; {% t8 P, ^9 E};
: K |2 e: T8 [8 F# q( G3 g+ E7 s
( M) i# K. r6 f5 A1 z) m6 Fstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( d; [7 \# ]/ ]: C8 W .leds = da850_evm_tl_leds,
0 ]2 u/ W. d y" r, e& j .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
2 D* `2 [2 W2 b! x1 U% Z};. @. W1 U! }0 W5 M k
* c- {" s$ n: @static void led_dev_release(struct device *dev)9 z4 ~4 \6 H& {& L6 o, j3 a
{
9 K7 G5 I# V" c: S. D. b};
3 F0 Z2 l* h7 u* w
+ v5 `; [- T) w' wstatic struct platform_device da850_evm_tl_leds_device = {) b" x# o1 g! L8 c
.name = "leds-gpio",. j# ~( r, Q, I0 c
.id = 1,
- v' I3 M) s) G8 ~# V' a .dev = {7 P4 s2 F9 A4 a- t- N0 L8 \" i& g
.platform_data = &da850_evm_tl_leds_pdata,
]- ]+ u& a+ R, T .release = led_dev_release,! S# Q9 K7 `/ z9 k2 h/ a* a5 y2 l) U
}
! [" t6 L, m0 g" x' U5 P};
# J S/ K) u8 T! B3 _( j+ Q* U- h7 j
, P2 ?& k$ j) r$ b% Pstatic int __init led_platform_init(void)
0 P! h5 n' j6 P, N- u{5 q! r; ~: R l; N. s- e
int ret;
; Q+ A' N! E$ ?2 j$ R9 e#if 0* J8 N5 U6 l0 ^4 Q, T6 b
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; p. S4 e8 v3 Z$ z1 h if (ret)
+ R0 G' R4 H& V" O( v8 e pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' d+ q5 U+ n6 G7 `5 O$ ^ "%d\n", ret);
1 D1 @* O+ }8 M% p/ g* i#endif
) k/ G% y; O" K& L2 C' [, x ret = platform_device_register(&da850_evm_tl_leds_device);4 m$ K' p! J% Y& p/ O
if (ret)/ n3 u! j# }. Y% ^ L5 W# J
pr_warning("Could not register som GPIO expander LEDS");
2 t) x, D5 Y4 E( g" Q9 X else
6 r# u/ i, [7 n, d printk(KERN_INFO "LED register sucessful!\n");0 j7 r5 D' j1 U. u8 w
$ q- Y' I4 J/ C6 \ return ret;& {1 X7 [. U: R3 G, l( g
}
5 U# V& x, a! d0 l* M, |: r# I* H2 @- w- R5 W7 d4 A
static void __exit led_platform_exit(void)
p, ~; _$ G1 d{& R7 \0 Y# x! L+ A4 M8 j
platform_device_unregister(&da850_evm_tl_leds_device);
' r1 F8 v% i+ C; \) I
7 L, ]1 S" e+ a printk(KERN_INFO "LED unregister!\n");9 N, o2 o7 o$ F T0 E$ q+ i
}; F7 [0 ~" S3 u( {5 s+ g
. z: l+ Y, c4 N$ }# {9 g3 |module_init(led_platform_init);4 T5 e5 ]9 P# A
module_exit(led_platform_exit);
3 D+ R- r' Q5 k" d# c$ @1 }6 v+ l, `0 F, U5 Z/ f3 i
MODULE_DESCRIPTION("Led platform driver");$ `. | {4 B7 ]0 a0 M+ \7 l
MODULE_AUTHOR("Tronlong");
5 y; X5 c' d* s) r, H8 TMODULE_LICENSE("GPL");
; n( I/ \* N. V. l9 O' g$ Q! p( }, L2 v
|
|