|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 [- N/ [+ R( j1 I" C, f
#include <linux/init.h>& I" N' I0 o9 o, D$ W' _9 I: }8 h3 ?" k
#include <linux/module.h>7 J$ }9 z- i& R8 I6 h$ L
#include <linux/kernel.h>. q8 F3 ]- l O6 l6 {
#include <linux/types.h>
6 u! l9 L+ f. o; F#include <linux/gpio.h>
0 x8 f; l7 L% M8 s/ _2 ~7 m#include <linux/leds.h>
5 `5 n! t Z& `#include <linux/platform_device.h>
1 J6 ~4 j! t$ Q% H+ ^1 K- e/ X
1 M8 m" K- i1 e9 ~/ [#include <asm/mach-types.h>5 J3 u+ e. N2 @# h9 b: V
#include <asm/mach/arch.h>
9 z) b+ t( I- J- H* {( e#include <mach/da8xx.h>
2 `3 g' |! w' _3 l; e, `' }$ u7 \6 z#include <mach/mux.h>
" ?3 L7 ~$ J' f f2 b$ t {! [* S7 c" M$ }* Q6 _* x# g0 a
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)# J0 Q9 e' w+ e2 G6 a$ Q
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) i* I, x% M, I/ j8 N9 o8 V#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
0 m2 p! y- l9 p! j# O#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 O0 ?: d& ~) c' _1 l4 N0 b4 p6 U+ m/ h T7 n) b( k+ l& ] C
/* assign the tl som board LED-GPIOs*/
+ S- }% Q3 ^* j0 \: J! ^$ rstatic const short da850_evm_tl_user_led_pins[] = {1 X/ C6 d) P# T/ v0 x2 u) r# e+ _
/* These pins are definition at <mach/mux.h> file */
/ T: j; S( r* m3 l DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 b3 U, `) B+ n0 H- w1 A% a -1' T* D* U0 {2 }- f3 `. i, A
};, D- l* x: I _$ l# H6 l) @; b3 R2 L
1 C' V) a0 l$ Q8 w) M( }
static struct gpio_led da850_evm_tl_leds[] = {4 q; B, R- M9 p" H; J& P
{
! U% D2 v* B5 ^" F .active_low = 0,. u; }* B2 \8 d1 N( a4 }
.gpio = DA850_USER_LED0,
$ z x0 m* g: a7 e3 |& b7 O" _ .name = "user_led0",: ^4 ~& \' p* m& A
.default_trigger = "default-on",
7 q! \$ J' M% G, z& @; H },
& u J7 |) n; w6 ] {
" r" D1 }, v. m- X .active_low = 0,
( ^; t1 A6 ]) _ .gpio = DA850_USER_LED1,
8 V7 u6 l; ]( ^) ~0 { .name = "user_led1",8 o. J% Y8 O' B
.default_trigger = "default-on",7 m# h1 T& @4 P# @5 W
},- ]+ j3 g( d$ A6 B7 @
{0 D5 C2 K0 s& [7 w5 m0 A1 Y& h b A; j
.active_low = 0,- S) y+ K- I5 z: a
.gpio = DA850_USER_LED2,' v5 h2 N7 H5 ^
.name = "user_led2",/ D4 M! h3 Z; F7 i
.default_trigger = "default-on",
" F0 Q% @$ k" G5 V$ t/ {) K5 N# e4 M },+ O q" T6 j0 ?- [5 f; G" f
{
; S: h# `# ?9 A4 B$ {* v! C .active_low = 0,
1 o6 l [! @% m .gpio = DA850_USER_LED3,
' d! ` y; T: \' z- R .name = "user_led3",5 @, r2 j2 R+ Z) M' w0 z! n _: G
.default_trigger = "default-on",4 s' g( D3 c, o
},1 O7 R# T4 M+ g8 M4 C P
};
* ?, g* j" B0 W- d3 e, U' P
( _& j# j" @9 b- _static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {- Z6 Y# m3 p3 l% y; y
.leds = da850_evm_tl_leds,
* t; O9 \3 Y9 \/ L6 ?0 G2 @/ V* v: I .num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ T$ r& E2 ~; Z& Y' o
};, @2 }. M- N! e& h8 N* ?0 M: I
& N0 ~/ _% \( L$ K7 D$ Bstatic void led_dev_release(struct device *dev): n. k5 m( d9 m! B
{
8 x5 b) W w+ l6 H6 ~" P, f};" o/ Y! |& r3 Q, N6 P& z
. j# R7 s8 @/ N. y: Z6 B' Kstatic struct platform_device da850_evm_tl_leds_device = {1 w& ~1 Y. A0 V: C
.name = "leds-gpio",2 Y4 z2 Z# P+ T% T
.id = 1,; D2 G1 d; ^* \' J6 N
.dev = {
% ]) s5 }- L; N# q4 v5 O4 l x& C/ c& m .platform_data = &da850_evm_tl_leds_pdata,
! m& O8 j7 V0 K2 c3 z" G0 a+ C .release = led_dev_release,
* ^( A9 I2 Q8 r% ]! F+ G9 `# F5 C }4 {0 Y! u* N2 E$ p% I4 r* v- W0 o X
}; u4 Y5 }. `. Z( \ m, G/ ]
, @1 n* s8 t8 [* S2 kstatic int __init led_platform_init(void)( ~3 ~" U/ y: N9 ?- ~
{
1 p, _; H" o# I/ e' m) e% ~ int ret;. d- V! S8 j# \% `0 u; s
#if 0
6 `% [' J6 J+ q' z& ~$ | ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% M4 ]: G: O7 r- f
if (ret)
" e2 p3 C) B/ _ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 D/ I2 Q3 f) o9 @0 C
"%d\n", ret);# A" e3 |- K5 X2 \
#endif
; j( @# E; L$ v+ k4 e! h5 Q ret = platform_device_register(&da850_evm_tl_leds_device);$ y5 x- q8 G# P$ e; [/ [
if (ret)
, q5 z- R$ O- H" O8 T) [1 H( M pr_warning("Could not register som GPIO expander LEDS");! f4 h6 X4 ` N/ a+ S3 ?# T8 B
else* l1 Y0 C- {! J3 X d4 @, v
printk(KERN_INFO "LED register sucessful!\n");
2 E+ @7 d' o" f( ^5 V9 R4 L4 c3 m: t1 Z e
return ret;0 ~* q# r' ?0 {) x* q; C3 i
}3 Y. N' v1 U1 y5 |
1 D/ e* n! ?0 _( U: Jstatic void __exit led_platform_exit(void) p. Q" p' U, l, K, I
{
4 W; j. D7 Y$ T3 E" C- f* z. d* V6 t platform_device_unregister(&da850_evm_tl_leds_device);
. Y" h$ ` a" {/ T+ L; r6 L) X O% c' M
printk(KERN_INFO "LED unregister!\n"); [, c% c$ J3 G
}- }& x& b& k d6 }- w* I
8 {/ H3 O# h& ~0 A/ ]module_init(led_platform_init);
) U9 k" ]& n! t" }) Dmodule_exit(led_platform_exit);/ v4 D9 \. i7 [! r
# h: t2 K) S4 E' s
MODULE_DESCRIPTION("Led platform driver");
1 u$ I+ @2 ~% O+ kMODULE_AUTHOR("Tronlong");
" G2 P9 R/ ~, Z3 ?9 \" WMODULE_LICENSE("GPL");4 u5 `7 n1 h" Z- E
, d) Q. G6 g+ `# k$ W8 R |
|