|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
" o2 [* u$ R5 }#include <linux/init.h>9 j* i1 K3 {$ X* Y4 Y/ B7 E5 V
#include <linux/module.h>
0 j8 I* _! X# f, [. Z# }#include <linux/kernel.h>
' E+ D/ T6 e) Q$ i+ i#include <linux/types.h> p6 t8 G" k! s& a4 B4 H
#include <linux/gpio.h>1 ?$ |% Y' w0 H+ {3 T
#include <linux/leds.h>
; g% B/ O9 d" j$ G( ]#include <linux/platform_device.h>
# e E8 D9 Z/ a) o
4 T5 ~5 h3 B8 Y' Q* c$ ~" R: O#include <asm/mach-types.h>& `" w- _5 I8 c7 F' |; `+ H
#include <asm/mach/arch.h>
. F4 R. |. Y, k) G8 d9 w5 E0 w. [#include <mach/da8xx.h>
7 B+ p9 P- |0 p0 I; a#include <mach/mux.h>
8 {! f# V8 w# [; Y. B- }& c% l
& r' h6 `) _* m% v4 L$ n( T#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
/ _' Q/ W$ z: |5 a) `#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
" c1 {$ _- ^) J; @8 F" N. u! Y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
- G' B: I- n" w#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)$ ?* }4 Q0 T2 V- @+ b. Q. H( b2 `) V
* g% X6 _4 j" k' |5 m2 d
/* assign the tl som board LED-GPIOs*/
% b) V+ O5 e0 Z% I, H3 nstatic const short da850_evm_tl_user_led_pins[] = {7 s/ g& v* b% ^* m
/* These pins are definition at <mach/mux.h> file */
3 Y8 n& N7 n/ y6 B2 ]! i7 M DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( V; C0 L/ k6 A -1
) ^- u! h) t) w};) |" o- J+ [8 L' X1 a7 l
2 o$ _5 `# a& K& ^, N# rstatic struct gpio_led da850_evm_tl_leds[] = {( r: n* l0 S' c, I
{
" E# x8 G/ U n4 H! a .active_low = 0,
- {& V* X9 X5 X3 ` _ .gpio = DA850_USER_LED0,! ^$ d/ `; L3 X5 L* g% e
.name = "user_led0",( f$ Y8 l$ K6 r) ^' r; R( B
.default_trigger = "default-on",3 i% v: d1 I( c8 `" [) H) @! b
},
0 z4 K5 r7 D1 C- u8 @3 q {4 l! p [* N" W' x
.active_low = 0,1 i6 x+ C( Z" i3 y7 a5 U* J
.gpio = DA850_USER_LED1,5 D" r' y* m+ I3 ?6 N1 ]
.name = "user_led1",
+ @' A5 z' V9 ~. v! Q# m .default_trigger = "default-on",3 w: @. E' {& M
},
; s% J! c' h5 {( f3 _8 b3 ^9 V u {
2 ]+ Z1 \4 L# {. D: w! i: x) { .active_low = 0,4 f) d2 O+ T0 G5 a8 o! V% F
.gpio = DA850_USER_LED2,
& o* y/ l2 i$ N! {/ F .name = "user_led2",
% n8 I( M- Y" q6 F; \6 J .default_trigger = "default-on",- ~5 _+ }+ i: Z) n2 W: |) I0 r0 n, i
},
2 Y7 e! C c, x: n/ J- n d( W {" `+ ~( z, h/ n; K% ~# i* i
.active_low = 0,
; J9 h! `3 C6 ^, V1 b2 Y; q .gpio = DA850_USER_LED3,
5 N5 w" o2 I& w) V8 N! X1 {% } .name = "user_led3",) C! i$ t4 G6 U' d- B" R9 f* |
.default_trigger = "default-on",
4 c; a4 W+ `$ a },# |/ C# o' d# Q; t+ D6 E
}; X4 I) W% `; y& U/ A. N9 V! q( t
' |9 `" _$ m+ X1 a9 R+ h+ \static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! q4 u9 S y3 t3 o .leds = da850_evm_tl_leds,
: N9 a% E& i Z .num_leds = ARRAY_SIZE(da850_evm_tl_leds),7 R; a: }3 f! a1 G- M
}; |( M- O$ I( t3 x9 A# P4 _
1 [ d- d4 c0 @) b9 @7 W
static void led_dev_release(struct device *dev)
) R/ e1 E/ \" s6 Z9 t& t{
" r" Q N* H; \3 v9 a& Z& O! H};
8 ]5 L& M9 I3 \5 ^% B0 [5 r4 O, p( s: z, I& v9 T
static struct platform_device da850_evm_tl_leds_device = {8 Z9 T1 x- ^( ~% W/ ^1 n4 u
.name = "leds-gpio",
' q$ o$ y+ o# T% l .id = 1,# k' f! `+ H& V+ Y2 _1 x2 w
.dev = {
1 U6 z- S( c7 ~3 a- ^ .platform_data = &da850_evm_tl_leds_pdata,6 H& ~% s9 [' O: l2 V3 m
.release = led_dev_release,
0 v( u M) I# S# {2 z; y$ h& X }. S! R) B. Q5 P, s. ^$ Y" K* u
};
1 x1 m0 a) M9 h( }* A2 l. X, t, M( g& u8 O4 \9 }1 N
static int __init led_platform_init(void)
4 ]( ~6 [# q* I& I{
3 E1 E! G0 k( i3 N int ret;
+ w1 F' {" V ]0 a) h. b/ o2 i. o#if 0
; k" g# D9 t8 W* u ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, I p" Q5 d* m2 g/ j# a, Z5 t if (ret)
, u( i3 O0 p" i( g5 d2 _ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; w8 H% y7 D* j; r
"%d\n", ret);7 z4 s. q& o: v7 U# Z. z: z, q
#endif4 u4 }. ?) o/ C. M) j9 e% |
ret = platform_device_register(&da850_evm_tl_leds_device);5 ] |' C- b3 w3 k/ ]
if (ret)
' P3 q, r9 h. J4 y$ a pr_warning("Could not register som GPIO expander LEDS");
5 Q% }3 _/ u8 G3 _- ~' k else& c% s- D0 Q2 ], A
printk(KERN_INFO "LED register sucessful!\n");
. C* F$ \. p! K) F- M6 v. \& Z# u: a& W6 L. J. l: n6 i9 r
return ret;
: H; w+ x A' i7 i8 X0 X* }: d}$ X2 h* ~, x |
* g B0 I: k, r# Kstatic void __exit led_platform_exit(void)
9 b8 z( t- W: b* X) L* q3 G1 ]; p* O{
0 x" i8 \2 h. l& y5 @ platform_device_unregister(&da850_evm_tl_leds_device);
1 i' {+ p( |2 X+ ^1 T8 p* f1 g+ k' B1 t6 s) V. x" ?
printk(KERN_INFO "LED unregister!\n");. E3 O& e* z) n0 n8 p: D8 L$ l
}
- Y) J: |( G& n! z$ C. P# ^' V( p7 H2 I3 d
module_init(led_platform_init);
4 e5 Z' C# ]$ G0 a4 d4 D6 U( A) imodule_exit(led_platform_exit);
, z% t( q* _8 a5 a8 Y( g/ i4 l5 J- s6 Y: u
MODULE_DESCRIPTION("Led platform driver");# M0 J, q- J- H5 O" u0 _. h+ j
MODULE_AUTHOR("Tronlong");$ A: ~/ h* z+ R& q) W
MODULE_LICENSE("GPL");8 y9 G* S& m& i; J
7 }9 o! h- j" _$ R$ } |
|