|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; \ O& P! Z# p# ?0 @5 v#include <linux/init.h>6 n1 Y- P* A, W$ j4 Y
#include <linux/module.h>
( u8 D; W# Z' q, F% u$ o#include <linux/kernel.h>7 k" p/ N8 I* d) ], e v
#include <linux/types.h>% }3 h; f) V" F9 x9 X l+ z
#include <linux/gpio.h>
5 R, k% v# K* ^0 c* i3 z#include <linux/leds.h>
$ b' H8 D! H) k' v% }. g4 q#include <linux/platform_device.h>
) F+ |+ ]4 P% M" `$ C+ P7 B; d- R- `; J/ c' u7 r
#include <asm/mach-types.h>) h) y8 C' k$ ?' o6 [; T( q
#include <asm/mach/arch.h>/ F1 M6 T, p, \
#include <mach/da8xx.h>
, N0 q6 c$ q# R' ~3 p. ~ }8 K#include <mach/mux.h>
- o5 A* Z! \8 K% F$ v& f5 n k9 r
1 C: ~7 z4 B3 u, W#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
" H8 c) [# ^ K& ]0 R5 w: ~#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) @! v$ H: S% ~, E
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" e% L, ^* a% W1 v9 z; r0 A1 N! K#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 h4 p& o9 w! ?
- ?* L3 c Y) z" r) |! Y, Q: F/* assign the tl som board LED-GPIOs*/
4 s5 R0 H" z7 ?# @static const short da850_evm_tl_user_led_pins[] = {
& E! O& ]. u& L! }9 y /* These pins are definition at <mach/mux.h> file */
( B9 j6 |7 y$ |: `9 t DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" K* q. u) ~' B; ?' L) V z: o -1. ~9 \% ~ i/ O. Q& |0 e
};
" c5 V% u# L* D2 H, D0 _7 V. Y8 s) L9 n) h; g
static struct gpio_led da850_evm_tl_leds[] = {8 U, L+ X O$ J! X; L
{" j- ]# c/ d' h* j! |' l E% m
.active_low = 0,
5 b# K2 W) O5 V .gpio = DA850_USER_LED0,
' K" I2 M1 t' T5 r$ U& k .name = "user_led0",
6 D5 \; R! \! J* y .default_trigger = "default-on",' ` G4 l* w6 [: T
},
) A- j% G2 R/ Q% r' ^5 Q {
0 g d; x( }4 { .active_low = 0,5 l# w5 M0 r5 K! r0 F% z
.gpio = DA850_USER_LED1,
$ \* z1 y' {3 t9 B0 g .name = "user_led1",
: e; E: }0 ?/ i2 r3 ~ .default_trigger = "default-on",
7 n+ U& f( R& x },
3 G2 N3 f% K% S3 K% v$ i8 o {
[9 v4 c5 W7 t5 Y8 S .active_low = 0,. e& n& W1 n$ D3 ^, s; H* J7 K& p9 j8 J
.gpio = DA850_USER_LED2,! G7 m! Z& R' H- E; s }. L4 |+ g
.name = "user_led2",
) o( _; F5 Y$ z* b: { .default_trigger = "default-on",
( P% i- S+ [* B) _) k },* w/ E5 [5 r3 r S: h$ G8 s
{1 i: M0 K" u: t, `$ G" N
.active_low = 0,
2 d$ f5 ~" P5 U+ t .gpio = DA850_USER_LED3,
* A5 P( B9 V7 g0 X; G .name = "user_led3",
' u2 \. d- [# T, ? .default_trigger = "default-on",
, `0 i% Q; r' C9 ]: w( w },1 j# U! K& v' T* Q/ \/ n+ \ ^4 q
};
- r9 x# }! {8 Q4 f
( x0 H/ K W& G& ^6 M3 ~static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 L7 ^# W$ b* e" }" h& J
.leds = da850_evm_tl_leds,/ h: z6 o7 {7 ~! z# c- {
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),% X4 W/ S& U: H' Q! [- Y ?
};; i+ k M% ?. W5 f/ ]! k
) ~/ p$ W6 ?' t* o7 zstatic void led_dev_release(struct device *dev)
- @0 u q/ V0 \7 ]4 f" w. d2 o7 F+ q% s{$ J% I; Q0 F% w! |2 \
};
( M8 I- x( W6 c* G8 `1 J7 \1 b, ^% V* Z4 o8 q, r
static struct platform_device da850_evm_tl_leds_device = {! l/ S5 {: J0 a% C( v5 h4 X! X' z
.name = "leds-gpio",7 Y5 ]7 Q2 b( s" _9 r. D6 Y
.id = 1,5 ]4 n4 V. A8 y$ G; M& M- g7 f
.dev = { D8 S* e/ ^: L. k7 n
.platform_data = &da850_evm_tl_leds_pdata,, K3 _( y" C- G9 W
.release = led_dev_release,8 _$ j8 F2 h6 W M+ Z {/ B! B
}7 ]1 B- w5 o4 v% ` v% X3 N6 S
};
: i. I$ Y3 _/ o' O8 s
9 [. E0 B: _2 \6 W( q4 T- lstatic int __init led_platform_init(void)) `# t9 g/ o; \: F2 c+ b
{: q/ U! M) Z/ L; ?+ N: B; X0 j
int ret;
% l F* Q" X% {, x8 I2 |; F4 q#if 0' o7 L( L1 g& ]( Q" l
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" }( T% |. O7 C
if (ret)4 X" l, L: D9 g, G- ?: V
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& y6 E- \, Y b2 I "%d\n", ret);
1 a3 T+ v( H6 T$ Y5 [5 k5 i z#endif k* y% |; N& s7 A% B3 U' ^
ret = platform_device_register(&da850_evm_tl_leds_device);1 w- [9 R9 X Y, w
if (ret)
* l2 R- b. G$ s" M pr_warning("Could not register som GPIO expander LEDS");" O8 S8 U8 z: |! a+ y. M' a u8 _6 J3 X
else6 [ I* F1 J, ~2 z+ W5 X
printk(KERN_INFO "LED register sucessful!\n");
9 h i' R- f! a5 C
" y; W- {* s8 {& ^% [ return ret;7 a8 ~5 C: `# _6 f% O, h/ G7 k: O* d# G
}. ]$ `! E& b9 O( I
M( P4 T/ i s/ j) g8 h6 ?
static void __exit led_platform_exit(void)
# p E* @& M( J1 x9 M; Q! P/ Q" A{$ {* A7 A2 {: d) s5 R/ m
platform_device_unregister(&da850_evm_tl_leds_device);
- o$ L) L# g% x7 l9 e1 z0 G, ]
* U% |+ ?' Z" J6 L) T printk(KERN_INFO "LED unregister!\n");3 }* N( z, O* o" l
}( @1 q- V( V5 h
; w, n) i' O+ s% e
module_init(led_platform_init);0 |0 ~) Z0 O1 q6 t" F1 `* M9 T! V8 |/ r
module_exit(led_platform_exit);& F5 t" p: a) [7 ]3 f
- l& k# ^/ p& k& o; O/ d- O0 G. @MODULE_DESCRIPTION("Led platform driver"); {$ a5 F3 I* b
MODULE_AUTHOR("Tronlong");% d) v9 [- I5 }" U% S
MODULE_LICENSE("GPL");
2 ~4 c( a3 O& ^6 o; z. d7 j; M* ^$ t* K" s! p' v; t) Q. D9 W
|
|