|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 h, q$ s: g2 Q, I k; l#include <linux/init.h>
" P6 P) t7 N' v0 |#include <linux/module.h>
! M" n6 {; K, M* G( {& r7 I% X( P: x#include <linux/kernel.h>2 e: x7 f/ X F
#include <linux/types.h>
X7 A% L% `3 n! x5 A( ~0 @; p% s#include <linux/gpio.h>
0 t& a1 A, w9 b8 g8 S. p4 b) b#include <linux/leds.h>
! X$ R' A; R0 A- s#include <linux/platform_device.h>6 D7 i- g& R, n* P7 P
9 |4 S0 n* C1 H0 X! |: T: V: Y#include <asm/mach-types.h>+ X6 L) w m4 M
#include <asm/mach/arch.h>
! I/ R( K' q5 Q: ]#include <mach/da8xx.h>, K5 Y) X% j9 b, z
#include <mach/mux.h>
! n8 W( x* b8 c( J! U, x; d. y2 i- h! v4 N( ]( r# T
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) a* Y3 s9 S; E [#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# b: J+ Y1 U [. R9 q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% m0 M" }7 a1 R! r% S/ ^
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2), o* Y$ o( L" w# G& b
# T* K- p0 g4 e0 W8 G/* assign the tl som board LED-GPIOs*/* r1 U. Q W0 S8 I( \% `% O
static const short da850_evm_tl_user_led_pins[] = {
& S4 J5 h$ x# l" j( ~. } /* These pins are definition at <mach/mux.h> file */
. T7 ]1 [7 H6 r0 p' Y* h DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,) K' G }( h U; P* a, q. L
-1
! L$ F* Y5 q; D& V7 _$ U};- c! `' s- g. Z+ g. X" J
+ F0 D0 k, ]' m' ?% d4 e; {2 k
static struct gpio_led da850_evm_tl_leds[] = {
9 H t, r+ W4 G& {% m {& ? Y) _6 G- z7 S
.active_low = 0,) n8 r; w. m% U# r; \$ {, C L; d3 G( ?
.gpio = DA850_USER_LED0,
0 {! y" h3 Y* K" ^, z. r; [ .name = "user_led0",
6 }: `" F1 }' F .default_trigger = "default-on",
$ N! U9 e2 K u. N; K" N6 s },* X3 }6 y j; E* `5 L
{. S7 @0 l" W& g2 k" S# }- Q* d4 E
.active_low = 0,4 G. h& X3 e5 Q0 z
.gpio = DA850_USER_LED1,
# E( z0 x9 p3 V6 D# D* E .name = "user_led1",
! O5 l N8 U+ a) t .default_trigger = "default-on",
* ~/ O, T0 L. W H },- U' i O! ?% X+ L7 h6 B
{! G0 J5 Y& B6 b+ D1 J% i& p
.active_low = 0,
- I \! v o7 J .gpio = DA850_USER_LED2,
. m1 h! y8 k+ Z' y8 o% v/ a3 | .name = "user_led2",
2 U1 g3 `2 S) B8 u .default_trigger = "default-on",
, u+ ]1 @7 S# Z% I2 @3 a1 k },- U: ]8 r7 }# H P2 b$ [
{
$ \' Y8 ~4 ~* R$ N .active_low = 0,
k0 r! `3 D( Q3 X2 q- h0 S .gpio = DA850_USER_LED3,
* L. R ]+ T6 x9 Z, ~, ?' x* X .name = "user_led3", b/ y8 I& {! V5 l0 i2 h6 T
.default_trigger = "default-on",+ E" S8 m" v6 L: P
},
* S6 B% z0 g/ Z) ?1 o6 l/ f4 Y};
% l! k1 z: u/ V" P% R2 g& I# O t/ K* x% S" b+ O- H$ [; C
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- j+ |. [* x3 c% g" X2 \1 ~' q .leds = da850_evm_tl_leds,
8 B0 ]3 d/ b' w" d! i2 Y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),! s+ @* M9 X$ x' I
};
" L; V1 t. \/ C2 X! k' T* N- h/ o! p" ]( Z" y
static void led_dev_release(struct device *dev)
, Y# e6 G( D9 S/ x{* \ ?. i( c8 m' I6 E2 Z
};
) f0 ]$ K: V" w7 X% c6 F
( D! G/ q$ h: x8 O0 zstatic struct platform_device da850_evm_tl_leds_device = {1 a3 M) } C/ p' q6 [
.name = "leds-gpio",
/ ?3 | _: F% s$ n9 }. E .id = 1,
5 \8 C7 _" _0 h9 q .dev = {" Q4 B* }6 `- j- \, }" _
.platform_data = &da850_evm_tl_leds_pdata,4 E( k( r8 ~0 k Z0 b
.release = led_dev_release,
% _- s$ e4 T u$ c+ T$ Y s }+ x* D. o8 A1 d% k: b5 D9 x
};
9 Y8 T5 |% b+ M6 F2 n( W3 G4 }& }- p1 J& U( h: F
static int __init led_platform_init(void)! s1 h* H+ l, Y, {$ V* }4 J
{6 O0 _4 I* j8 m$ K
int ret;
4 [' G8 r7 a& s#if 0" f8 g7 Z3 n% A$ S0 ]8 U
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);: W$ F0 c; \2 G6 U& k2 J
if (ret)2 C4 ~7 `* P4 H9 W
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 g! x4 @: Q" }9 f
"%d\n", ret);/ u/ C+ G" n: B5 C% n% N
#endif
# ]& g2 B+ e( ?5 j5 ~ d ret = platform_device_register(&da850_evm_tl_leds_device);
2 J3 c% P% h5 ~8 u& H4 ` if (ret)3 D# H) y( A% K
pr_warning("Could not register som GPIO expander LEDS");3 G$ p5 c& l1 a7 G" z
else/ C# P. L4 ]3 F5 f
printk(KERN_INFO "LED register sucessful!\n");
! }! a2 t v- h, J. Q5 v+ c* J# \7 D. j( Z5 s9 `
return ret;
5 u8 t# r2 ^; b" R. d* ?9 z}/ r, ^ d; A- w e5 B8 d
! i6 j+ z& Y9 g" Jstatic void __exit led_platform_exit(void)
' {$ V# W9 ^( x z{7 I* _8 |1 q* \% L
platform_device_unregister(&da850_evm_tl_leds_device);. r2 Q- v' ^1 m- X% U) w+ x
) |" Z6 F" K& y& T! z5 Z
printk(KERN_INFO "LED unregister!\n");! Z5 G3 \0 I2 a! V
}
- `2 U* A2 A+ ~ m" N" o G9 C% l' L
module_init(led_platform_init);
, [- Q) ^* p+ Z- m: q( v4 n7 T% Qmodule_exit(led_platform_exit);
+ g A4 h# `! a* X9 U# t7 w( N# |2 i" T
MODULE_DESCRIPTION("Led platform driver");
: o7 {4 n* E& |5 Z/ r, ^6 Q5 NMODULE_AUTHOR("Tronlong");4 p8 C6 b0 S8 }7 d
MODULE_LICENSE("GPL");
: Z) E$ @ O5 c, s- f U
2 S# B, t9 g ]7 N: y$ P |
|