|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; Z4 ~4 E* }( j; {5 d#include <linux/init.h>
. O0 V0 l5 c: ^5 X% P; O- h#include <linux/module.h>6 ?0 w9 {& r4 x( R
#include <linux/kernel.h>7 X$ ~) E6 [) _1 |
#include <linux/types.h>
) m0 j$ z- l1 Y; r7 E4 @#include <linux/gpio.h> _5 o6 A8 t; _* {
#include <linux/leds.h>
0 {1 x3 M: l6 M# o#include <linux/platform_device.h>6 I+ b3 N# M( G! ]0 b" ]5 [
0 h5 J9 }2 \4 [) j- l* C* X& g
#include <asm/mach-types.h>9 G" K3 g+ Q K0 K
#include <asm/mach/arch.h>/ q5 @! U# w" c* I Q/ Y
#include <mach/da8xx.h>
" Y* F+ z7 j+ @. l. N#include <mach/mux.h>
; }" l$ J5 V, v+ Y; D0 g M
+ t% M3 W3 p6 }0 {; d#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! t* [* M+ ~5 S#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ P R' |) o6 R3 J
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
6 h) O% c, X( p( R, Q# H& C#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% @+ n: K, j5 z, J2 K1 K$ F3 S7 u2 m* b
/* assign the tl som board LED-GPIOs*/
( z; Y0 @" ~. {1 Zstatic const short da850_evm_tl_user_led_pins[] = {
0 Q$ o9 e9 N( S; K5 ~5 |4 z /* These pins are definition at <mach/mux.h> file */
4 A& r' ^$ }- A) |1 z8 @* c DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 |8 P& _: T6 p; \2 ^* v8 W -1: f) H9 ]0 s# y, t
};6 M' o$ x+ W/ c2 \
/ X3 r, ^ z' ^, y
static struct gpio_led da850_evm_tl_leds[] = {/ Z5 Y7 M4 d1 `# x; S+ a. n
{; A, r7 F' I7 }9 P3 @* _
.active_low = 0,8 V' e0 k/ m5 W' k- s: C
.gpio = DA850_USER_LED0,
( F0 Q4 U0 ^- W, {0 {2 m! F .name = "user_led0",0 \* k+ D: y0 A! f* ?
.default_trigger = "default-on",
) ?+ w& H( j5 Y( C" _0 F },( B. o* W2 h& l8 j4 R: y) d$ [
{
$ Z- _1 z' o8 j& k7 \6 @ .active_low = 0,
: s, y" T# d- C3 |* q .gpio = DA850_USER_LED1,
' }$ W1 I5 W {$ Z .name = "user_led1",
% _2 A4 u/ s! G" n8 d+ ^2 T .default_trigger = "default-on",! J) [. k! L" X2 C
},8 a8 Q1 \% h9 L+ N7 `- c
{7 @3 A) @- ^; G, u* O
.active_low = 0,
8 p N# ~4 `% z T) G .gpio = DA850_USER_LED2,+ ~5 E) x; _7 O( @% Q6 U
.name = "user_led2",, i* O/ c: Z. ^6 |. `# ]% Y: r8 Z/ E
.default_trigger = "default-on",1 N( d3 ?4 D6 a: a' x1 r5 K
},7 {, W/ {* _6 L% N* _
{
; N4 v0 ` o& o$ q( G# \ .active_low = 0,
/ j" N9 |8 n: t, L7 R .gpio = DA850_USER_LED3,; F" x5 h; ?6 K# X
.name = "user_led3",
. n. n4 _; I; ]: W' H( i .default_trigger = "default-on",3 f! s& V* p* v. C! N
},
) T- d, I7 Q4 X) b9 k! N};1 u$ K! r) ^& U; g* g5 d$ v
* Y, h' }7 R( S
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ ~ O& J& `" U# _. X; C' H
.leds = da850_evm_tl_leds,. c) n' r$ N6 O7 r8 N" m& |# t3 y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),6 C1 \+ J7 p3 J$ @. F7 s
};
: J5 h Q8 T( Q; R& n# C
2 n& K4 ^' n" ^0 k, @7 h: G7 _static void led_dev_release(struct device *dev)
8 B) M5 R6 N7 r0 A{& W* _; {1 f/ k" H1 C7 l- \8 Q
};
% }, S6 H: n0 g/ u
|% t* o f7 J" E4 v3 Dstatic struct platform_device da850_evm_tl_leds_device = {$ M( O6 I J0 X* e8 V+ J& S
.name = "leds-gpio",# c% A! D4 n0 b5 w0 B, b% Q, w% h
.id = 1,8 x/ Q8 T3 J* s
.dev = {- U2 I1 U3 ]- L; l
.platform_data = &da850_evm_tl_leds_pdata,( A: ? x7 i" H+ Z4 V
.release = led_dev_release,
/ `/ \; Z+ s8 ^, B' v* p: x }5 M$ f: n4 x9 j' [9 b, |
};
; R; ~7 H- s' O! D
% ~- p E7 j2 X" o+ |static int __init led_platform_init(void)
* r' I3 X' P1 o+ h0 X- K* E$ Z2 ~# Q{
/ Q E6 j$ Q6 ?. r v6 e. f int ret;
E4 ]/ B) g- v. N1 v#if 0! X$ t- X. m% E3 S( K7 I
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" U" u+ v& G/ C
if (ret)
" z( @+ N/ d n; _; d4 P! ^& y pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
4 E3 k8 P+ a: p, Y "%d\n", ret);5 V: f4 T0 R e
#endif
+ L7 a( S! d7 c/ F9 D* H. | ret = platform_device_register(&da850_evm_tl_leds_device);9 y. C S9 p% l H4 S3 U
if (ret)
* i1 N6 g J% b: u. H! C& y pr_warning("Could not register som GPIO expander LEDS");
9 N) ^8 L" v: \" ?; w5 j- y else
" S% Q \+ r I, h6 ]% C printk(KERN_INFO "LED register sucessful!\n");7 Y/ e7 i* K# ~# `( |, {5 |
5 \& P. V s \7 g( b
return ret;1 U& c7 }/ N0 e) }
}
, b; R: z7 Y+ H+ R7 z7 \& \; R) |! z5 m* y: w1 A- p9 r
static void __exit led_platform_exit(void)
7 f" C" t; k0 i' x# x{. b- n& z/ h% ~( m. R( b
platform_device_unregister(&da850_evm_tl_leds_device);
/ o0 s3 V( X+ J/ C$ R2 W9 \ ]1 [* `( D% m$ w
printk(KERN_INFO "LED unregister!\n");$ W* q7 {1 r2 o5 v$ p( i6 ]/ t
}
% y& t0 O8 ~/ f P: y2 D2 ^2 y' }. _
module_init(led_platform_init);7 P% d9 b+ f# l$ \8 ?. S
module_exit(led_platform_exit);
% \, T! w! O$ R# h+ g) {4 l
% H/ ]( U# m/ C6 hMODULE_DESCRIPTION("Led platform driver");
& v: ^8 n! T2 ~ X& ^, A( x) G! SMODULE_AUTHOR("Tronlong");
+ [8 O) r& q1 CMODULE_LICENSE("GPL");& x8 v, S) z) z- B' {6 U
Y% K& t* j, z2 U7 Z. P |
|