|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 x5 H# h' O9 z5 M: ?1 b#include <linux/init.h>. ^* t5 }, L8 u
#include <linux/module.h>2 m. u1 N9 t7 f; B: l
#include <linux/kernel.h>3 r7 j- \" [. d3 H9 @
#include <linux/types.h>
+ I/ F% N, s$ @3 f% Z7 c#include <linux/gpio.h>
, m' d3 z, F/ Z5 Y" q#include <linux/leds.h> l# F D7 q# K
#include <linux/platform_device.h>
/ j0 x" g; Y. R
) x# @4 Y9 y! |6 Z8 I. i#include <asm/mach-types.h>" G2 F& j2 G& g( ~9 Q9 ?3 ^
#include <asm/mach/arch.h>
8 I" R0 M& ^9 t. ]9 `#include <mach/da8xx.h>
|; K- m& E7 {5 ^#include <mach/mux.h>) L7 H l; ^$ ?+ `
: H' W3 P/ o- {/ o( T3 J, z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) w2 T4 D# {0 C4 J* z
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 w& v8 a' }$ o6 L5 w#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% L4 T, S9 F: C* v g2 k
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2) [" W9 z9 s9 b7 Q. R1 Z5 E, O
4 c% G# |: F2 V7 Q! [7 W) o/* assign the tl som board LED-GPIOs*/# P7 z \. ?9 q+ B. j
static const short da850_evm_tl_user_led_pins[] = { s; Y) E; t/ y Z: s/ Z
/* These pins are definition at <mach/mux.h> file */- E7 O- M( Z4 T! S0 P
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 \9 C3 A$ I( f0 L; P8 z -1& Q) l7 P( R" L0 i6 C8 J, B3 |! d
};
7 Y" U6 l6 I( z6 J
6 Q9 F; I" f! f! T$ pstatic struct gpio_led da850_evm_tl_leds[] = {
7 J+ d1 J y7 Y" n, E' N. Z {" j( r3 K* y5 t3 _5 @' T3 T/ ?( o4 w
.active_low = 0,0 m0 m* f5 ]( ] `
.gpio = DA850_USER_LED0,- Q3 h1 \! I) n# Y5 `# b* L
.name = "user_led0",
- C/ x m- i0 R5 G$ j .default_trigger = "default-on",7 d' F ]- \4 t5 a
},. N! {$ m/ f0 f9 C3 A% [
{
. Q% t: {$ z, G: a$ a6 l$ H/ Y0 ` .active_low = 0,0 Z# t" V! [- p; M0 x+ s
.gpio = DA850_USER_LED1,
/ B3 B- k% ?# X# l' ~/ v! h* o' L .name = "user_led1",9 t( P5 H9 ^, f+ S
.default_trigger = "default-on",
* v/ K8 J7 `1 @4 m( w2 h },) i3 x, o0 t. q7 t( ^4 E" G- e
{
6 @$ h: T6 P8 D8 d( _6 x5 ] .active_low = 0,
+ e4 `) V6 L$ I* m n5 N+ e .gpio = DA850_USER_LED2,
4 g2 ~3 U# u0 [6 ~: t+ g( m$ t1 `2 b .name = "user_led2",; j' C, y7 m4 t
.default_trigger = "default-on",
. B* {6 e( y* z& F },
P% A; m# k7 e& W9 O/ @ {
" d6 x7 O3 Y6 @* x$ h .active_low = 0,
_1 b& R4 k, c" Z. }/ d: G .gpio = DA850_USER_LED3,2 }1 k8 E4 ]( F2 W! q
.name = "user_led3",
9 z$ r# H, s6 Z. O, m .default_trigger = "default-on",$ V1 ^7 f2 a9 ^. x
},
9 A' ]# n& v) c& ]) r. ]};2 w2 T! e( l- V
0 N2 ~, Y! u, y: [+ E' o* {8 Q% @
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
) A% s4 r4 ^+ z& N .leds = da850_evm_tl_leds,
5 I1 Y% Z; F6 F .num_leds = ARRAY_SIZE(da850_evm_tl_leds),. x' f% J) \* Z& v" Z Z
};* o; W) H# s3 E, F' K! b5 Y0 D
! Y4 |6 W+ c* B4 z& cstatic void led_dev_release(struct device *dev)5 C2 Q0 t$ I! k# n3 }' [1 m% x
{
0 _: k4 ~, \" L" r; M4 ^& R};; c# F4 F4 r$ }, r+ t
/ X8 A/ i7 l- C6 sstatic struct platform_device da850_evm_tl_leds_device = {$ X' h5 ^. i% o1 ]' q
.name = "leds-gpio",
. i% g! E: z9 K H0 \5 t; R( M" R .id = 1,1 E- b& F* I" C5 C) f: Q: V$ X
.dev = { [# [( r6 u- B7 r; Q
.platform_data = &da850_evm_tl_leds_pdata,4 D7 r6 O/ Q+ d0 H" c& ]4 k
.release = led_dev_release,, V6 `( w% e" t
}
3 M, }+ m9 [% @};6 n7 [: b+ t: }/ j/ {6 V
! u$ d+ p: v: T) C2 Y/ T3 s
static int __init led_platform_init(void)
; F. z* t& o5 P, L# D{
8 M' a L2 D) k+ E int ret;
& c6 P, b0 B& |* ^' Q+ O! ?#if 05 }, H' l9 b0 _# n7 W/ f B0 j
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# L! j: U9 ]# b
if (ret)" s8 \. d2 z1 o$ o
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; U+ `$ [: c$ b3 K& _3 e "%d\n", ret);. ^/ M7 p; \9 a
#endif
7 o6 D7 I, [* }. y5 P( ^/ K ret = platform_device_register(&da850_evm_tl_leds_device);
- J& ~) F6 H. h# a8 ]; s! b1 T6 s if (ret)- z c3 ~9 @+ J$ c) X
pr_warning("Could not register som GPIO expander LEDS");( \3 r, Y% G% z, c
else) k4 d. Y, Y" W, b( l' Y5 W
printk(KERN_INFO "LED register sucessful!\n");
% K: O' l* ^8 q7 Y a5 c: s' b/ D |2 S3 r# G
return ret;
" g6 @* `3 w$ B' O7 A1 {2 k5 y}
' c* z! N5 k. a; y9 T( F, T5 j+ M) H9 t# T, A* l' h. G
static void __exit led_platform_exit(void)
8 z q( [( H3 m/ R0 X{2 _% O) n( p' H
platform_device_unregister(&da850_evm_tl_leds_device);+ W1 T; I8 e9 I
0 Q- u4 j* C, x. t) Y
printk(KERN_INFO "LED unregister!\n");
& D8 E& ?+ m4 v# X0 m}
& L6 D2 H$ S( L3 B8 X; a0 W, B
: E. S! t' T- n; u5 smodule_init(led_platform_init);
3 |; p: N3 l" P1 F+ ~7 d! e8 \1 emodule_exit(led_platform_exit);: q+ l' g! C$ `$ p
" N5 @+ F) \8 N% @% Y% k
MODULE_DESCRIPTION("Led platform driver");. r0 v# S. ]2 r2 G/ p( L
MODULE_AUTHOR("Tronlong");6 [" b2 v l m! X) Y
MODULE_LICENSE("GPL");
. K" q# M* G- P3 w. l J: r6 }/ ~4 d4 o2 v+ H3 a6 ~* n7 x, Y ~' i
|
|