|
|
求大神给下面的程序做注解,请稍详细些,谢谢。+ I& C5 I1 e. Y, \
#include <linux/init.h>
9 z! Z: D4 n! N- o: I0 M; u" X0 c' A7 K#include <linux/module.h>
+ ]6 F; x! \2 a- S' v#include <linux/kernel.h>
+ U# ]7 B- `% ]* y; x- P#include <linux/types.h>
- r: v4 S& j3 A, x1 Z+ o# |#include <linux/gpio.h>
, a7 f! }" g+ |) M R( i2 Z; N#include <linux/leds.h>
1 L4 V5 x! u5 D2 |7 h#include <linux/platform_device.h>
3 {1 S+ I3 |7 l
; ^) ^# ]2 u& E#include <asm/mach-types.h>: g4 p; f4 n, C" q' m: t. L- e; j
#include <asm/mach/arch.h>
* J d4 }8 `- ~' J0 F#include <mach/da8xx.h>9 X4 k6 ~; c* l- E
#include <mach/mux.h>$ i9 f8 h2 a: T8 T t# `+ a
4 s% f# _! t& G, F& _# Q+ P. s5 V8 {#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)2 z/ ~: D1 J2 B$ @, z
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 k; p8 q& J5 A, ?8 ~#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 Z" ^! B2 m+ \: B# s
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! }4 E, p! L1 H* c0 {" a
. v# ~" Z- E, e+ K) r* N/* assign the tl som board LED-GPIOs*/% G2 F8 W: M5 Y" I# k3 [/ T
static const short da850_evm_tl_user_led_pins[] = {+ n9 k3 N X3 l
/* These pins are definition at <mach/mux.h> file */# W6 D+ Q. _- }; I
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 d" J9 C6 d. m% Y% o; U -1% D6 ^+ B1 U- ^: l- f
};
- R1 z/ [3 d1 Y( o5 R# u: k; o. r& [) m" w2 L1 s R9 A% _- h& Y
static struct gpio_led da850_evm_tl_leds[] = {; b) {. O1 i5 H& v) m. U6 |# J
{
4 q3 v9 O1 ~7 Y( A: }: N5 r .active_low = 0,) v; y: O' V+ E
.gpio = DA850_USER_LED0,
t; {1 P2 W# `* q& }% Y/ f9 }0 } .name = "user_led0",7 ^) H; F9 E" s, r7 O: F1 g
.default_trigger = "default-on",
; f% Y# a- h g },
3 w8 g* _" Y) s3 f6 E, a6 v" V, l {$ U8 T. [; [! |9 H# t& {7 K) Z
.active_low = 0,
- g. a4 c- f1 G; M .gpio = DA850_USER_LED1,& o3 I$ j8 v% L8 `0 r1 V+ l
.name = "user_led1",
. o. y3 V% O/ z: c* o .default_trigger = "default-on",) O3 h0 @* s p8 Q7 U
},
. w; b; Q( M% R, k9 Z {
2 S7 l; @8 [" U6 G' e8 J$ s+ ^( E: ` .active_low = 0,
. i* g7 G+ |4 n .gpio = DA850_USER_LED2,: [9 o* y; I/ o
.name = "user_led2",9 W9 o0 E U% J( y+ z5 j5 z* b+ Y
.default_trigger = "default-on",- R( b$ w/ {! w7 y# u) {, i
},
: Q. Y" M( r4 Y0 W7 H. V {
3 c: }4 i8 N) A .active_low = 0,
( a" c# H' |- |- w' l. k- a .gpio = DA850_USER_LED3,
$ ^& Y! G$ X$ r/ ]9 C3 j2 G- @/ a1 k3 u .name = "user_led3",
+ |- u/ J9 s" u2 H$ W .default_trigger = "default-on",
7 `$ _3 N% N% K- t& V },
) \- K* _9 Z! W1 e6 K};% Y. @8 N+ n* P8 W& _
! W C5 S0 G5 l' n* {4 [! i$ L# Wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ V! A9 G+ D! l ^3 e- ~/ D3 w .leds = da850_evm_tl_leds,4 Y+ T! O$ R6 `; Y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),. A M+ z: b- f8 S6 [
};
! ^ a+ f' _8 e6 `& F
, L( t1 |9 A. Nstatic void led_dev_release(struct device *dev)3 l4 y+ {. R, d Z
{
5 D/ f8 x( r+ O1 I1 [};+ u% j# W6 E% K3 r. M
4 w c* N- G8 _0 s; O; y, |6 O8 _# |static struct platform_device da850_evm_tl_leds_device = {
1 N8 m3 j' q4 }4 s$ [; G .name = "leds-gpio",* r3 S* R5 t' D' j5 G
.id = 1,
: i: Q9 j7 `; W+ ^- v# m; g! X: a% Z .dev = {3 r6 [2 @/ ^5 n! p; h- h
.platform_data = &da850_evm_tl_leds_pdata,* T7 |5 R1 `! R4 a& h& K! n, a
.release = led_dev_release,
# |9 X0 \# y+ N% V. h% |! C }& h! c6 q0 Y6 J" A
};
3 z+ f6 c2 C- m/ q/ l
E2 I/ X0 O5 D% q2 |static int __init led_platform_init(void)0 ~$ A! h& ]' P- P+ A$ k7 p& z. r
{( a$ {; ]/ ?7 M" ?
int ret;
9 J' ^3 z7 E+ L% N+ r#if 0
9 u) r. s: r, } w. n3 k ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) s/ Z8 Y' {% Q% y) T2 @5 @4 j if (ret)2 ^) X- Y0 `0 J# c5 m+ y' `
pr_warning("da850_evm_tl_leds_init : User LED mux failed :" P; _5 r# a/ P7 S/ c& n, {
"%d\n", ret);) n6 C4 b/ p( v
#endif
) h' A' C9 S( t ret = platform_device_register(&da850_evm_tl_leds_device);/ |9 B8 U' K& g$ z6 q+ j
if (ret), P) ]# Z0 {; B) a0 v* V. j4 }
pr_warning("Could not register som GPIO expander LEDS");. g- h# _6 x' s& q. k+ m
else
8 S8 v% G* [: g# C printk(KERN_INFO "LED register sucessful!\n");+ O. F# y9 `% Q8 h. W
1 T0 p0 z, l1 Y; h' h4 F6 P
return ret;
5 t! g7 X0 {7 X. W) x& i; c}
5 I5 A) K9 j3 ]1 u9 g2 ~
. g; A" J" ^( @+ G5 Bstatic void __exit led_platform_exit(void)8 O4 H( n2 h o# c% e; O j
{
/ u* A z5 z0 w/ X2 V2 ~, x platform_device_unregister(&da850_evm_tl_leds_device);
1 Z' Q0 Z P0 `. E8 s! {6 |. n. p3 Q% q+ T4 L
printk(KERN_INFO "LED unregister!\n");
- [- _7 \3 H7 n: ^; H& |% c}
; R. {1 Z% ? M- P" p. b$ q5 o. {: V
( D7 l6 X5 K9 Fmodule_init(led_platform_init);
7 h/ u. I- E! E, W& f; Ymodule_exit(led_platform_exit);; C3 x. B) s+ M* Y" v t( n! B6 w' }
" A" m+ a2 x- ?9 y: M( UMODULE_DESCRIPTION("Led platform driver");
# @7 O2 b6 O5 F: s A, I9 eMODULE_AUTHOR("Tronlong");
: O$ l6 W7 i/ ~) F! EMODULE_LICENSE("GPL");
3 z/ P j% g% q) [& M* s% m. D2 j( x; A+ P" b
|
|