|
|
求大神给下面的程序做注解,请稍详细些,谢谢。. H0 y8 X1 X( p# t, e4 L. Y2 L
#include <linux/init.h>
% X* N; @: c- Z#include <linux/module.h>
; W0 ~6 o5 F% n; c6 @% N" X#include <linux/kernel.h>
( [) l" e2 |, |" `) Y# d3 |% L9 S7 b, S#include <linux/types.h>
9 b0 m; k/ V+ g; y, R#include <linux/gpio.h>. |% Q, o' P: ]: g! \0 n5 p- j3 q
#include <linux/leds.h> u' \3 x5 `0 V( B, @
#include <linux/platform_device.h>- u. Q" P: p. E! D& r& l
9 L/ W: Q# ~$ x, L* f#include <asm/mach-types.h>
2 G- \& z( J$ F#include <asm/mach/arch.h>) i& ]4 k. ]. ]4 e; _# j8 R
#include <mach/da8xx.h>
: o/ ?' g6 b- y* x, Y s$ ~! Q; l#include <mach/mux.h>
' R* ~ O; N3 E' v3 S8 m
* @/ w6 G3 a! c2 h9 y. K) g#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
' a4 t# U6 r7 R8 D#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
s% X" G, l2 }. U8 x; l#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. x# v) W: ~4 |; _9 m6 W- f#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); u6 G7 p/ I Q7 ]
9 z" W* ^- u" T' L' ~. `
/* assign the tl som board LED-GPIOs*/: h- E- ?4 r/ Z% m1 s
static const short da850_evm_tl_user_led_pins[] = {- R- j% e K: x4 Z. l( h/ l. l7 R" K- k
/* These pins are definition at <mach/mux.h> file */
) D6 S. x0 R: Z: M DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,0 b: _2 U% l- \3 Y0 J9 ^9 \
-16 E& j# x' H" ^+ Q8 M
};; o. ]! k+ K9 ~ [0 {
6 L) Y; x. S+ K9 _! `$ e' _# P
static struct gpio_led da850_evm_tl_leds[] = {' w" N D, @- J
{
" a: L+ g: d( k& p3 G) g7 b .active_low = 0,) W |9 T7 |. G0 k1 i: z6 [1 q7 d q
.gpio = DA850_USER_LED0,
1 V% A: V$ R. L/ ` .name = "user_led0", R1 O: t8 e" ` A' {; Q- \% N
.default_trigger = "default-on",* h: W6 W- B+ o, F2 m1 K) q
},; p( n) @6 J& z) L; ]
{' ?& e. R6 F) _
.active_low = 0,
4 \9 O3 Z2 j% _- V/ ^, @' r .gpio = DA850_USER_LED1,
) _5 {% Y1 @9 f$ r7 I .name = "user_led1",! i" t5 g2 q$ a/ t, @5 p3 s
.default_trigger = "default-on",
, f9 E- K1 ^# n( L* x$ F },
* B% h d+ N+ E) z0 x' n: G9 W {
( c G0 r% y; k3 t3 K ?' M% r .active_low = 0,$ p0 i! _( s+ p2 B( F
.gpio = DA850_USER_LED2,/ p3 b7 o3 j% x- |
.name = "user_led2",
/ v3 b5 M" n4 ? .default_trigger = "default-on",
4 W4 E1 g# h+ H W },
^9 J; W4 X7 w: u) ] {
+ v) k/ {2 A- q6 p .active_low = 0," R! u" H2 ~( u3 X- K
.gpio = DA850_USER_LED3,
. K7 X; i1 W" y( R/ \ .name = "user_led3",' j4 |0 ]3 V' {6 a5 O& a4 U, n7 j
.default_trigger = "default-on",
; o* Y# O6 J6 P0 s* ]5 J },! B6 u) {) j3 K% `) _; u" q
};
" t" p n, r" O5 T) B
$ Q; y( K" ^# b* t3 Mstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
8 _% I% O8 b N3 w" J( O0 b/ n .leds = da850_evm_tl_leds,
5 g* S0 e( v+ R* c9 x% f' n" f/ J .num_leds = ARRAY_SIZE(da850_evm_tl_leds),' U# Y+ G' V" n8 P8 V8 i
};
5 \: q; c0 e1 l- P) D2 Z
+ I# y R# i4 T5 o! I7 i/ istatic void led_dev_release(struct device *dev)
: w+ P. }: j) B" _# N4 F! H) T{
6 Q! \" [' l) r* [/ s+ c) ~$ ]" g. ~};
* V: ^; e4 O; Z4 ?
- g$ a4 I: n4 V, e6 Kstatic struct platform_device da850_evm_tl_leds_device = {7 W: \5 r, i1 u/ y
.name = "leds-gpio",
9 W4 b+ z0 w: `) ] .id = 1,
+ V" r) p O& D/ ]9 o6 x% e" L .dev = {
" q+ j) K8 V2 v* k .platform_data = &da850_evm_tl_leds_pdata,
! @ @# e, \2 ?- E, L/ a .release = led_dev_release,5 a4 v5 X$ _* h; ]: Y* i* ?6 s. f$ t
}7 X2 u0 o+ N% c% R
};: r& n6 R# q. N2 J6 `
1 c" X, R, Y8 k- Z
static int __init led_platform_init(void)
8 V$ `' p- a9 [. N: ?{7 W, o! H" M% ?. c A
int ret;! a4 [% }% i3 c5 r& Z( g
#if 0; K' `3 S3 D% @8 y4 V
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; J5 x( x1 p9 a
if (ret)
, c5 M# \' E2 a3 f n pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ N. b5 @# \1 A& F* \ "%d\n", ret);% |1 R N8 l# f* Q; F* W' L6 m
#endif
" {) r# |; m* P4 O ?+ k( U ret = platform_device_register(&da850_evm_tl_leds_device);
4 w; T. T0 @! U/ [) _* d; F% @ if (ret)$ Y; {% A% ^4 D% b6 G+ V
pr_warning("Could not register som GPIO expander LEDS");
5 i3 M. }- b6 Z& ~' a E else
0 Y: F0 S/ M5 k, H' ~$ F9 k) r printk(KERN_INFO "LED register sucessful!\n");
0 f. w0 V% H0 o7 B
, N) r5 N" M+ [" u4 p return ret;: P$ E7 ]1 }' j4 f/ s
}' m6 ]! @9 J4 w: P# W$ u0 X
B4 a: F; ^# h/ t. ?( f- n
static void __exit led_platform_exit(void)* [/ m9 ^: p3 T6 Z P# |4 i
{
" n6 x6 H3 u" H3 ~. d) A( f platform_device_unregister(&da850_evm_tl_leds_device);
4 m$ b6 x5 B% S
1 c" ?3 i/ Q/ e! `, U printk(KERN_INFO "LED unregister!\n");( T. F8 b& b' C ~8 E; J/ H
}
6 H$ {. T3 w2 ]1 O; z& k3 Y
4 L7 K. F+ R4 t& J2 c2 ~module_init(led_platform_init);
/ l$ c5 j; S( O$ ?! @) Dmodule_exit(led_platform_exit);. C; V0 q) ^5 w' P3 _3 x
1 t! D9 v' D0 y. t6 Z8 l5 \MODULE_DESCRIPTION("Led platform driver");3 K( S7 i4 d1 X8 `5 z! w; Z' ]
MODULE_AUTHOR("Tronlong");: C+ O4 b8 F; N) y5 A
MODULE_LICENSE("GPL");4 t, Y% n$ P& f: O( F! Y. _: o
# E% `3 b/ @1 j. t3 b# G" [0 k |
|