|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 d' x q7 ?6 |. l7 i. H
#include <linux/init.h>
5 y, h, G; b7 x) V; m( h#include <linux/module.h>
& l2 A, b: p' A& F% x9 z9 C#include <linux/kernel.h>
6 L2 H- S" z0 T#include <linux/types.h>
! I, D6 w' Z: x. t4 S8 B#include <linux/gpio.h>
\2 Z I3 L+ K% w; e+ _) n#include <linux/leds.h>4 w4 X- f- e0 z+ f4 o, E
#include <linux/platform_device.h>
1 }8 }) U& U1 U# C9 d9 [
( Q* A7 i6 p9 Y9 P3 Z#include <asm/mach-types.h>! ?5 z8 z0 `* `3 k8 |: H) n
#include <asm/mach/arch.h>) _3 g5 p$ }. W; r( L. t
#include <mach/da8xx.h>
# ~7 z) V' A3 ^#include <mach/mux.h>( W; O2 o. z8 R( i1 P" S$ ?
8 y! k% r# c: _. H) R: ^# [
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
5 d' ]) S0 |$ \; m0 a; ^% X#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) _5 S) i( b% F
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
/ c: L$ v* v/ ~1 e) c1 r( o, _9 e#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)( }2 d9 x" S9 r
# h( ?- W6 r" D% S0 k/* assign the tl som board LED-GPIOs*/9 ^! v% J8 }' k d7 x1 O
static const short da850_evm_tl_user_led_pins[] = {
0 @& l0 Q) K6 u$ Q /* These pins are definition at <mach/mux.h> file */
3 p( o. R( U8 I! o; g DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" v4 u- g- ]. a4 W -1
6 G, L- f, P# c3 F) A};8 `5 h& N( n$ b7 b* z
# z( z5 C `# b! `$ P2 M
static struct gpio_led da850_evm_tl_leds[] = {. y, O; D; F: V3 ^
{1 W6 t1 D. x; V
.active_low = 0,6 Z6 ^7 ?& T' r( ~# ~
.gpio = DA850_USER_LED0,( H w# H3 C) P1 r! U \/ B
.name = "user_led0",
1 W, l/ ~" Y* i# U1 n .default_trigger = "default-on",9 M; h1 S: w: @$ K, t, M
},* _5 G' F& N: ?- \- Z, W
{6 L& Q: {- i0 H/ E* N
.active_low = 0,, ^0 k8 r8 ~7 \( r m
.gpio = DA850_USER_LED1,
3 R% @( _" F! M+ D .name = "user_led1",; z' n0 Z) ?+ @+ k7 j" o
.default_trigger = "default-on", e+ z' d$ z u; A
},
( ?5 [7 E1 R+ R+ _ {
: L+ U& B1 s* t( o .active_low = 0,
6 K1 k* W) |/ P# c. N& T$ t .gpio = DA850_USER_LED2,
# \, ^2 n0 Z* k2 ^# z1 Q .name = "user_led2",8 K8 o7 T e) \; z1 B
.default_trigger = "default-on",# `$ e+ K3 \; S* ?
},
/ x' N/ B( W- q- [7 q$ B, I {
9 |4 v! K/ _/ C( w .active_low = 0,) H! J. H. V$ u; |; i! p0 N
.gpio = DA850_USER_LED3,
! Y) z6 O- m7 L5 A. U( n4 { d .name = "user_led3",. d) E7 C7 s/ C v' u/ r
.default_trigger = "default-on",
- ^6 L# j' ]/ I( {! r# F. S/ ? },
7 P; a/ Y' ?: [0 i S8 h" H- Z};7 \$ Y! ?) Y/ ?6 h
E) W( C$ t" _3 h
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! z0 c( o9 r* w6 ] .leds = da850_evm_tl_leds,2 z0 i& Y- t: M+ S: A9 W% r7 g
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) T( k {) L! E+ W4 M% t' H8 z}; \; \* ]8 ^1 N# l9 X/ ]
: X4 Z& K6 W1 z% ^
static void led_dev_release(struct device *dev)
/ t8 F8 @9 @6 t3 K5 K{
4 f1 [- P- l6 |1 u};# }# I, o* H- @ s) T5 b
5 G3 Z+ c6 q& ^& xstatic struct platform_device da850_evm_tl_leds_device = {$ Z ~% I( m V& ^3 p
.name = "leds-gpio",/ u5 }: ~# N D( }
.id = 1,
0 l: D% l. o( Z- y1 A: V* d+ e .dev = {
* Y* S7 h& B+ H5 v! }8 A) B5 |' U .platform_data = &da850_evm_tl_leds_pdata,
0 B7 f0 F# M6 Q/ B$ _( y7 | .release = led_dev_release,3 k) s" l8 X$ j) |0 P* S
}
) A& a, Y2 ?% j0 v};
0 O2 e# u7 j; S
9 |) E) A" Q h) h' g7 U+ @static int __init led_platform_init(void)
0 p3 M( B6 ~1 ]{; B; z& t. T( ]( Q3 H
int ret;# C" }3 `3 a5 {( h. _* @; ?0 o
#if 0
7 ~) Q7 q$ \1 w# \) M" |( J ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, G. H3 B% [- G if (ret)) C- \- e# m0 e+ A- b
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! d0 {1 ?' r+ A9 E "%d\n", ret);
9 y9 w" q; P% P+ \' E#endif) k5 Z- H M: n- G. z
ret = platform_device_register(&da850_evm_tl_leds_device);+ h/ F6 h2 h" E+ J" e
if (ret)! s/ Q0 I$ n0 c2 o
pr_warning("Could not register som GPIO expander LEDS");
) y: k" H: Z3 w5 K5 j7 E9 {8 ^ else2 S' F: W% t2 I- d& _) z
printk(KERN_INFO "LED register sucessful!\n");) K- Q1 d; Z/ K
$ u4 a1 _6 x6 ~9 Y# M, {' ~+ ?7 o
return ret;
8 V- b4 ?9 K+ i}$ H4 W& ?# R& O. t: Y
! ]4 Q" P7 u5 o, a
static void __exit led_platform_exit(void)% u" G/ P, L/ U( f0 S/ T
{
5 Z7 T& N9 z1 U% i platform_device_unregister(&da850_evm_tl_leds_device);
' e, \; T' x1 Q
7 d0 E* b" m% f @( q# Z6 V printk(KERN_INFO "LED unregister!\n");9 x2 f& D6 Q1 e) H8 A
}
/ _( h! h5 n3 a/ `+ Q4 j$ s R }7 G t( u. } z1 Y- v9 S
module_init(led_platform_init);# v' E' ?: x6 t9 l
module_exit(led_platform_exit);
( C8 a/ X0 ]( ?1 \ Y) z2 ?5 ~. L5 y$ c1 [3 e; i
MODULE_DESCRIPTION("Led platform driver");! M$ W7 m3 b n* r
MODULE_AUTHOR("Tronlong");
* h" W5 R) j) z4 C- S5 [MODULE_LICENSE("GPL");
. q8 s# d5 L5 i! \( @, c4 C$ z% J1 P- X0 v( C( {6 \2 F3 J
|
|