|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- G* F& J. D0 H' E6 I0 A$ F#include <linux/init.h>* o. i& J' Z' l/ _5 T, p- Z
#include <linux/module.h>0 O, J- x! L; n/ n; K
#include <linux/kernel.h>/ i3 s; j" J6 Q# t( x3 \! X: N
#include <linux/types.h>
" I2 g3 i2 ~" k+ A#include <linux/gpio.h>$ v* f Q* ^/ X5 y
#include <linux/leds.h>
# ~! L/ ~% b8 `# ^/ g& s0 F#include <linux/platform_device.h>
2 j4 L5 o4 f. N T9 w
) E/ E4 R8 b! C# B: K8 b3 s7 z. Q#include <asm/mach-types.h>
7 b) [+ f+ ]" g3 d#include <asm/mach/arch.h>
" [+ y: P2 ?- Y) c8 k#include <mach/da8xx.h>! M, X+ w5 r: @9 \7 h- s& k
#include <mach/mux.h>
+ @% x$ V$ X3 i. E- l" u5 s+ a" V5 l B4 X: s
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( I" ]; T Q2 I9 r
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
y5 f6 A9 L. @& r1 e#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 R% p+ L N: }( d; z0 X8 e
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 E9 b7 ~. v: D0 j
& D9 `/ w1 V7 m! D/* assign the tl som board LED-GPIOs*/! y* f- V" L' o V {: ]0 n$ \
static const short da850_evm_tl_user_led_pins[] = {; U+ @( E Z6 J$ W* d) P0 }5 T9 b1 u* j
/* These pins are definition at <mach/mux.h> file */
2 [$ w. X( h# y- d" i, G1 _6 t) [ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- K2 ^" y7 J0 J4 B" o/ `" d* i( @ -1- t$ M/ H% b/ l1 ] l
};2 ~0 B& ^. K0 M% e- f
9 _: C$ s; a! i5 ]/ ?& n1 U. Rstatic struct gpio_led da850_evm_tl_leds[] = {
0 c% q/ h3 g3 q2 y6 K+ U8 v, r {+ t8 E+ t' m$ f
.active_low = 0,3 d9 ~/ w! b7 s; ^- l7 F
.gpio = DA850_USER_LED0, @* _1 [+ _4 O/ m
.name = "user_led0",
* d, h& f. f# t7 n* y3 K: M; s .default_trigger = "default-on",
4 P# _( @$ c' e. k; [ },
2 Z+ [: V( ^. [$ M {' j) d( ]. `3 Y- l
.active_low = 0,, }. d( R6 z& x1 l6 k. }# }
.gpio = DA850_USER_LED1,
$ ~ E' R$ h$ Y' K x7 r .name = "user_led1",: D6 T; R$ J7 Y& M# x2 c2 J: X
.default_trigger = "default-on",5 r9 J* M* T$ V3 \" z
},
8 ~- q! i$ `; T* X7 f {
& Q5 Z3 g, z) [/ P) A4 ^7 F. p+ \ .active_low = 0,
3 h; p( v8 u9 R .gpio = DA850_USER_LED2,
% z! t) f7 }+ f .name = "user_led2",! i- H' T' u. a4 k. i
.default_trigger = "default-on",( ~2 {* d7 i! g8 ^9 K; E8 ^8 D/ T
},! T7 I' r" |* |0 H, d. ]' l) P0 O
{( B K% [2 Y2 W8 c* X
.active_low = 0,% I( p3 [% k) k/ Y# T0 O! n" A
.gpio = DA850_USER_LED3,
* B6 ?8 g; p/ ? .name = "user_led3",( M: n+ Y s) I, i
.default_trigger = "default-on",
/ K: z; j4 V1 v0 T* W }," g" E0 [5 C3 K. O
};
7 Y/ k$ W9 ?" r+ l* A, L
' I- I0 E8 d+ s' i( Istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {1 |% G; f9 Y9 e
.leds = da850_evm_tl_leds,
' Q# r, L+ _! J .num_leds = ARRAY_SIZE(da850_evm_tl_leds),) f' A# S k" |; d- n
};; e' ^7 A) s, R% H
i8 ?9 [1 y' K8 i6 T1 Nstatic void led_dev_release(struct device *dev) l! H# Q7 N% p: F6 m! @, V
{+ f C7 k' E1 M% e1 ]
};/ f6 F5 O! T( l3 _
. L' `' r9 Q9 W7 m. R3 S C8 X" Fstatic struct platform_device da850_evm_tl_leds_device = {
N8 s. e+ Z3 q6 Y; U1 O+ m* R .name = "leds-gpio",
4 ~3 M0 D! o+ v .id = 1,' k$ D1 a, s4 a- t$ O- H$ I
.dev = {
/ h Z0 |6 Q' F$ N ^, h .platform_data = &da850_evm_tl_leds_pdata,
9 t* F( {7 F, k8 x" y .release = led_dev_release,
. S3 s8 H8 S- H2 e; g }
& w; Q e, @2 S};
3 Z j S5 O2 }% Q' O! @$ }- O
: ]& u5 L A5 Rstatic int __init led_platform_init(void)/ E- \- X7 u' l( N6 y. V: p* H1 R
{% V! i2 s: s5 A$ d% ?
int ret;
' X2 V( f O. h) E- f4 t2 T#if 0
. {5 b4 L- l2 q9 o ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 m5 Z0 p2 R4 `& ^2 R
if (ret)
% a( Q6 ]1 q, g- q) X; v pr_warning("da850_evm_tl_leds_init : User LED mux failed :"" _" \9 H/ P+ Y$ k* U- Q3 u: L+ P
"%d\n", ret); ?: C- S% H" d" g' g
#endif' ~: I/ A& H& O- [5 T% W/ b
ret = platform_device_register(&da850_evm_tl_leds_device);
7 @/ n! {# n' A0 Y if (ret)
6 c0 \! a# J+ S2 _) h9 z0 P pr_warning("Could not register som GPIO expander LEDS");3 R$ C" e" r5 \/ Y
else
* o6 d6 [* Z% E& d0 e printk(KERN_INFO "LED register sucessful!\n");
% J9 m8 p; W) c* t& z" o3 O3 u7 ?, P" d8 s# w3 C
return ret;/ K6 d+ U3 L6 V; M
}8 w: \' Q% w4 N+ p: O
4 f/ e. ~( F$ ^static void __exit led_platform_exit(void)
* I9 ]0 S# H' a; u% e' h{2 o2 ~) @) f! u% T: ^
platform_device_unregister(&da850_evm_tl_leds_device);: z" N" \$ _8 d
3 u% a, X3 A5 c printk(KERN_INFO "LED unregister!\n");
' o( F( Y8 h7 N, O}
7 f2 n8 ?3 S8 p: y0 W2 ~# T4 h+ I6 }9 I0 W$ j
module_init(led_platform_init);
) j, l' h+ Z+ v. j( }- e* wmodule_exit(led_platform_exit);( G- K) N9 q }$ m5 L- w6 Z, Y3 G
" J3 ]8 D) z4 a3 V3 G
MODULE_DESCRIPTION("Led platform driver");
4 \% c; K& s+ x6 `* mMODULE_AUTHOR("Tronlong");1 U/ }) j/ o2 x! h
MODULE_LICENSE("GPL");
7 g( i/ w+ u1 Y3 l% H3 s+ _3 u* B, v j+ P7 g9 A
|
|