|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 e/ c! T. ?! P# `#include <linux/init.h>$ ^( \- ^/ o% j+ ?$ o
#include <linux/module.h>
& ^& J6 v0 H% f2 a#include <linux/kernel.h>
7 F! B, P+ U+ {' W) n#include <linux/types.h>
* W3 k+ Y3 a7 T* a& p7 e" O#include <linux/gpio.h>, _# y! T; N' }' w% N1 ~
#include <linux/leds.h>0 ~' r$ O. [- _
#include <linux/platform_device.h>
7 M8 g) p b/ m$ p; o; ]
( ]0 X5 F% K% O M3 }. X u( G#include <asm/mach-types.h>& t3 R! c7 N1 x3 X- s
#include <asm/mach/arch.h>
5 S5 u$ ~6 V. w! |- y3 I' f& ?#include <mach/da8xx.h>
3 ^8 u: W/ c# R! E#include <mach/mux.h>
1 H5 l6 f+ n+ F k7 }. y: ^% l, T' _/ U# _3 |
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0), P8 Q, T) `+ u' S% o, x
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 T# @( T2 z" {7 k4 o#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) ^1 C- }; N9 X9 _& F' h9 k9 n
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 _8 V1 Z+ e& X" B; z+ I3 T6 Q# x4 L% z
/* assign the tl som board LED-GPIOs*/" O, H$ _3 C2 m% Q
static const short da850_evm_tl_user_led_pins[] = {7 _; J, Y4 D0 v$ `+ g) P; {2 t
/* These pins are definition at <mach/mux.h> file */0 t3 j# B$ F9 _# K, D
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ ^6 x5 p9 w7 R9 ?5 ~# b
-1
6 y& W, l" R/ c7 }. {};9 ^! ]5 j7 @2 V: Y5 P- n
: L8 C) @/ K* x; i+ cstatic struct gpio_led da850_evm_tl_leds[] = {
! F$ l0 d$ E) R+ H1 T V8 R( m {
. r3 x- d$ E/ ~; m: [ .active_low = 0,( x3 I2 i* I6 [/ y
.gpio = DA850_USER_LED0,
. v- ]* ] F1 H9 P .name = "user_led0",
8 f& c" P6 _; a7 D) M8 U7 a+ d) ? .default_trigger = "default-on",
e/ T+ K6 t6 T9 T },$ V4 J) ~ w& b8 R- J* Q, k! t
{1 ^: R( @6 T/ h
.active_low = 0,
' t, ~1 |; E0 A2 B- L+ A7 s) r6 r .gpio = DA850_USER_LED1,
0 B* [' Q9 H( ?$ L% y .name = "user_led1",4 r/ e7 y# a# y v% ^) Y" y7 F
.default_trigger = "default-on",, ~" g2 L# m5 f* J6 y+ m( g
},& Z) h0 E8 ^" M# V3 L
{
+ C% Z; E) f" i2 D& H/ g) x" z .active_low = 0," i8 w/ P6 V+ H/ o% `
.gpio = DA850_USER_LED2,
8 Q- k; v. x: B i .name = "user_led2",* B) t, @# y3 w1 Q; U1 K) D6 Q4 a% T
.default_trigger = "default-on",0 G/ C5 R# |8 w) b' G# b
},6 I) S* c D' B
{# y+ s* H6 U6 o: b! I- |# K! {
.active_low = 0,3 l. W0 D- p3 H) S- ~8 a. K
.gpio = DA850_USER_LED3,
" z! i% g g: V: J- M9 ~; [ .name = "user_led3",' u+ X% I# g2 w
.default_trigger = "default-on",
' `# l b0 @" @; N },7 F& ? V: U% T: ?6 M# _
};" F2 C, f) n2 X/ t' m6 o
9 ^& I. F+ A8 Y' L ]
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" K+ s' I# X7 K E0 ? .leds = da850_evm_tl_leds,- v! z0 M( |8 p+ }
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 d- e: r* u$ @: D( R% ]
};
4 G' r! u- F; @5 A. h" w% [: z3 `" Z9 S/ y" U: c
static void led_dev_release(struct device *dev)
6 `9 X" ^ B$ U. Z x9 ]{
5 W" X& _+ `9 f8 Q$ s};! M. H8 K5 J7 ?; N; p
) M8 F% B% `4 P5 v3 s6 G! N* A& Qstatic struct platform_device da850_evm_tl_leds_device = {; \2 q, C- P7 j
.name = "leds-gpio",8 U5 L$ R4 P. P
.id = 1,( G$ h" c* T% \6 h" [
.dev = {
' } H/ C0 t% H$ |0 v# Z .platform_data = &da850_evm_tl_leds_pdata,
- ]* M6 Q' _& I* H' n# c( O .release = led_dev_release,
% x$ D$ _- E5 t7 z }
# s: \- N W- E: z6 ^};
) m; d1 G5 r- n) ^. p: ]8 Q+ z4 E }' S) u+ K( F
static int __init led_platform_init(void)/ |& ~" `* N- I! Q+ ]1 P
{5 F4 O( T* I V! R. m1 R: u Y* ]- Q% r2 x
int ret;3 k7 v4 t/ ?, s/ V$ K. w
#if 0* i) u, D& c0 d9 Y+ }
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 h6 y6 b2 y1 C. E2 y' p) S7 z& c: R' T
if (ret)6 e2 H6 l7 S& j$ B+ ?
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% E5 V+ y$ ?$ u6 s "%d\n", ret);
: r6 U9 P% r: Q* L. J#endif
9 E" J' E; L/ R( n6 Y) V ret = platform_device_register(&da850_evm_tl_leds_device);
E8 J7 G7 }4 }; [# J) }* L if (ret)
& ]9 k1 x: f/ s$ l+ { pr_warning("Could not register som GPIO expander LEDS");
& h) P' I' {! L2 }' K; b$ D else
5 W5 } @( G% q# N* c5 r) } printk(KERN_INFO "LED register sucessful!\n");$ R. B" i: U: q' C+ H# Y5 X: y
( x, F: O, |, d! ~# H$ U return ret;
( f( E |: [1 B4 u( @2 D}
6 K; _2 `( `* d8 l5 T6 W8 a) w: d. b: b8 M6 d
static void __exit led_platform_exit(void)
2 y0 c+ |3 ?) J; v3 V2 c{0 o( _0 v3 M" M
platform_device_unregister(&da850_evm_tl_leds_device); ?5 k. H% L6 A8 W
7 E+ b; ^8 f/ J# t7 y
printk(KERN_INFO "LED unregister!\n");$ F' o. Y" c, T" ^
} `0 o! K5 T& C% ^: f# v- Y9 z
" e& ]3 S! [0 c$ G. [
module_init(led_platform_init);4 z) j* e5 f# s3 s+ t# `( |
module_exit(led_platform_exit);" e4 i* R: B6 M1 L5 U
/ q2 z9 `$ e. y" g, i7 y
MODULE_DESCRIPTION("Led platform driver");
, p7 p% l% ?# DMODULE_AUTHOR("Tronlong");
B Q" V7 g6 {1 Y rMODULE_LICENSE("GPL");
0 x7 p% D3 W; n1 `, f6 E; v/ K
$ U. Y/ Q3 e2 t5 g, {, \5 `% T! ?$ o |
|