|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ q; I4 T V) b# L
#include <linux/init.h>
2 f$ r3 F J8 X H' C#include <linux/module.h>
) |% L7 l2 u5 [. `* n9 J0 j& H$ B#include <linux/kernel.h>
1 W9 L9 x6 s# h5 {- p8 C#include <linux/types.h>9 B) O4 r I! x& H. Z: M
#include <linux/gpio.h>
t" E+ _% P6 Q' g8 o9 h; G: j#include <linux/leds.h>
\% Q3 X3 m- p6 A#include <linux/platform_device.h>9 }4 t- |7 [( V
5 L, p9 H6 k- ~5 D! F#include <asm/mach-types.h>: v/ X2 j6 e' ?2 @2 a! l
#include <asm/mach/arch.h>; b0 \0 O$ G( l1 M) U3 [. i
#include <mach/da8xx.h>! k5 Q1 g3 d0 g1 e
#include <mach/mux.h>8 H5 L* ?* q; T" q* y% W4 @
9 b' f1 q6 u4 v2 `; z/ d0 X- s6 W
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 {: N A( d- _% U
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* C$ M: g3 y. M" x+ H8 p8 z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) C' ^: ~& t% ?9 Q" x0 U% r+ o3 t#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 M1 L: u2 L, K3 }% x
# _. F0 ]1 c [1 T
/* assign the tl som board LED-GPIOs*/% n/ C. K+ }8 `" v, |4 b7 M" G/ K
static const short da850_evm_tl_user_led_pins[] = {! i- L. ~: i+ T f0 M/ R
/* These pins are definition at <mach/mux.h> file */
" q+ ?% S7 o2 q8 C DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 X% n' n$ @6 ^9 N c. o& c
-1
% _3 y/ d. }, X};
, p# } T- B0 k
0 ?) k9 j; D, W( B; ^3 h2 Zstatic struct gpio_led da850_evm_tl_leds[] = {
: L6 S* V1 j2 {2 l( t {
{7 l5 n9 T* y- [8 a7 o .active_low = 0," W9 P/ l V. @0 X
.gpio = DA850_USER_LED0,
; j) \6 f3 w% U- F% L; Q& R; P/ C x .name = "user_led0",
* ^2 |4 }, e, ~' p8 y( z .default_trigger = "default-on",
+ x% z f% X; I/ v0 {* K: h- B },& N. G6 k. t: u9 F
{
8 U9 j/ V3 \/ \" d2 P+ j/ N .active_low = 0,
x6 l, m& M8 I: [7 h9 a( T2 {0 ^ .gpio = DA850_USER_LED1,- T% x" C0 Q) Z$ }6 X5 i0 Y
.name = "user_led1",0 s6 r8 v, ?: A8 D K/ j: W
.default_trigger = "default-on",
6 q; p( o5 \& o, G) \; R },
0 V& @; S& }# n% X0 b; {2 q {
# y6 z8 U; b! @ .active_low = 0,
" v4 A! o$ K- k' i' i& x .gpio = DA850_USER_LED2,7 }1 Y8 g6 Y% M8 f
.name = "user_led2",
& ?; x, ^/ I |0 B2 [- d& L) t .default_trigger = "default-on",
- n: A7 R( I! n. e, ~7 d },
% s0 l5 g3 i+ c X, ?; g1 L1 J {
& M) q" r% ?! q) |" A5 J .active_low = 0,
# x2 c0 ]% X- F .gpio = DA850_USER_LED3,
8 g0 n0 j" ^ [. d3 V5 N3 _# Q .name = "user_led3",
: `5 x! M4 u+ g .default_trigger = "default-on",
/ P# Q2 e! b2 D/ n- u2 r: i; d },7 R3 C; a% c% ~' }
};
6 Z0 j, [; d+ |! x* z5 _( N2 s' x: S' q4 _1 Q% V
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
) X5 ^6 `) i w- C, X0 _ .leds = da850_evm_tl_leds,# N, V! x. D9 O# H, U! _
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' q- r% y t3 m2 K( b};
" A+ w0 _( S" n% `. {0 `8 l
0 r4 X7 a, A7 Y; Hstatic void led_dev_release(struct device *dev)
1 v* J5 ]1 m7 j+ S8 R. x$ R{
" s8 z; M6 w- ]6 o};" `" G' r- d1 B. M! F+ }
$ \* O8 z2 W0 \1 v
static struct platform_device da850_evm_tl_leds_device = {9 ^4 Q5 X/ A- y n2 X/ X, {% k6 P
.name = "leds-gpio",. H# d3 x- R4 O! m% `: w
.id = 1,' E$ Z6 q8 l% K: K$ x; S- B1 U
.dev = {# K3 L& f7 Q: ~
.platform_data = &da850_evm_tl_leds_pdata,
5 Y7 N* x( s5 H! a .release = led_dev_release,
: J9 [" p+ d4 Z. y8 K9 |( i }# h( Q- o9 {0 n7 h$ S- L
};) t- Q. z/ Z( [
/ t$ J8 Z C- f. }$ ?4 q( tstatic int __init led_platform_init(void)
# }( T- l' f1 W{
- E h3 L; b9 ]. J4 V3 {5 }/ B int ret;
0 n# [5 b! c% {#if 0
/ p. u8 e9 |( \2 x ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);5 ^. _1 ]% Y/ t* P& d
if (ret)7 U; D. E6 o6 f( B, n. U. L
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ c) l6 s2 Q% z/ Y- s "%d\n", ret);
5 Q5 H8 i& v, Y, H#endif
3 o/ U/ T5 y' p ret = platform_device_register(&da850_evm_tl_leds_device);, u e4 C/ V) q0 M$ U K
if (ret). k5 P! n' q2 }5 [- z
pr_warning("Could not register som GPIO expander LEDS");) n8 T5 G1 A. f. V1 O& Z0 O- d
else
. n5 n2 _+ O/ w( z printk(KERN_INFO "LED register sucessful!\n");' L6 [0 _% C+ ]8 Q5 _
5 ~9 s; v% N3 o0 Y return ret;. ^& V0 M, _ @; F
}7 V( P6 S) o2 {0 ~ h6 I: P
0 J2 \$ ~+ x# }) r; Y
static void __exit led_platform_exit(void)
% j A, O) G+ G1 I{) G! _7 K+ S' d3 K- b
platform_device_unregister(&da850_evm_tl_leds_device);2 i$ ]: ^% O N* K7 m
. C0 [5 ~% t8 q1 h5 E- k5 ? printk(KERN_INFO "LED unregister!\n");
- S$ I0 R! |% F2 ^}3 b. l5 I* G* ~5 |. F4 j/ O
% A7 H% T# {6 J: j% w' p7 a
module_init(led_platform_init);
* ^6 m2 V" d, Y: r: l: b" H" ~/ e+ Nmodule_exit(led_platform_exit);
5 Z8 q! @) W2 L( w8 W) u4 Z( g5 J. Z% T; _
MODULE_DESCRIPTION("Led platform driver");
6 ? G" b, v2 F. e$ \2 C1 C4 }3 d/ NMODULE_AUTHOR("Tronlong");
8 X8 A. W# H9 C- D$ J& kMODULE_LICENSE("GPL"); E+ ]+ T" N& N& t; {+ Y
2 S- \% Z+ {1 I/ ^9 ^ Z2 ^4 j4 L* c$ m
|
|