|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' E+ K& J# p( Z+ I
#include <linux/init.h> g# \* z$ \# \" X. K9 ^
#include <linux/module.h>
6 |1 n H- |0 V% C#include <linux/kernel.h>
/ c* z: q; V0 `/ ~) H( x#include <linux/types.h>
: ?7 s s X( x#include <linux/gpio.h>
4 R: o; f4 L3 \0 u2 y4 p! v( n#include <linux/leds.h>( U0 l( e' D2 E9 _; I
#include <linux/platform_device.h>
1 u( u5 q4 d. j) p- ?3 \
0 C7 C3 p% ~# U; u' b#include <asm/mach-types.h>/ u. {- ?, _, E) ^3 a5 A; C
#include <asm/mach/arch.h>9 e; ^# Q1 `2 t. p, v0 }: e
#include <mach/da8xx.h>; }5 k _+ d. C' \8 i7 m. j1 h
#include <mach/mux.h>( M3 D. [$ E8 J2 e/ Q
! v0 D6 n& t/ k- w+ v; j
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
# \: l2 X& _: o* k#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, ^/ `# j* e2 g4 ~. Y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 G. L. b7 g+ M! |1 i9 \#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 I; }$ A8 C! |/ i/ d/ L$ A2 K. U9 v. S7 ?8 Z" g
/* assign the tl som board LED-GPIOs*/6 n% @: p5 I' H- F/ K; |
static const short da850_evm_tl_user_led_pins[] = {
6 T: S: l: _# ^, b$ j /* These pins are definition at <mach/mux.h> file */' O8 z: o r( s. K3 }7 e" f+ m
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
: v& H% L8 I: P, @6 l -1
& h% ]/ ^9 N# e. U+ K: Y! L};
. ?* ~( y4 j" x; _, T
- H) ^( I: \3 }: {1 Pstatic struct gpio_led da850_evm_tl_leds[] = {
4 k+ A- X; \& A/ y {$ p! M) ~& X7 e4 q. r
.active_low = 0,4 \6 Z9 V) d" O
.gpio = DA850_USER_LED0,3 X. _) [/ r+ l; e9 C9 f9 ~7 J
.name = "user_led0",
$ R+ ?. p7 O3 Z! o# |& Q5 i/ c) B .default_trigger = "default-on",
* ~" l" C3 n$ Q8 O! o },
2 u; D: ?( O- k1 F0 v {! V- u3 `5 _; @' l: f4 t7 }
.active_low = 0,
8 n) N$ U% M- s( G) R3 k, k0 b .gpio = DA850_USER_LED1,
) c3 l N/ ~# ~2 ?, \5 ~! v .name = "user_led1",+ q) y5 w0 N5 o P4 l) r/ T5 s
.default_trigger = "default-on",; @& B* Q8 H" C, G; R! K* X4 a- U
},
! F5 p1 ~: X; D* v6 G! o. n {; e y! }$ U. a1 I, V6 t* Q
.active_low = 0,
9 E& [" W. ?8 N- Y/ R5 C" b% h .gpio = DA850_USER_LED2,3 g2 D+ R2 {/ A
.name = "user_led2",& `) N* y7 t- M- X, s3 s% A
.default_trigger = "default-on",1 _9 X' L$ X/ K! V: y2 ^( j
},
9 T0 b+ I9 U, N. n {% a+ n. F" |: v1 D9 u+ U' x
.active_low = 0,6 Z, K# h3 z0 j
.gpio = DA850_USER_LED3,& e) F' K1 T) Y" Q
.name = "user_led3",
0 B) V8 m( R- J3 a .default_trigger = "default-on",
' H5 L+ O9 H1 x- G7 T d },
0 b: X1 g' s& U# z2 W};
1 b; P# s& s# N8 J
. H1 s a4 B0 W; B% ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( M/ e0 a: K8 E9 [7 X .leds = da850_evm_tl_leds,$ ~5 ]& a2 r- o; X- u+ |+ \
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
2 F3 w* z% }4 b0 I0 b) ?};
* M+ p$ l* o& q0 @3 C" b
2 ^3 U8 r% ?- A' F2 lstatic void led_dev_release(struct device *dev)
) n' P3 W) \$ l! u{# j8 q8 Q2 n! l6 L! g. d5 s2 @
};8 o6 M) l& i. ]( m9 p. T
% O) P* C/ {2 Z6 Xstatic struct platform_device da850_evm_tl_leds_device = {6 R/ ~9 u+ d4 F+ ~4 n8 k7 x
.name = "leds-gpio",6 C9 l0 ^, o. Y
.id = 1,
8 Q0 g7 d3 B% T, y, X5 |& \; v .dev = {
. e: S. y; V ~1 j* C/ O .platform_data = &da850_evm_tl_leds_pdata,
7 V4 u8 G( ~2 l* x7 G k0 x .release = led_dev_release,& M* q) ^. ^4 @4 V2 k3 I8 T4 f! B
}
# K+ R2 t% Y$ t* A$ W+ A};
8 t: G6 w% O2 T) \+ T2 Y( Q. W& E0 [: |' o" |
static int __init led_platform_init(void) K5 k; ^* D5 y
{ D& ?3 z! n9 D3 V/ l
int ret; A$ r# [$ C4 M1 `7 `$ K7 j
#if 0
# {( G" t2 m; u: j ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# G# ~% A2 U- Z4 ~$ A if (ret)+ s6 p( c6 K a$ g1 ^+ l0 Y
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 x% ^3 b" v- y8 v9 z8 e
"%d\n", ret);
9 H2 i N" \; Q5 X#endif
4 L/ ?' b1 y, G8 e' D- g# g8 O( c ret = platform_device_register(&da850_evm_tl_leds_device);
- R1 t) N0 ~/ e6 k( \1 }- H" g5 { if (ret)7 d& r9 p8 E+ K( E* T5 H0 X
pr_warning("Could not register som GPIO expander LEDS");% K, m: I' a: }, ?2 x7 M0 L
else. l, l2 d6 g+ K/ z
printk(KERN_INFO "LED register sucessful!\n");
1 C) Q& o; |3 v5 q6 A: j3 l" |1 [9 N% x: e, _7 z, k2 o2 ?4 Z
return ret;
! @4 W' @* ?: B$ s7 D6 D}6 p7 Z' k9 p( `. r$ V8 F7 J/ G: q# ]" l
2 k* v/ g! Y3 N0 i( V
static void __exit led_platform_exit(void)6 w7 } b9 T4 g- i Q6 [
{
0 M9 ~. T7 k3 ]. O platform_device_unregister(&da850_evm_tl_leds_device);3 p/ }8 h- U& n* u5 M
, J+ g7 S' C) P ` printk(KERN_INFO "LED unregister!\n");. n, M! _# O5 J8 z7 ]/ [
}- C2 i: P4 t ~
2 i# r2 s1 O6 m/ Cmodule_init(led_platform_init);) G @- F$ s6 j+ T" x5 _6 ]
module_exit(led_platform_exit);3 j2 s& U9 h8 o
' ]9 [% q+ a5 }) T3 J: xMODULE_DESCRIPTION("Led platform driver");6 x' Y/ L& P$ V, A, W& K& `
MODULE_AUTHOR("Tronlong");
& L+ V: X/ T) [* W4 ? N xMODULE_LICENSE("GPL");
* }) [& r/ ~# u4 `! d6 e
6 Q, }% ^- f. r5 ~ |
|