|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ Z) I1 `; c7 k
#include <linux/init.h>8 A6 P5 {$ x$ g( J
#include <linux/module.h>" ~/ a f7 l/ E% l2 F
#include <linux/kernel.h>
2 ~7 y/ e" s' L% _3 r& T#include <linux/types.h>
9 P3 m. p6 x* [; X+ [+ s+ J#include <linux/gpio.h>3 q3 A6 l5 B! U' ]( `, L+ @
#include <linux/leds.h>
- g X8 t/ y) ~#include <linux/platform_device.h>; B; ~* v# M' F1 ]1 ~9 p
" n& o8 `4 V! a#include <asm/mach-types.h>% _6 w1 E7 A' b0 f6 ~" L' G/ h
#include <asm/mach/arch.h>3 j& _ r- `( O8 u
#include <mach/da8xx.h>. r3 `: f* }6 H) o$ ~1 z( v
#include <mach/mux.h>2 B3 |7 U d, P# p1 Y- G* U/ G4 z4 ^
# X: m3 X" s9 B- D1 Y9 Z0 q' n#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; r# h7 C# ~/ j+ x. @6 T8 l#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ D9 a( y* q8 D+ ?: l% @6 V#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) ~" Z, K1 U) s5 D5 a% U5 a#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 n+ b2 n" X5 R# W4 b4 [4 K0 l( j5 N. {
/* assign the tl som board LED-GPIOs*/
8 Y1 O E v) ?% K. B% M. d& Ostatic const short da850_evm_tl_user_led_pins[] = {4 C' }/ f. s: L1 i$ ^7 t
/* These pins are definition at <mach/mux.h> file */
' T3 ~4 e/ U8 w- d, t DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; A1 Q. F3 L. S& A -1) p$ F+ _8 S6 ~& ^3 T# }! [
};
; [ S3 \) _8 u: V0 f" @6 @; I! s0 h' K% o
static struct gpio_led da850_evm_tl_leds[] = {; B8 }9 a. `, }* l5 j$ W
{
6 [8 r( z" n( p3 _ s/ [3 K .active_low = 0,
) }5 L% Q9 {7 @1 x! n- d& N .gpio = DA850_USER_LED0,
/ R; @) z1 C8 j: { .name = "user_led0",3 V0 m- v7 t" _8 e, f
.default_trigger = "default-on",
, F# Q. n3 j9 x0 x' l },+ F4 k! ~9 _3 ?# A
{( s: E0 Q d$ x
.active_low = 0,( M4 I: o7 y5 l3 J* X. L8 V, `. t V9 r
.gpio = DA850_USER_LED1,* {, c( @4 c) H6 O3 V
.name = "user_led1",8 T' B! g0 B* d) ]) V
.default_trigger = "default-on",. X: B% [1 R7 m( ?
},
* e L6 N6 M4 K1 O( y {& m" g0 L! g3 j, a
.active_low = 0,
, V: v6 H. p/ z' P6 b& y% t .gpio = DA850_USER_LED2,; | g% i( }) p A/ Q
.name = "user_led2",3 k" i$ q( z+ H8 t2 U
.default_trigger = "default-on",
* B% Y& z/ @' ~' Z- W" ^; ]) k& p },. w% M/ D6 j+ P0 a: N1 o% o1 q0 p
{
$ C# }7 Q$ l: ], l; H# }( Y .active_low = 0,
( }; s; h2 L+ g4 G/ X+ _7 U- B5 X .gpio = DA850_USER_LED3,! k& i* m: ?/ w
.name = "user_led3",
) A% j! [) O5 c4 D. [8 E .default_trigger = "default-on",
p, u J4 `8 x/ f },$ j$ ?+ q7 V9 T h& b
};) f C4 {% W% p1 [. p- c; o
$ _" W* s& g! i0 ?/ i$ @" L, [
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# a {$ t7 G( e5 I# V! A6 M* V
.leds = da850_evm_tl_leds,6 o; k, _, r6 l: u; [
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ h7 o; d, \/ o; M+ O+ K5 z};
9 k) n; X. [3 u5 H$ F i7 i1 L I/ j8 T8 d
static void led_dev_release(struct device *dev)2 @/ H }- E' c t1 T' |: Y
{4 A) }% K( @$ K
};. p- ]9 k# z" ~! v
/ r$ X4 h" _2 a7 istatic struct platform_device da850_evm_tl_leds_device = {0 Q: a6 T& A: W2 U3 [, b$ B, ^( U
.name = "leds-gpio",4 m. s) q I* G; _$ A r+ M" L8 q
.id = 1,
9 H7 z9 [. [1 _" f2 @ .dev = {
2 p+ i1 M3 n( t1 h& g .platform_data = &da850_evm_tl_leds_pdata,
( M9 F4 t0 L0 x' o) p( `% T y! M .release = led_dev_release,/ ^5 U( x% [* ^" d% w/ I
}7 {8 a5 j. `0 u* S! r$ l: K/ ^
};- C) a( `& b! N- M
) ~. w% Y+ ~, u; ~2 S( Vstatic int __init led_platform_init(void)9 z, _) C6 u1 P5 M+ l/ }
{# ~; v4 W9 g4 B8 Q" o4 R# e
int ret;! E; Y6 P. v, ]+ i. Y
#if 0: Y1 Y2 m" e0 e ^4 b0 | @
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' X' _9 Y& I3 V. w
if (ret)
( n$ c- V. {: C0 ~$ D& @ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( E% G+ L! j) f: S* |8 I" C5 O
"%d\n", ret);& I9 p7 W7 a9 I, g I& M
#endif9 v5 z* g/ q5 `# c
ret = platform_device_register(&da850_evm_tl_leds_device);
5 v" x8 {, ~/ e5 E if (ret)
( _: s& B2 E$ L pr_warning("Could not register som GPIO expander LEDS");' S# B+ Y: E' M* V/ Q
else- t O9 [9 E1 R R% G- w
printk(KERN_INFO "LED register sucessful!\n");
# ^! |* G. x+ Z" o: {9 ?! r
" ]! M0 G" {$ h return ret;
4 c- V: z+ Q+ e0 P0 g/ o}
. Z1 A& [. K' G" C! X- v
8 R, X8 k+ Z" U/ a9 t9 Pstatic void __exit led_platform_exit(void)
( @/ s; j3 ]- u' h/ k% N6 d% O+ k8 b{
8 l2 B7 t1 U4 U) _) E platform_device_unregister(&da850_evm_tl_leds_device);$ P$ B* N' a1 o# m2 ?# ]( C
y$ e* D" V/ T- @- {4 g printk(KERN_INFO "LED unregister!\n");8 K8 c9 F8 c. j: m
}
( {( d9 T$ W7 r* b
% {! }! J0 q) |( \1 X9 y4 e1 Qmodule_init(led_platform_init);# {; v7 a# Y8 Y) `$ T
module_exit(led_platform_exit);+ t: V2 b4 x3 d D( c: M0 Y
$ [. r( h, m9 J0 i* O
MODULE_DESCRIPTION("Led platform driver");
! A' ]- f0 e+ u" jMODULE_AUTHOR("Tronlong");6 l$ k L' d `
MODULE_LICENSE("GPL");* `, ?7 w3 Q& ]( F! ~# D
3 M& Y! e! A% r9 l7 I; \ |
|