|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# \; J/ Z3 V% _. F; }
#include <linux/init.h>
! R, ?- W# x# v( w2 V3 o# R#include <linux/module.h>
5 w* b/ q: C8 y" s3 H2 A#include <linux/kernel.h>! U6 @) L/ N! [; B5 J
#include <linux/types.h>& f6 H6 n9 n1 I3 ~; {; y
#include <linux/gpio.h>
$ Z4 S3 s% l: Q0 J0 ^! F#include <linux/leds.h>
7 e! ?5 a2 H6 D1 X1 t' W#include <linux/platform_device.h>' C: a U/ U E" \# x+ b6 ~% M
2 h b' y$ U# ?% l9 A6 [( b) v#include <asm/mach-types.h>0 O" W0 \$ J; X1 Y* h
#include <asm/mach/arch.h>7 r' j% Q+ n( U6 O3 j8 y
#include <mach/da8xx.h>- A6 Z( A l" k
#include <mach/mux.h>
" o% p2 g% q% @: L0 F; n2 ]; @; j6 r, G# r I
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 E8 b/ J# Y, E0 f. N
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 q9 b* F; J8 C6 a/ m- @
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)5 X/ x7 q4 ^9 J& e5 w* t
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
D) ?) v* M$ S( V/ p, c& u1 X' t2 H
/* assign the tl som board LED-GPIOs*/
* ^9 B( i0 |5 u. Q& U+ |static const short da850_evm_tl_user_led_pins[] = {
W3 d; R5 z; h B7 a /* These pins are definition at <mach/mux.h> file */) M' ?2 c0 G! {" w+ z7 U" M8 h
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. Y ?- D6 y: J p \/ L -1
8 g* P/ s" W4 U8 v2 I};/ W" e2 p) y; r" e) {; \
0 Y/ u1 K" s, W/ [) X9 q: b# I B
static struct gpio_led da850_evm_tl_leds[] = {
& |3 z# G- m+ x) N0 o; y1 Z' | {9 q( O% m" N3 S9 R+ l
.active_low = 0,' a/ U" {. n. F- k
.gpio = DA850_USER_LED0,
7 P: G$ n$ `# P9 H0 U .name = "user_led0",9 a& }1 G0 v8 C6 j. b
.default_trigger = "default-on",
0 i! L8 s6 Y& ?8 p8 Z" p5 Z },
7 A1 z! G) D4 I5 @& {" O {
9 ~' p& }- }/ M* k; ? .active_low = 0,4 f- S. \6 q2 B G& G/ I
.gpio = DA850_USER_LED1,) c W J1 z5 W( b; O
.name = "user_led1",$ I6 W$ U' k! i5 |
.default_trigger = "default-on"," M6 }3 | g+ _' Y
},( t" m, Z) Z k$ t- ? V
{1 b+ b; d# t4 w" V4 h5 a
.active_low = 0,
/ B* F" t$ K, ^- |2 \0 J& M .gpio = DA850_USER_LED2,
5 x" y; @4 F7 z1 r' A+ | .name = "user_led2",
8 ]7 ]3 t2 y. J V* ^& y0 M' I .default_trigger = "default-on",1 [" K& I9 A' R' Q
},
( L' Q! o5 H% Z. K+ o {
' a2 O$ L5 M7 d$ w3 w7 f- @ .active_low = 0,0 v @5 A4 V5 m$ U# Z
.gpio = DA850_USER_LED3,) M5 x. o3 a" W) @
.name = "user_led3",0 k2 M3 }* ]# {. k4 W
.default_trigger = "default-on",
+ H+ T" s- C/ {* U: S7 m& r& ]& h3 T },
8 Y; X I. e( f, l5 w1 i};
" C1 m' {! z! y$ D9 `8 O4 F* Z, Z' P+ [$ K9 w3 C
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" q, Y ^# a/ A9 x4 T" X1 m8 m .leds = da850_evm_tl_leds,
, ]+ ]) S K4 X" @3 d e .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 n. K) ]9 s% f9 a/ F% y};
# A/ k. Y6 W4 y+ k5 o5 V6 \5 Z; q) o4 {/ s
static void led_dev_release(struct device *dev)
( B% W9 r4 F) s6 b" Q{0 l$ E7 a0 v, ^7 L2 T
};7 w% M! V" ^2 J {5 ?" r9 N
! {$ p! V# S" O) j7 f% \* _/ Zstatic struct platform_device da850_evm_tl_leds_device = {
& B" [$ h. p7 F1 Y# q/ ] .name = "leds-gpio",9 _# G( ? k8 E) y. J0 ]6 C
.id = 1,
2 E b) I' J$ g, n3 h% e: ` .dev = {* r+ y; F9 @$ o( Z o0 p; r; q5 l
.platform_data = &da850_evm_tl_leds_pdata,
+ d7 p& M' s7 n( X7 v8 L1 F .release = led_dev_release,
2 x: Z2 U9 a3 X }; w( C# A. W! k0 R4 Q
}; o! f K [5 i- L
; Y; ~/ ]. q* S, L0 u. v) S9 x! @6 Estatic int __init led_platform_init(void)6 g3 s) p, h; E+ `: k
{4 E; t8 n, N: }
int ret;; z. V; p k4 w6 W: N3 G
#if 01 ?) W6 g% e1 @: g- J& k7 Y( b- |
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
6 D; {# x! D7 r/ i. @1 F# _ if (ret)5 G% | `+ Z, ^; e/ U+ G
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
4 }) {3 o) q5 n& P6 i "%d\n", ret);/ `! O' k5 Q4 Z7 D( u3 b, V
#endif
" `5 Y) {$ Q( ?5 G% D+ g- y ret = platform_device_register(&da850_evm_tl_leds_device);
2 n7 D! [1 Z) V7 y; C3 Z if (ret)
9 c! |0 ~- E$ @( z7 ?3 n pr_warning("Could not register som GPIO expander LEDS");- r. v! X6 t1 Z, @7 }
else
$ m1 i5 q0 ]7 D- z" E printk(KERN_INFO "LED register sucessful!\n");- `" N3 i/ G& m: t& H1 p1 Y! R1 Q
! _3 H& _3 d4 A- w, I; p! [
return ret;
- D' b3 A0 ]7 M+ O6 t}
+ K. W& T- j% M2 e' a$ Q; v7 _' b
* V) V6 y4 m" f; Fstatic void __exit led_platform_exit(void)9 V# a K/ d, m; Y* x2 \9 v6 B
{; E+ x6 t! q+ X9 V) R
platform_device_unregister(&da850_evm_tl_leds_device);) M. F5 q& F( F6 B7 G0 t% [4 z
" L% C2 c: _$ ~" |
printk(KERN_INFO "LED unregister!\n");* Y" ^1 |$ L( V$ q. l7 H
}
" R# L3 o. Q6 G- N9 _& T% A! Q2 q" D8 F6 o, \5 s
module_init(led_platform_init);- O9 {2 n/ V3 P U4 o; q5 `: ~% n6 k
module_exit(led_platform_exit);
& r% C; c, g- I' h) x
2 g4 D9 q: w1 ~" G0 _) }" pMODULE_DESCRIPTION("Led platform driver");
- m5 v* W I% S6 lMODULE_AUTHOR("Tronlong");; h; H* T" v. ~# Q5 K- B" C( n" A
MODULE_LICENSE("GPL");" w" G$ \7 S* n, f9 r8 ~
9 j* o2 j+ ^ j" u; Z6 b |
|