|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 U% s3 F& O7 q* X! C% a#include <linux/init.h># q6 J/ l/ a, k$ i2 s: I
#include <linux/module.h>% d n: U _2 u' i' Z- n9 j; i
#include <linux/kernel.h>6 {0 O, |) z, }- v- Q3 h
#include <linux/types.h>' P& s; Y0 y1 ~9 ]5 |0 F0 ?
#include <linux/gpio.h>5 e, A# d- s' a$ a
#include <linux/leds.h>
# F/ i' \& d9 {( D0 w( R#include <linux/platform_device.h>4 F. u9 Z; W* T# }/ @
3 ~' O! Q' {; }9 m#include <asm/mach-types.h>
1 t) ~+ ]* z; m, ~#include <asm/mach/arch.h>8 d2 N. Z" u4 j8 V
#include <mach/da8xx.h>
# B/ W) Q$ s& P( N0 L0 C( t#include <mach/mux.h>
% r8 B: {/ d# T! z& x
9 a6 y5 x0 R: I$ V! u#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- @3 A) g, F6 ]. r" I5 U4 S5 p; D1 e& L
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 _/ y/ Y7 c! q% T" o
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" s1 o% j+ I) M- d: i#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% A) J" M) \+ u b) ?" ?5 D9 K) m. n3 |& F& {
/* assign the tl som board LED-GPIOs*/0 ~" X8 R+ b( q
static const short da850_evm_tl_user_led_pins[] = {
( k9 c5 P/ y! u# D3 k /* These pins are definition at <mach/mux.h> file */* b) G0 B' P& _# @
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) b) M% p- r5 ~6 C. z! Z$ u -1; R \1 w% g+ `* D5 {3 n; s7 c; L
};: u+ }9 l# w3 H G" j. M( n! r
% W ^6 `/ l' _4 kstatic struct gpio_led da850_evm_tl_leds[] = {1 a A6 x u c3 G2 p2 A, ]
{% ]8 N/ l# X7 p; n: b3 C
.active_low = 0,
+ F6 b6 N3 z& z& N0 }+ o0 f .gpio = DA850_USER_LED0,
) B) u8 G5 N7 R7 c7 Q6 L. p; s .name = "user_led0",
) I7 `3 M$ R% x& Q2 G8 o3 O/ ^8 P .default_trigger = "default-on",: b w# a' W+ t f0 Q* H2 I
},
$ S: s5 X. s; S {
( f! g' T- J5 @, `- n .active_low = 0,4 ~6 ]( f! P T! k4 `+ o! q
.gpio = DA850_USER_LED1,
5 f. q% |& n* b1 E .name = "user_led1",/ k7 J H$ @' }* `. G7 D
.default_trigger = "default-on",
3 P& k5 R+ D" W; [) U+ q2 N/ } },
' c) ~& b3 ?% X! W* o' @0 m- o+ B {' {( `3 ~/ e+ o9 S& L
.active_low = 0,2 J6 g/ q( F7 a6 I* ] c. Q# w
.gpio = DA850_USER_LED2,
* H8 `7 m, q% F: Z .name = "user_led2",* O& i8 u3 s7 |' C
.default_trigger = "default-on",
9 a* k% _) _' x: W* O. J) @! ~ },4 n S' T* Q" @: M+ O
{
( l l7 y; Q- F4 w$ \ H4 j .active_low = 0,9 _2 s8 y, m# T; D" U9 s& _
.gpio = DA850_USER_LED3,8 V" e# J! L. {, ]1 ~
.name = "user_led3",
& P3 c* v, r1 m0 _ .default_trigger = "default-on",
h' k/ v+ w# R! Z& E) u },
, a) k1 k! d) a! a' q( x};
: ?2 S) |% Y) k* s' V4 q! ]: A7 r) @ R( \1 }: ^
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( ]! D# n* Y5 \, | .leds = da850_evm_tl_leds,
" f, E" a( c2 }, T! |+ |: ^8 I& x .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 f) C# E+ V1 j; \};7 i+ f% ^" F8 m5 K
- @- L9 H3 ~7 ?/ t
static void led_dev_release(struct device *dev); j* r, D; m3 g
{: f9 N1 \1 P8 p; W1 R" t
}; M; d- W4 }. K$ L$ g; o r& X
! i6 ^# g7 g+ Y0 B+ a$ [
static struct platform_device da850_evm_tl_leds_device = {- j% f: \& b1 h& Y, c/ V, B
.name = "leds-gpio",
( R! z0 ]# J' {& H6 V9 k .id = 1,' N& A) J+ V5 W3 V
.dev = {
8 t" c- b+ q0 q4 t5 _+ ^: @3 B% z .platform_data = &da850_evm_tl_leds_pdata,5 o$ N7 Z, ]6 N* S
.release = led_dev_release,
& N7 r; J8 x7 s. N }
, z7 T# W! w' i5 w};
' `; B8 a$ T2 s+ d$ B. _ k
: f7 H$ u# j% q7 O5 x# E9 astatic int __init led_platform_init(void)
# P! B/ g, j4 q' m: f{
& c: }2 i# J" ? |& u3 o/ F5 D& G7 o int ret;
$ j; {' r- v) c5 E#if 0* ^- d6 Z' t/ L% Y; c/ I: L6 l& `
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! t$ r2 G$ F# C$ e- O if (ret)- _! m7 W h' j3 [
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( ^6 F' f; ~" I' K& w5 }9 N
"%d\n", ret);
3 E! f c9 g# x& K$ W; e9 h/ E#endif* D6 ~$ z$ r2 R
ret = platform_device_register(&da850_evm_tl_leds_device);, w. e+ [+ m% o% A4 x3 [# w1 r2 U9 x
if (ret)8 `, i G( u+ m! n; a$ O, e
pr_warning("Could not register som GPIO expander LEDS");# V* _0 |. b- ~% h/ s7 c& T/ D
else
6 Q+ W; R! y2 S1 i! z+ B printk(KERN_INFO "LED register sucessful!\n");
) G6 T, ^# H" i
& n' V6 Q2 `4 @8 e return ret;/ G. v& o, E( [" q8 }
}1 J6 h' H% h3 j6 i! g
# S6 G7 c" x* s# }( x
static void __exit led_platform_exit(void)
- k {5 i1 B* R4 }2 c9 j9 E{, p. S$ o* w0 m5 E1 V1 w! C
platform_device_unregister(&da850_evm_tl_leds_device);
# p& P7 k" Q% m
6 C4 i% Z4 u' F W6 x printk(KERN_INFO "LED unregister!\n");3 T$ S1 g: H. g4 p+ Y
}% p) C8 ^" Z) u. W' l( w+ t, D
" ]* D* H; G# e; Umodule_init(led_platform_init);
$ X2 P+ z1 W5 ?) B" q6 _4 f! G& pmodule_exit(led_platform_exit);6 B4 ]1 b O7 _: E* ]0 a
% _' z$ ` e/ C; }7 R% Y& d3 E* s8 r: pMODULE_DESCRIPTION("Led platform driver");
- L6 w. ]/ r N, `MODULE_AUTHOR("Tronlong");
G, P ~ Z# E5 ?- Q- wMODULE_LICENSE("GPL");% L9 R( D$ i! |- u% z5 }
$ p9 K: g- p) B; } |
|