|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 v C* |; G7 h+ \* [
#include <linux/init.h>- d7 v! A/ y4 y" S" L! @9 k
#include <linux/module.h>- i( Z/ `) s9 h2 u. e
#include <linux/kernel.h>
3 G8 b" X6 Q, [#include <linux/types.h>0 m, [2 a; \# o, ~
#include <linux/gpio.h>
& _9 m% U# |3 _1 d4 `' c' f9 k#include <linux/leds.h>
m+ V" m! Y9 a$ Z- Y' J#include <linux/platform_device.h>
4 b0 y/ y6 z# g9 l0 @5 `$ Y7 W+ K* U( F5 w# S
#include <asm/mach-types.h>
$ l: {+ g- n( i4 U) V: l, t#include <asm/mach/arch.h>
% h# C% w; s$ _7 I( ~#include <mach/da8xx.h>
) V# V: Y8 G3 G+ m8 u; ], a! x4 Z#include <mach/mux.h>
2 q. J6 M9 |& \+ A+ G$ j+ q- n; n# l/ ^
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 H$ Z4 w$ R; `" `8 O
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ A7 Z5 d- r; d1 f/ o% s#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% j' v* g: H! m( q7 H
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) ~8 U% ]4 {1 h* `9 w }, W( q
/ a% ~/ q) t1 B& H* k% _5 ]9 p: J$ ~! z/* assign the tl som board LED-GPIOs*/- q8 p5 l, w0 K4 M9 N
static const short da850_evm_tl_user_led_pins[] = {
3 j) r. m9 k! @7 O1 a& z /* These pins are definition at <mach/mux.h> file */6 a2 J6 J) O$ A, L
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" B ^! ^& u0 L% q& A* ~: R -11 U9 ~# C% H$ d/ m) f2 S
};$ P% q" a9 X% J( d3 t
8 ~7 k+ @6 w4 c9 Z& b2 S
static struct gpio_led da850_evm_tl_leds[] = {2 N3 d$ W+ t1 p! ~
{0 ^$ E; E* `* k: s0 X# a$ w
.active_low = 0,
( C' J/ t8 U; b! { .gpio = DA850_USER_LED0,
0 H j$ v# ?; f; n, I/ \# K .name = "user_led0",
! y$ A9 h9 `7 y0 R .default_trigger = "default-on",, A. C9 i$ d) `; \3 B
},$ A' Z: A6 u5 Y5 G' c
{& S" B! y! k0 f
.active_low = 0,9 J! f2 L9 G$ t7 U
.gpio = DA850_USER_LED1,: Z. \0 U) O% B: V: c& [& Q
.name = "user_led1",
5 Z- u9 R7 X; m* u9 T .default_trigger = "default-on",4 `. Z! f* ~: `# o) R
},
) k% ]. R0 X9 Q {$ {2 H; H* N1 S! D) b
.active_low = 0,
1 t% N% D; p) h; O .gpio = DA850_USER_LED2,3 ?# X P7 _# L" d) ~- [
.name = "user_led2",
, r( F p' l* c6 l$ P! y5 p% f3 k* v& s .default_trigger = "default-on",
% B/ N5 r. _1 P+ }+ h },& A" J& `) K8 c) z) X+ z6 B
{; B3 v: S+ ^- d; c
.active_low = 0,% `( H+ E/ Q0 m
.gpio = DA850_USER_LED3,
* N* i; I; W; F+ ?1 @ .name = "user_led3",
- n; k. |; q& U; B; w8 b .default_trigger = "default-on",
2 j; w/ k7 a1 ~5 S0 g! w- ?; c },& r9 y _ `2 O2 f; j
};! h" r8 h; q1 B# o, k* v
( E0 ?% U4 }) v6 W5 l& b% ]8 ^static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; z; p, M& I J$ v9 A4 |8 _: s: a1 X .leds = da850_evm_tl_leds,
, z7 a9 m* `( `! A .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
N* D! R. G" f0 L1 p! b+ h};! k; i5 M* i9 D7 F0 @' e$ }- h
" v( o+ F8 H2 V' q9 H. i2 _static void led_dev_release(struct device *dev)
7 ^* _$ u4 R0 V: L# q{
/ {) D" X0 T# U7 P, \};
2 p' t. K& ~$ v# p( d7 _; z* ~( |% w `3 C7 Q7 c x
static struct platform_device da850_evm_tl_leds_device = {
% n5 i& \ W7 X .name = "leds-gpio",
: A( x) s v: p5 i+ ?6 ~5 [. z .id = 1,- W1 b. e. f6 S
.dev = {
" A" A8 m1 L6 ^* G8 ^: } .platform_data = &da850_evm_tl_leds_pdata,. R6 ?2 [; h4 x. B, a$ R3 |, j( v
.release = led_dev_release,4 [- D+ r8 g( O3 L+ f0 C6 T5 U& g. }
}
; H" r$ C- H9 f/ W( u+ R4 r};% I: k+ s( F C& Y$ U% h
I# C$ G8 O' ~1 b# M# s* ]static int __init led_platform_init(void)& C4 k6 d; q, w7 `$ a. g
{; L: H, k: k9 Z9 @& C
int ret;
* _6 O$ j g; C% p! j/ Q#if 0# v8 a* f; p M5 [) C% z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ M U: C9 J2 U7 n: A5 U9 j ~
if (ret)
3 M& U( S! g5 f& R3 a pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
) C# A! X% ]! S4 A; o: {1 j "%d\n", ret); z5 o; r' u0 S3 V# y' W% b( v
#endif
7 {1 |3 Z6 G# Z% @6 a8 ^1 Q! z ret = platform_device_register(&da850_evm_tl_leds_device);
: N( H" p& v; t, g8 k1 e4 E if (ret)
8 O+ H# |3 s7 M* A( l! j3 f pr_warning("Could not register som GPIO expander LEDS");
$ c# J2 _& L5 u1 \ else
* i3 ]( ~' R4 ?+ e printk(KERN_INFO "LED register sucessful!\n");# j7 h d7 Y' Y! F1 c9 I" Q2 k
- f, Q4 C' u6 q$ q0 [, ? return ret;
' h- h" T6 I0 z. M( g: J1 C: G2 w}
& {5 [- \# d, H7 t# d* ?$ C) k1 ?/ M
static void __exit led_platform_exit(void)0 }8 s, @/ y, L. x1 v0 O- r
{) B5 _$ B% b/ u& o
platform_device_unregister(&da850_evm_tl_leds_device);
( X$ g3 w2 T1 H) ~2 I0 G' o$ w% W0 T9 r6 P3 G9 N2 X/ [4 }& a
printk(KERN_INFO "LED unregister!\n");
5 M0 m. B5 N6 B6 Y6 E' _}% N- O, `6 c. c( s
! L4 t) J+ t1 f( r& l1 s
module_init(led_platform_init);) @. [6 w. q. C! S
module_exit(led_platform_exit);
6 D8 Q6 Z# C9 Y5 _! D) _$ `0 z% D6 m& {3 v
MODULE_DESCRIPTION("Led platform driver");
$ A" D3 R( q1 r/ t' J7 p: SMODULE_AUTHOR("Tronlong");
0 ?# i, o6 ^% }7 HMODULE_LICENSE("GPL");# W8 S! ], u5 e9 A
! j( U) [# g/ A' D2 R
|
|