|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% U7 W* G! X, s$ { ?/ V
#include <linux/init.h>
$ i- Q4 A+ ^" }7 g b8 k#include <linux/module.h>
; n( A$ n! z3 b, S& E4 r#include <linux/kernel.h>
6 o. v3 D/ y. I3 A#include <linux/types.h>
! `' R E( J! j#include <linux/gpio.h>
/ |: b) M" n7 {7 M#include <linux/leds.h>4 }( u0 b! K! t/ o
#include <linux/platform_device.h>% S' F6 [: E# v3 _9 \- Z# S
5 [$ }1 ]; ^! {4 a
#include <asm/mach-types.h>% P& e0 U8 @' C2 A
#include <asm/mach/arch.h>
: M" w) M) T8 z- y, B, t5 J#include <mach/da8xx.h>( B7 U1 a- [% s# g- \
#include <mach/mux.h>. @) A# C6 x0 K' D8 y
7 V6 \2 M: L' U E$ B; g5 X! n#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& I. [) Z0 g$ J0 P* U$ }0 m#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- z% ?3 c, k8 _#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 E m+ a8 Y2 b& ^$ H2 o#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' m1 G/ ^( {7 ~6 O$ S9 x0 Y
3 a; a: |& ]; I, L& B: z# {- r/* assign the tl som board LED-GPIOs*/7 h6 u. c1 m, b4 b& P7 ~) D
static const short da850_evm_tl_user_led_pins[] = {
! Y; i% P* w B: r/ u& V6 D( w5 {- c /* These pins are definition at <mach/mux.h> file */
, I6 d/ ?6 M# {3 B; I/ Z5 M# g- W DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ w6 `% L* P: C5 s4 m" k
-1
8 {/ ~) F! C) ]" C7 {3 S2 j( ~};* {6 x1 R; c1 b2 z( I
8 A6 L: c, p" ~2 i! `8 R. ?4 _
static struct gpio_led da850_evm_tl_leds[] = {' p0 i/ G% u4 p7 m
{' H7 F1 m& e& u- K3 h
.active_low = 0,
2 ?/ T* f7 E. w6 R _ .gpio = DA850_USER_LED0,
6 w9 \1 K! I5 @5 I4 O; W$ u2 t( Z .name = "user_led0",/ s: v; h" P5 e2 E
.default_trigger = "default-on",
% D- k7 o- q. _/ m: M& p9 c },
& X3 v/ u: C- A7 s6 H! H( ^ {, C- f) O* |0 \% O
.active_low = 0,
% Z t3 u6 ^! s2 \ .gpio = DA850_USER_LED1,
0 [. I3 L4 u* _- R .name = "user_led1",( h1 i' ?% v7 \% C
.default_trigger = "default-on",
: O, C( [, X1 h j },
- y2 O P9 R2 Z- q8 z# L* p, w- L {
0 f0 D- R1 a3 Q6 v .active_low = 0,% l, O$ p: ?6 f M1 h
.gpio = DA850_USER_LED2,& Y( Y$ c" w4 d: \5 v" P& H
.name = "user_led2",) L( [9 d0 M* W5 ^+ F( p
.default_trigger = "default-on",: E* b& F6 p% V t1 T" u/ `& i
},
7 S$ p& k" T* j5 Z. E/ p" U {
) L/ ?3 i i; a% ?9 C; h .active_low = 0,/ V1 Z2 y7 o/ \, N: N l
.gpio = DA850_USER_LED3,
% L- h) _ P! Q4 ]( a+ _ .name = "user_led3",& d+ ]7 x3 s- i2 ~4 o8 b) z
.default_trigger = "default-on",6 q) \' B) B/ l7 F2 O% _; t; P
},2 h7 d" n% W. Q
};' L; l( K. Y- K% j& X/ g4 {
+ `: |2 C' M: l8 U% k2 U- z6 N
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {5 Q! f* e% U1 ~' D, [
.leds = da850_evm_tl_leds,. O' ~% v" b$ i3 i R/ V7 Y. y7 v
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 B- ], X% _: F% |' r/ U& d( u5 n
};6 s8 K% v/ e8 d. u M, M
9 i8 P& U% g% E: K; A: s7 D: v
static void led_dev_release(struct device *dev)+ r0 I* U* [; M# c* n+ v( I5 ?
{, o3 }2 [' ?( _4 p: g% \
};6 v9 T% m. ^! R& t6 ~
* @, e$ S) V8 Y) }: |static struct platform_device da850_evm_tl_leds_device = {4 D$ c& {: J: Q. }2 @; @
.name = "leds-gpio",# J! d* ~9 X( R* x6 V6 q
.id = 1,
: g, h7 x3 Z5 s( j .dev = {0 t; _& B& M' O, j, t
.platform_data = &da850_evm_tl_leds_pdata,
* e! p# S+ O8 D& c& z. ]2 A .release = led_dev_release,- f& T8 {: H7 J
}% s! E- {: z& u: V% j; m- {
};
) U/ x% {: ] j7 G- M6 A; B+ z1 Z% o
static int __init led_platform_init(void)
o# ~1 V+ [' ^{
+ z6 K) |' f& t% M/ t+ Q- y int ret;
" r0 i) s k9 v' Z: t+ p#if 0 u4 V( v, T) z8 C6 G
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);9 b% d" F+ H8 m% L
if (ret)) R' z+ R; ]) b: | h# A" B9 K
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! P1 h0 `3 k N( g
"%d\n", ret);3 q5 @+ R9 X0 Q4 @/ T
#endif0 F4 @& s1 w) b" q# Q4 R
ret = platform_device_register(&da850_evm_tl_leds_device);+ ~" i2 t- i3 R$ d
if (ret)
3 M2 g" t) z7 l0 }! `9 ? pr_warning("Could not register som GPIO expander LEDS");
% f; Q A3 O0 w else
- t1 ~! `9 c3 i( m5 D printk(KERN_INFO "LED register sucessful!\n");+ z r3 t- \5 n5 F) _. l W+ C8 a
: x$ J; y6 b( ?- \2 B& ] return ret;" B9 y$ p0 s( ~& E0 H7 I
}# }0 n) |: L$ L+ I: a- q& L
/ o8 Z! v* F' U! b6 `: }/ v
static void __exit led_platform_exit(void)9 V' T# Q4 O0 h1 j" R k: Z
{
( E A, ^# ]+ j* [ platform_device_unregister(&da850_evm_tl_leds_device);0 v5 X/ c0 X% X3 T
/ q5 ^) ^) r/ x printk(KERN_INFO "LED unregister!\n");; }6 `* R) \& M+ e" x8 m
}
+ i! l! @6 f7 L0 `# u; ~* U8 O) v1 |! N+ a; y6 \
module_init(led_platform_init);
- {: I0 ?4 s3 v- w; ~: w0 lmodule_exit(led_platform_exit);
3 G# A: e; f' N( Z7 v% ~2 k% Q4 ~- Y% z5 _9 _% L1 ~1 q
MODULE_DESCRIPTION("Led platform driver");
0 E( U# U+ P* G3 e) s% C' ?+ jMODULE_AUTHOR("Tronlong");0 p0 ~. {( r, V
MODULE_LICENSE("GPL");
( V6 @5 [, Z( a0 t2 v# Z
' j. I: l$ V4 Z& V3 _ |
|