|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 \) y6 F3 m/ R! [: f#include <linux/init.h>( O" u: ?4 T$ \: t+ i
#include <linux/module.h>( k$ l, ` I( V6 F" q
#include <linux/kernel.h>) L! K! g+ {+ u4 R. F. z W7 d
#include <linux/types.h>1 b7 b- P3 a8 A9 [1 i, _
#include <linux/gpio.h>
$ }% G! a" u4 d8 t6 w' i#include <linux/leds.h>' ~$ Z$ g3 b9 @! P3 ]8 N! W( N8 X
#include <linux/platform_device.h>2 Q Y5 e- U8 T$ @4 k
7 i& C( e0 H7 }: T% q1 @) D
#include <asm/mach-types.h>3 {! ]# U9 k9 n! d: B! U* f9 |
#include <asm/mach/arch.h>
; U: Y; F9 q/ O4 S+ b! I#include <mach/da8xx.h>4 V! e; i- U1 H
#include <mach/mux.h>
( h1 W, k9 F! t* W( ~6 `& N. ]/ W& D" v- Q9 I/ v( k) A
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 @. D+ m B4 F& {6 M
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) x0 p" p2 X8 Y* s9 H$ f+ }, ^+ v
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1). m# x7 M- u0 i9 J |% p
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)% ]0 @; L, l" T! F% e. L
: c3 c( Q& _; ]% `* Y! K# R& Z
/* assign the tl som board LED-GPIOs*/! k# U* ]' p' \4 k' `: x8 }
static const short da850_evm_tl_user_led_pins[] = {
: U$ w+ ?8 T4 i) l# Y% _" P /* These pins are definition at <mach/mux.h> file */
( ^+ V7 j+ u- V' i7 M DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 g6 W5 b t0 h/ S# S& D. P
-1
6 Y' }! x3 e& S% Z! Y( f% s};: d! D( L! y5 S7 _) {/ e
! R5 c1 x: w- E6 n
static struct gpio_led da850_evm_tl_leds[] = {; K9 x7 |* Y {6 ?8 o5 z
{% s" s* n( b) M8 A
.active_low = 0,
- v( y2 d& \0 F! u& j .gpio = DA850_USER_LED0,5 ^5 X$ d& ]) H" A
.name = "user_led0",5 A3 q2 D: s9 u% D! r
.default_trigger = "default-on",8 h; G* k. R: Z% \4 g& K" O
},8 D- d+ o" Q4 P& A
{
" y3 g# A7 X9 t; |" w5 X7 X .active_low = 0,* D, ]! L# O7 d! L5 ~
.gpio = DA850_USER_LED1,: l: f" @/ r4 W8 a) y; o
.name = "user_led1",
: S6 s8 l8 C1 ]6 m* Q! ] .default_trigger = "default-on",
+ d% Q) P. J5 @+ I. I" x$ ^# N# Z },& z2 ^% g* n. v5 g) ?
{: m$ N4 N9 A- p; s- T
.active_low = 0,
: _3 q- X# w2 O* a: v$ A. \ .gpio = DA850_USER_LED2,
, l& d& k# Q) J$ r, @ s .name = "user_led2",1 n) S0 N, H( C
.default_trigger = "default-on",! j: h3 ~) F3 u8 ]( Y) Y7 ~
},' d0 \0 g; J# ~" W/ I
{) S/ P0 F; h/ }, b l8 w1 G Q
.active_low = 0,
( b# G. [" f0 U% n" J! ] .gpio = DA850_USER_LED3,. a/ c! V! S% g, e" I( q9 |
.name = "user_led3",, k2 x3 g1 W8 S# O- Z& `6 S; n5 ^% j
.default_trigger = "default-on",( G$ ~2 j" B7 P4 W3 [) M) v
},: ?; L1 s1 F4 s4 L3 `+ `
};: `7 u6 p* r. d# I7 n5 {4 z* \
/ S; O* K3 P8 I
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; s8 V+ b4 s! w2 t) R/ Z .leds = da850_evm_tl_leds,
+ R! t9 A& h C0 L! P' ^ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 ~& O I% Q/ _};
/ w3 Z; V: F# G% b& n% _! j* A+ e8 E# i9 r+ f. S1 p
static void led_dev_release(struct device *dev)
+ w. j0 W" O! q& }{; V* F. D7 x$ y _2 \! r& g
};$ J1 ~3 X$ N; R8 v9 G2 }
. B- G9 d" \1 y U3 C% k5 O! Q5 E& Y: E
static struct platform_device da850_evm_tl_leds_device = {3 r5 I" L& {0 n l5 o( k) K" O. T
.name = "leds-gpio",7 W3 ^* x3 c5 K1 ^: m" A
.id = 1,
L |; }, y: d) ~& P% ] .dev = {2 A& j( p7 @, h% d x R2 Q* K) n9 T
.platform_data = &da850_evm_tl_leds_pdata,) V4 N! m2 i1 F+ R; j
.release = led_dev_release,
w; y7 ?( P5 p6 h( `: L }
/ v1 l. d! q! Q4 {};2 K2 O1 n4 K; m& r) I! _7 o- S5 A
/ T, q/ x3 D3 ~- S& h3 Y
static int __init led_platform_init(void)5 T# @* T0 B' X9 G' G
{
$ }- B" I, b/ f int ret;
9 O% e; G4 Q2 n1 n#if 07 N" L' G+ D8 Z7 k& k% H1 N3 m
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 J& M* _ B6 |+ ?
if (ret)
, T5 T% Y h+ l2 s5 w, Z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& ~6 D0 v8 [, T. G3 N5 n
"%d\n", ret);
( c |+ h' P6 v' ~) p) \#endif
: W3 S1 |# H0 s% t: E1 l, k ret = platform_device_register(&da850_evm_tl_leds_device);
. q6 }( n" T2 |8 M' ` if (ret)$ f( n% S. }; ?3 {$ O* ?
pr_warning("Could not register som GPIO expander LEDS");
& e# a* v- v+ Z: ? else' @* v2 \/ I' X3 `. }$ X7 n
printk(KERN_INFO "LED register sucessful!\n");6 C% ]7 Q0 S: c
4 }, W4 `( r( j7 \: h return ret;
& Q! F* B: n* `( y. T# J}
5 ^8 B* |' s* J
7 T; }5 z, f1 `static void __exit led_platform_exit(void)
: Z% F0 Y' q8 F/ ^ E" h" E1 q( F$ x) j{ J( g! W$ a# b' _0 w# h3 W
platform_device_unregister(&da850_evm_tl_leds_device);
, I, \+ i! s6 Z/ }( M0 o U( s& Z$ \9 _, K: L
printk(KERN_INFO "LED unregister!\n");
2 n% M* ?. S6 P3 T}& m/ e1 n" W! c+ O
7 m4 E6 `7 x4 i6 i Cmodule_init(led_platform_init);
1 f( P8 T, d1 Q/ Z6 E& W; vmodule_exit(led_platform_exit);" t. Q2 x z! y7 X! b( A! U
* h# o7 t: c- K a( l( P& R
MODULE_DESCRIPTION("Led platform driver");2 C# j7 b9 L: k: t8 @
MODULE_AUTHOR("Tronlong");: k/ I: U) p7 c9 {% m; k* G! C4 W
MODULE_LICENSE("GPL");
! \7 Y8 g% [* p# U1 e) C
0 V1 C5 R7 |* Q) @* L* a. u, y5 o |
|