|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 O$ S/ B* x; z#include <linux/init.h>
" @: {* Z2 T9 x- n. e7 N7 c#include <linux/module.h>$ f/ I( K9 r; s
#include <linux/kernel.h>
) w. E# h3 n6 |3 V9 S* t' [% T#include <linux/types.h>4 k! s2 G A3 }/ d- F) H9 J+ X( n
#include <linux/gpio.h>
$ |3 P- Y* W8 F. n0 _! A1 g#include <linux/leds.h>& K& h0 s1 z1 L* D: U* e
#include <linux/platform_device.h>
$ l$ k- D. Y. A) @& X5 _
9 P# B' p$ ? k. L#include <asm/mach-types.h>
, `! L7 f2 ~; X. b/ I$ K6 ?#include <asm/mach/arch.h>
* k7 P8 y1 {# G6 C) Q. {! s, Q#include <mach/da8xx.h># e; m6 j7 h7 x
#include <mach/mux.h>
) v+ P1 u5 b r$ s' N' [ o6 ~9 _+ X3 q3 C
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' q E8 J8 n" L9 p6 z. s8 |% z
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 i; A5 X& M. f- B5 b, W
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 G/ y/ c$ T+ e ]$ h4 c; ]
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)8 i6 v6 t% Y! v
* s0 |3 C/ [" _5 e" ~/* assign the tl som board LED-GPIOs*/
4 u6 ?0 b' ~. v8 o$ ?static const short da850_evm_tl_user_led_pins[] = {3 V5 b. \5 Q) z& |' z1 Y
/* These pins are definition at <mach/mux.h> file */
. f8 C/ O! M3 d DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ l: y0 T% P1 p% ` -1
4 z- ^4 r0 o& r; V, E};6 O, J$ O$ t/ y/ W0 e0 ~
7 A9 x" w! T3 Q! K; a; }static struct gpio_led da850_evm_tl_leds[] = {' i9 ~7 F5 n! S f: E
{
; ?' {5 [: e% a8 K$ j- n! a( P .active_low = 0,
3 Y: L7 Q6 \* h2 S& ]: j6 X .gpio = DA850_USER_LED0,9 `* Q; c" C9 i! _. Y
.name = "user_led0",( {. u5 D+ P3 t1 H
.default_trigger = "default-on",
& m" L- a" L& X" d },# z7 W: e" |3 O- X
{$ t! F2 ` ~" p5 U$ o+ M
.active_low = 0,' z7 r7 s6 {; P9 g4 t5 g
.gpio = DA850_USER_LED1,
J5 r& I. S' }# r! ^* U .name = "user_led1",
2 x: Z- y: D7 `, ^2 G .default_trigger = "default-on",/ {2 Z1 s5 G; V- D. H P/ T
},
' i" l& ]7 D" h, [# o( d0 [ {0 Q7 S3 u; i$ k4 O
.active_low = 0,
) {" \5 i A4 q# c5 @2 a .gpio = DA850_USER_LED2,& |; o9 }6 X0 a, O
.name = "user_led2",2 ^2 O% g# ]$ e1 U" x$ v) \) k% V
.default_trigger = "default-on",5 l. @2 D7 h8 x" {/ e5 t! `' B
},
0 [- M. Z2 U9 P8 ` {& o! o) Z+ Y& }5 m
.active_low = 0,- t+ c* \9 X! z1 s$ n, ]( Y
.gpio = DA850_USER_LED3,
3 I4 h+ e8 G0 m3 b) ]* W .name = "user_led3",, R& Y" w: W3 x! D) n1 r. X/ P+ o
.default_trigger = "default-on",7 b9 c( K. O6 H7 ~
},: V6 m% e3 v- ?: A: R3 u
}; X$ ?/ y( }& Q$ h
6 T" N1 M4 B$ w" K! S
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; q8 K+ I1 Q7 U6 y
.leds = da850_evm_tl_leds,# k* X, H0 s" U+ E* n/ I
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
0 y! F- L3 {& f$ d};
2 a/ T& R; @9 }$ x6 Z+ u3 f( K% |) \" }& E5 ?( U
static void led_dev_release(struct device *dev)# Y; c; @* q8 A$ \) y! \
{7 J! }) U$ a7 a
};
- f8 m- p5 o, `# ]# a/ t$ a# M2 O# U$ B( D3 A& ?4 b. `* }$ D/ R
static struct platform_device da850_evm_tl_leds_device = {
7 v& _2 Z& K- E .name = "leds-gpio",) E/ h- N: Q8 M9 j5 b& i# m7 J
.id = 1,0 N5 a" i, G% @! T
.dev = {
! V) n o" b9 J2 L .platform_data = &da850_evm_tl_leds_pdata,
9 `0 c. u6 U; u s2 ~* q& D2 W .release = led_dev_release,
{- Z: u+ v0 S$ C } i) L. a2 K/ {( @, y/ \. N: w' E5 L6 p
};
- z7 k7 Q+ o/ T1 g+ \* T" y5 ]! \ f5 R2 i0 f8 i1 |2 G
static int __init led_platform_init(void)
: U+ f5 h5 ~' V i3 a- m) j6 y6 i{4 N8 s5 P8 q5 j0 s' r d
int ret;3 d) a1 J" ~7 w/ K& X* O- d. @
#if 0
( \" C4 s6 r3 h( F- w, @# }* C$ F ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 c( A) M$ Z- z/ @
if (ret)# m. P4 @' T+ f
pr_warning("da850_evm_tl_leds_init : User LED mux failed :", Q, I. l# a$ i2 d# ]
"%d\n", ret);5 f# _9 a2 b6 G- ], G' M
#endif- U# A$ t1 w$ g0 a( x; H
ret = platform_device_register(&da850_evm_tl_leds_device);
! d2 O7 B4 W: N2 ?& o if (ret)* d- x4 ?5 P- @* { J: W
pr_warning("Could not register som GPIO expander LEDS");
4 D; {* N4 o8 f- _7 x0 f else! F4 l0 ~7 v1 C& n+ G
printk(KERN_INFO "LED register sucessful!\n");% X" l6 U" Q& x: r. ~
. f7 Y& O4 p, T- ] return ret;( D- [5 H: W( [4 n) j
}' \6 K2 t( P" Q) z' y) p) W
9 F) N+ W8 S( V4 z7 R. Astatic void __exit led_platform_exit(void)4 U9 a- N: { G5 g, w! b: |
{6 X. F: T8 }9 D1 u% E8 q# ^
platform_device_unregister(&da850_evm_tl_leds_device);% W3 d! x1 z, W+ X2 M/ c5 n' r Z
/ d' ]& Q' s. d- J; U) _* R1 \0 d
printk(KERN_INFO "LED unregister!\n");' [) ~, A6 H r& a5 S5 {
}" _; @! z: w9 {
$ O# X, {5 K6 g& W& x, Y
module_init(led_platform_init);1 _- Y- Q( O/ m) x* M j; a
module_exit(led_platform_exit);
; b; a! u& K5 S
/ E4 z ]) [8 S9 \2 X4 ~MODULE_DESCRIPTION("Led platform driver");7 [" e u. G* @% P+ l* q
MODULE_AUTHOR("Tronlong");7 n B( h2 f1 N! Q7 A
MODULE_LICENSE("GPL");8 E0 Z( g5 A9 p4 G; G
& i8 p) N4 N' h/ r6 z& \3 C7 b, L
|
|