|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& U- P e9 N5 z# v2 h: Y! e0 l; G#include <linux/init.h>
. ~1 O, F8 U6 t#include <linux/module.h>
1 B: A9 T& R0 H( ?#include <linux/kernel.h>
' f7 U) v* T+ ?# _4 U#include <linux/types.h>0 e, [! J, w7 m: j3 t9 I0 J
#include <linux/gpio.h>' t" Y, X. t9 D; P3 L3 u
#include <linux/leds.h>2 p& H: N( B; z! ?
#include <linux/platform_device.h>9 X: Q! A( `2 ~+ e
7 e- ]* e& g9 g0 u
#include <asm/mach-types.h>
' q2 g; y. j) k2 H; ], ^& v#include <asm/mach/arch.h>8 ?* W6 K5 d( W$ K+ v
#include <mach/da8xx.h>. i* e; }& E3 [/ g
#include <mach/mux.h>- l& I" j6 O7 @+ Z
. |6 V e8 V' Y' i5 ? a" Y3 }#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 F/ H. @, @' g% a# Z3 d1 N/ a9 N# z; c- |#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 s. B6 E$ h) ~( B& q) i#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
0 T% R1 S. e6 ?' b9 B2 ?#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
. }% A; E m: t, ~, R) f$ o B2 {. |7 N" D5 s3 W h5 O+ {
/* assign the tl som board LED-GPIOs*/
' L, x& k* y. ?6 A# Wstatic const short da850_evm_tl_user_led_pins[] = {
- U- t6 H& R: Z2 V( T5 h1 M /* These pins are definition at <mach/mux.h> file */
: t' I J/ Z* A% y: X% P! b3 W0 K DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
7 l1 G( ~2 c+ {1 M8 T% V I j; S" r -1
# v; O4 c2 {. }( V& G( [};
7 B! f- |5 W- h, E
; E$ r: k' a- B2 |- |- H2 Nstatic struct gpio_led da850_evm_tl_leds[] = {
6 F& r9 V/ d8 H) I% x4 N6 s% l {$ X+ M7 G# j/ {8 v1 z
.active_low = 0,( B4 l! F$ w2 |* V4 l+ d
.gpio = DA850_USER_LED0,3 A( `& Q. ~+ h2 A8 I, G
.name = "user_led0",4 m+ A3 m& L5 O) Z. ?5 Y
.default_trigger = "default-on",
R: v) M8 G1 S% K# h$ z# ? },
% P& i/ Q6 f* t/ g: |- Y {/ j( w0 S" e% a: C2 h. }. U; P4 h& D
.active_low = 0,
# @/ R2 F5 O% b# v- g& q/ ~' l! C .gpio = DA850_USER_LED1,& i. m3 N& P& U5 I
.name = "user_led1",
+ E( k+ j M( e6 G" D% @6 O4 ]* Z .default_trigger = "default-on",& P( C0 N1 T4 y! h% \
},/ j: j1 F7 d' i. b
{# C. j9 }/ |& H4 M! O( d
.active_low = 0,
% X" i. c9 m" w9 l .gpio = DA850_USER_LED2,
! e& N' ~0 o: W0 o6 w .name = "user_led2",5 n" V( `- X3 V( Z' |% [
.default_trigger = "default-on",3 k( q$ m l6 [/ n0 {8 t
},
$ h) G% Y# K# V6 L9 P; X" Y {/ y* c5 c# y9 }. K5 J7 o
.active_low = 0,
& o4 ] r V6 `+ _9 s5 i+ ^ .gpio = DA850_USER_LED3,
" H2 H% M d% h1 Z& K6 j2 v .name = "user_led3",
t V3 [; G0 d .default_trigger = "default-on",
9 I- \: N& V0 b. a3 [/ x },
8 b, P3 K5 p7 o+ f6 Q};$ ~% Q/ C8 T) y" Q
# M; s% k$ [, r$ \
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
% I4 `' q5 h" F* e" ]1 C. D .leds = da850_evm_tl_leds,
/ u; Z- k, M) A0 K .num_leds = ARRAY_SIZE(da850_evm_tl_leds),- ]+ a0 W9 K( a2 @8 k+ g* a
};0 ?9 h' r8 m+ i, L! B
% Q: H- Q& S9 v" N; B3 v1 A8 rstatic void led_dev_release(struct device *dev)9 `- a( h, [* ?+ B/ Q7 q
{
5 W& @, ~8 @; l9 w};
8 `8 c; o0 X: B5 |, q4 G( v% W$ j2 A1 s ^+ i/ F g
static struct platform_device da850_evm_tl_leds_device = {
% |; j: j2 k9 P# E4 Q .name = "leds-gpio",5 \1 ~9 m: b! T* S& `( I$ Q
.id = 1,6 W1 f' ]8 {& W U4 X8 X
.dev = {( K4 t# _' B. d
.platform_data = &da850_evm_tl_leds_pdata,
4 P M6 q" I* L2 R5 m& Q5 H( e .release = led_dev_release,
# a0 h4 o' L9 X' q }
3 h7 Z) L% ^0 C* |- R. \+ X1 s};
0 I+ I% \- H/ ~% O8 v' k: O9 j% s, ?" [- S! _
static int __init led_platform_init(void)
+ i- r3 i# ]% a, P% C: L6 B{
( ^6 m( F5 | E6 q- k int ret;
) K9 e+ |, T) W0 x#if 0
5 ^9 p1 O4 Y; w1 R7 H- U ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 J; C. a: G! H: Z- \ if (ret)
0 d( X- R" c0 t pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 e7 H7 V( W4 A% y m$ r
"%d\n", ret);
j" W) b( p! ^#endif
0 S) j1 x6 H) g, q9 L) R1 Q9 ? ret = platform_device_register(&da850_evm_tl_leds_device);5 y6 u5 ~7 J% {/ K9 c
if (ret)
; q8 x4 ^2 T* x9 L* I/ r pr_warning("Could not register som GPIO expander LEDS");
# {( [6 Q, z# f) b else
) p; d2 q9 R, N; ^' O, A5 [ printk(KERN_INFO "LED register sucessful!\n");& J' O) C* P; u4 s
8 T- y h$ u u+ ?- P return ret;
6 X3 t" F9 x9 Y) y0 |4 b% z" F}1 b6 U# T) f6 M8 K; |7 F
! r R* o. q. E! I/ S; \; H ]
static void __exit led_platform_exit(void)
, G0 c; i3 Q( w- i* W& M; _# J2 `{: W2 ]; f6 ^3 r7 }7 e5 I4 a
platform_device_unregister(&da850_evm_tl_leds_device);
5 K. _' m3 b/ O+ V
) ?5 H! h, K7 _8 w- V& { printk(KERN_INFO "LED unregister!\n");
7 Y, E9 A" L( o5 r}
0 }% V# S4 \- z4 X, c) g: H, s% O0 ?( V1 v% C1 G3 A5 K
module_init(led_platform_init);
: V2 m+ u3 q. e5 ?+ U* Qmodule_exit(led_platform_exit);
: ~7 c. W8 x9 l0 u8 E0 B5 W' e* G2 t* v. F, P' y# V6 [
MODULE_DESCRIPTION("Led platform driver");' b- ^5 P5 X9 h
MODULE_AUTHOR("Tronlong");
0 R' P) H- a" T, M- r) H* J1 MMODULE_LICENSE("GPL");) U1 u" I! f! {5 I9 |1 v3 I& M" X
- U+ e" x/ C! b8 H
|
|