|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
s; U0 C' h, m+ }% r; J#include <linux/init.h>$ h; R q {7 `8 h7 J$ y1 e
#include <linux/module.h>
( C" c5 `) p% _$ o0 E3 @#include <linux/kernel.h>
' i$ p) Y; W0 J: v$ L. s, b. j) G#include <linux/types.h>& D( R$ ?6 G6 s7 _9 S, D/ ~
#include <linux/gpio.h># s& P8 E6 J5 d# }
#include <linux/leds.h>0 [4 `' u# y. }- ]" | Q
#include <linux/platform_device.h>
1 z3 D# E k" [& |( A/ V3 n6 ]( o" \
#include <asm/mach-types.h>* K ~8 Q- S: g+ ~5 }- D, n( \
#include <asm/mach/arch.h>! Q2 q% ]7 X7 c" L" h
#include <mach/da8xx.h>1 T2 o( ?2 ?% _$ h
#include <mach/mux.h>
+ U, K4 l1 T# g& J* D* e
: Z) t: \" h+ s& f2 q#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
1 b" ?. P. f9 J#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! P$ u a! n6 |" T3 Y+ V#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)+ g: `" D5 }+ L4 ^. E
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: o6 B7 `# m: f, J+ Z+ n, d( j
4 U$ d, Q0 N* i) P; X/* assign the tl som board LED-GPIOs*/
e4 M7 F! b7 D7 E: [" g3 Astatic const short da850_evm_tl_user_led_pins[] = {4 Q* L$ |0 _& w2 }9 M* f8 J
/* These pins are definition at <mach/mux.h> file */
2 o6 I1 m) k' q, o, ^" H DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, Q4 @1 [# V8 U. u5 e, k5 ~) d9 i9 z
-1
4 A8 B: p2 n; E; }9 j+ z9 X, d};& |2 K' ]: d( ^, c" l D9 Y
+ ~- }" f) \* K# ?
static struct gpio_led da850_evm_tl_leds[] = {
- j4 z, d B4 H& N2 H# ~ {8 Y! l% @2 D7 y; ^
.active_low = 0,
4 E5 v4 A' \+ k6 Z .gpio = DA850_USER_LED0,6 h: a) p7 ? q- h
.name = "user_led0",2 |4 D! n A) N( \
.default_trigger = "default-on",
1 b5 z, T- {. t1 B0 n$ Q( D },+ [- U- B2 R6 A4 F5 ?0 L
{
4 M( W8 Y* E6 x0 x! h5 e' s .active_low = 0,
; `' G# G8 U4 F( C5 {4 f .gpio = DA850_USER_LED1,
7 X$ W+ ^: A, O3 Y' J9 w t .name = "user_led1",. u# V) u1 @( D+ s
.default_trigger = "default-on",
+ J4 f7 y/ y8 Y4 w- e$ ]5 a6 B },
& M7 ?, d# A- q2 B3 K' W {
; @/ l d9 i; ]- |6 \$ A4 S .active_low = 0,
! h" ]# Y; ^- @ .gpio = DA850_USER_LED2,
$ | i; C% c# Z- \ .name = "user_led2",
% z4 g' Y2 ~0 p! ~5 p .default_trigger = "default-on",
$ \6 R& T# R3 T& l1 K, G4 c* p( I },; b5 K! ?6 s) W0 u, \% ]# u' W
{" N; c" S& W0 \: L V+ M0 z2 O( C
.active_low = 0,
3 U) E7 O1 ]; k+ f .gpio = DA850_USER_LED3,; P4 w1 B: r Y. x6 D3 n
.name = "user_led3",
* x0 X3 g3 k9 f+ l$ [; D .default_trigger = "default-on",' b) _ V k4 i% |" ^
},9 ~" V( r" n: P3 k+ T3 _
};
1 c" z; Z# ^* V' }+ i2 d0 v; @$ g8 s7 q4 }( S( B
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, c k4 A/ v( ? .leds = da850_evm_tl_leds,
+ `, [7 N. ^% W9 H1 c# s5 o .num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 s5 \! `# z% v# `1 C& c% ]+ h3 B
}; k: z: i# ]# ^7 f1 s& \' J5 z2 U
) r2 l, A& u2 J J# t) F( k
static void led_dev_release(struct device *dev)
/ {% A% m: D& o- e) S# l# K/ w{
7 t! Z/ l3 ]) Y2 \3 j};8 l4 I( r* ~* P1 e8 ]4 C! b; f
; A! l9 u( N- l3 `4 N
static struct platform_device da850_evm_tl_leds_device = {5 z7 K! \& f: G7 u2 J/ }
.name = "leds-gpio",
) y6 P! U& m+ H) \3 P .id = 1,6 m8 }5 W" A6 P3 `" g' _
.dev = {, `9 j* I/ I* y5 S# C# v5 D$ X& M6 n
.platform_data = &da850_evm_tl_leds_pdata,
) L T5 k5 o) m7 L$ K% J1 H .release = led_dev_release,
7 ?9 Q6 d7 u# z+ y" T' ]$ E }
! Y, n% V P f- X! i. c$ i/ X};- g" l: H9 Z1 I- B# f
2 }8 W; t/ j! G
static int __init led_platform_init(void)' q' I& I9 b! C$ g$ I) K2 U! l
{
7 D! M7 k: R& t2 i int ret;2 v; M/ R/ u/ A; s
#if 0
0 ?( E6 e5 a* h( E ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, h; m! ]3 B# B8 l3 j. D if (ret)
+ Y X! d8 O' O4 }7 O8 W3 ]0 v9 U pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 g3 g% w: m/ h/ A* { "%d\n", ret);
" o1 {. ~4 k& f! g0 h#endif
- v7 a m6 ~* |4 T9 }: s ret = platform_device_register(&da850_evm_tl_leds_device);* i6 ~( v* N& `3 C5 y/ C/ u
if (ret)
' X( y$ G/ y) l: X$ `" \, E& n6 p pr_warning("Could not register som GPIO expander LEDS");/ H7 s9 I+ Q+ G* q/ `
else
) e& `0 y) I! L4 D printk(KERN_INFO "LED register sucessful!\n");( K( r6 b9 M* M+ C/ E
9 n! Z2 g2 z* E* c& T. h
return ret;# ?, b+ _5 J5 f: k4 l
}4 H! w) V* j# u4 v" G) Z
' H. e) n3 t4 x+ G3 H+ L
static void __exit led_platform_exit(void)
# o* {( w3 x7 H) y" i{
5 _. N; } z' f2 {1 ]2 p platform_device_unregister(&da850_evm_tl_leds_device);
5 {, _, N' ^$ [1 D
7 X0 T9 z; N- U; u$ p printk(KERN_INFO "LED unregister!\n");
# j; c* P! p7 z7 d}: x+ @% c: r+ D5 O' n8 K: k
9 K/ n! q" L9 l
module_init(led_platform_init);- b+ ]' r% c9 o
module_exit(led_platform_exit);
& X7 f1 e' D2 U4 `1 ]9 a& u4 M& L. t# C7 [
MODULE_DESCRIPTION("Led platform driver");
+ v! X+ ?& A: c) k; {MODULE_AUTHOR("Tronlong");
% [. I: n+ f6 H* NMODULE_LICENSE("GPL");
5 }& b: H2 m# K' j) t" o
/ D; U- a' O3 Q6 w% r N |
|