|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 [ V7 W6 G; C+ f; Z
#include <linux/init.h>
9 ^; G) P! B' M# V/ D#include <linux/module.h>7 p: [* F! s- d* G
#include <linux/kernel.h>; F1 w0 G. Z% C
#include <linux/types.h>
, D$ }9 }( S/ k `9 x3 N9 N. d#include <linux/gpio.h>
4 }6 E6 c* g! _1 b9 v6 M( u#include <linux/leds.h>& @9 [$ [: {& u$ Z) K3 X0 A
#include <linux/platform_device.h>
4 D. s; g) I) r) Y) R/ h* V6 j' | k8 P1 c
#include <asm/mach-types.h>
0 F7 k2 n% T# Q8 U2 `#include <asm/mach/arch.h>
. g$ |' f& T# H6 y2 h8 G" g; z#include <mach/da8xx.h>5 y& h3 u- C+ e/ z1 E
#include <mach/mux.h>
+ @; T8 B* d, T, t9 Z9 q; m7 b$ s) k0 j( E
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 I% y" S Z) b8 _" @5 p
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5). o# Z7 K; Q" y6 H
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ F4 l* q3 l& m2 J5 M5 l- y#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)% ]# N/ A& u9 ?8 w
) p+ G2 O* }( P5 i/* assign the tl som board LED-GPIOs*/
( o" \$ m( C; r6 q0 l Gstatic const short da850_evm_tl_user_led_pins[] = {: _$ v, m. N: A) }0 @
/* These pins are definition at <mach/mux.h> file */
+ V* R$ I" D" G4 @9 Y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ v2 C' K8 a1 y+ K4 W/ @
-1& \' [/ k. t: t9 c# V c+ c
};. g3 _. o8 f. a" U5 g0 N
. W6 K$ X' h9 F( d6 w; _/ v6 { N8 @static struct gpio_led da850_evm_tl_leds[] = {
n7 T0 V4 U8 g& z2 _ {& V$ p" q: X0 C5 t8 ~3 k# X
.active_low = 0,& P5 w, y' L# P! r# S
.gpio = DA850_USER_LED0,
5 J3 F: B; e1 h0 i/ \( ] .name = "user_led0",7 u5 e, D1 U+ Z
.default_trigger = "default-on",
9 M: A+ v. p3 E },1 f7 z* @& U/ D! P* R$ T( _; f
{4 l9 y" ]/ f$ j. ^) t
.active_low = 0,
- o9 r- h& y4 T' y4 k2 C( G+ A .gpio = DA850_USER_LED1,/ W3 I9 X; C/ s Y4 e6 ?" f
.name = "user_led1"," Z7 }( R1 v: a
.default_trigger = "default-on",
9 B* Z t! F, D: i$ }! j2 s }, n9 F0 u$ i+ m: f& e
{: D" J+ P- J0 u4 S% T
.active_low = 0,
& m' ]8 {7 v7 e .gpio = DA850_USER_LED2,
) A7 b- ?/ W; I( K .name = "user_led2",
. h9 v- }7 `- q% T+ d .default_trigger = "default-on",4 Z6 Z* {8 _7 x( X" q
}, L' B O: O* f
{, w$ v/ G1 l: G% G# K
.active_low = 0,
' X0 J! \0 V5 w, p6 _ .gpio = DA850_USER_LED3,4 |% }- y7 O: a0 g9 I- J* R7 U, p! `& D- I
.name = "user_led3",
3 c% L! Z( u, H1 z .default_trigger = "default-on",# |+ ~* X/ _2 {, I
},
. n1 W- W# p2 _- O4 m) M+ v};
2 n4 Y" F% x7 y# G$ a ?( v) D& N
) ]! v8 }/ q2 G% r+ lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 s+ E. G- s4 |5 z- f, V .leds = da850_evm_tl_leds,
# k) g; Y u% V .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& _$ X% ?/ j, F* c# U};8 `; A5 g( n7 N0 ^
( v9 X0 Q" d/ i8 ~- d# zstatic void led_dev_release(struct device *dev)
6 y3 }2 I4 ~+ T5 @{
/ S' C& f3 I6 }4 [2 Q};
# u# L% ^; ~: Y0 i( X$ }' \' o! \$ b( [$ ~' n
static struct platform_device da850_evm_tl_leds_device = {7 |3 Y7 V; s( A' y$ j
.name = "leds-gpio",
, n( T% y, E! f( a* e .id = 1,
: x) ` R1 W, \+ B, d9 F) @0 r. ~ .dev = {0 y& ]! p( P4 N& w: f9 ?
.platform_data = &da850_evm_tl_leds_pdata,& d! X! t+ ^9 K4 p/ v% f P. L) j
.release = led_dev_release,2 }7 p) U2 W: b. k6 e8 C5 `
}
/ T7 K n) a7 K0 Y' A( h};
. g( R+ w) Q1 p- ?! M4 r, M) k B K
* {' a2 q/ q' @2 ~7 V# u" cstatic int __init led_platform_init(void)
h) m* {5 f# F& H{
% K1 I7 q9 s2 T/ ?' X+ V int ret;
4 x% M; r2 P$ I% B#if 0
5 V% m. R% H3 ~2 @1 @" {# q ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 k! N% Q: z" l2 W" ?' o: P0 I if (ret)
: i% [( ~* k' K7 S' ~9 k! k% w# i) g pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# E+ n7 h, z: ~
"%d\n", ret);6 _5 t0 H5 a- J" o. G8 x
#endif
1 \- c' v1 @; [0 _3 i ret = platform_device_register(&da850_evm_tl_leds_device);
4 z* l. A- J' B4 O if (ret)
+ ^$ H2 O3 I$ E i* T( J pr_warning("Could not register som GPIO expander LEDS");
+ N9 k1 b2 m5 {7 ^ else9 W+ N `; g; M% q8 k
printk(KERN_INFO "LED register sucessful!\n");
- r$ ]& t8 W: W5 u& W) s$ I# x. C* [8 }
return ret;# F, l$ I$ l0 \% z
}% N4 o3 V2 j, V# O- D" W
7 ?% f7 d3 c& M% jstatic void __exit led_platform_exit(void)( r2 J8 ~/ q, R; K) v
{4 ^! K6 O, U9 Q6 a/ Y
platform_device_unregister(&da850_evm_tl_leds_device);# i# f( o3 n2 O4 h7 |/ U
2 o& S$ _9 H7 A9 r
printk(KERN_INFO "LED unregister!\n");6 o( p# u& R; k- D9 ]% X4 s9 T) p
}! A2 k3 }# U! J3 @/ X& g, }
0 m, A# m' \5 _( l3 }9 h2 B+ h! I
module_init(led_platform_init); e8 x/ ~* x4 B/ `$ E* D
module_exit(led_platform_exit);4 j4 G9 R! d$ b# R! c
4 H# C, N1 L% I( k/ S
MODULE_DESCRIPTION("Led platform driver");* {% n+ j( y% J; z- O
MODULE_AUTHOR("Tronlong");. f. `, \5 R# a- j! j8 ?4 S
MODULE_LICENSE("GPL");! d& \ C! k- h0 m# P
# M6 m1 J2 b1 f a6 [) r m; w
|
|