|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 j8 ?$ @7 S* _, F1 ~6 k#include <linux/init.h>
1 k4 n# ]! i- w; Y; y#include <linux/module.h>
# ^+ U: }$ _& H# [1 v#include <linux/kernel.h>" Q2 x0 S4 o7 g' f3 [9 ~8 G' ^
#include <linux/types.h>
4 W+ |! b$ U# g/ v) \#include <linux/gpio.h>
4 f6 J& i' I' A- D0 z3 K#include <linux/leds.h>1 Q$ N) m- h# i( f
#include <linux/platform_device.h>/ t b# y. b. j
; ~4 D1 s- @# y* m6 a& `: e f#include <asm/mach-types.h># S* U2 R7 ?. z( j: m) {
#include <asm/mach/arch.h>4 X( n( J. j2 Z8 F8 M
#include <mach/da8xx.h>
0 k3 x; E* ^" ^1 F5 |#include <mach/mux.h>4 V2 e. G: m+ x- L2 o, a
7 B+ H! v/ v5 C1 J" k# [$ E
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 X4 w$ Q6 v. a) G: b
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
; c4 P! ?% n$ d% H3 W/ P#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, T* |' `: _/ f7 I. e( J#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 O5 o' M& b8 G9 H" R8 Q: S) l: b
3 x! l+ A8 C6 N- ~' E5 a5 }9 i, K3 i3 Y/* assign the tl som board LED-GPIOs*/" o6 T8 M/ {/ ]
static const short da850_evm_tl_user_led_pins[] = {2 K5 ?& `4 t7 I e3 Q0 h! m
/* These pins are definition at <mach/mux.h> file */" ?* }& _- W0 V- E% _/ ^5 }
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,6 z, W2 v8 X8 C* n, Y
-18 G0 P3 ~; y" X% S7 b
};) S, \2 O! K0 i3 G( u
4 E" b# x7 i3 ]4 k; Xstatic struct gpio_led da850_evm_tl_leds[] = {1 D5 f0 ^* ^9 v" Y6 E' J2 C
{2 D6 h8 M( ^6 z2 i2 d
.active_low = 0,3 y3 E, z% D. R2 T+ n% p9 l& j3 _
.gpio = DA850_USER_LED0,
+ E8 {0 f- ^: h0 j* j4 e .name = "user_led0",
9 h9 e4 J( N1 F) i7 N .default_trigger = "default-on",
: _' l& O& \( v- o7 {3 {6 z" ^ i9 o1 s },/ ?. y6 K- t1 K: @! a8 G) H \
{' O$ ]. b9 i4 ]( {- ~/ O3 I/ x
.active_low = 0,
- Q# n" g$ C6 ?" L* s8 X .gpio = DA850_USER_LED1,+ ~7 T3 ~0 e& M( I# Y
.name = "user_led1",
0 A9 i8 _$ ^* n( u4 V" H) R, `0 f .default_trigger = "default-on",
4 h5 H4 I: t0 u( n! @7 i9 @- g1 g },
, P/ G& A4 i. Q `( R. e2 o {
- d3 E* Q% W. k, P+ ]: |) T .active_low = 0,6 b9 X" R8 d8 Q0 x# l4 K
.gpio = DA850_USER_LED2,0 b$ i! Z1 r' k3 T" y) R
.name = "user_led2",
) Z" u1 I8 G5 [- d( O .default_trigger = "default-on",+ }7 F5 h7 C5 O# m& |
},
; e* `6 [ u6 J( N/ ~& K {0 H( g: x( q: L4 s- q
.active_low = 0,
1 i3 V8 F- x- h# ~: T7 g .gpio = DA850_USER_LED3,6 R ?2 v2 e( \% K2 q* g1 e5 W
.name = "user_led3",8 t6 Z0 N. p1 L" k, z0 H
.default_trigger = "default-on",$ v; j3 w" I' m. C2 Z9 Z+ e' k4 ]
},
: w# Y! N) H7 E0 k! D6 s7 |};2 ] I& O2 W/ w) q L7 X8 }
9 J9 S2 r1 C; M3 T% Y, q0 g& ?; b+ L9 Jstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {5 m! k, O1 F5 S6 c C
.leds = da850_evm_tl_leds,4 h" t, i& @# L7 K/ b
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 \4 _9 Q* E: ?) a+ J1 Q. A
};
& x. Z* ^6 Q# ]3 t4 {6 |( }7 w! ?6 I' f4 ~8 D! Q
static void led_dev_release(struct device *dev)* k5 v/ a# m7 z& |
{! Y1 }+ z8 J( _* ?9 q
};
. H4 o Q7 ^4 _3 M0 g. M2 z; k0 }, p) Y' }5 b' p. \- w4 z
static struct platform_device da850_evm_tl_leds_device = {; C1 T8 V. O1 B i0 E1 i: n) a
.name = "leds-gpio",0 r/ o f+ W! p: o7 h* z
.id = 1,2 M8 ?; N4 v1 W+ H" I
.dev = {
, A. v' o$ `! c& o4 m4 k .platform_data = &da850_evm_tl_leds_pdata,% ?% c8 E2 P" E8 y
.release = led_dev_release,
; O! D* e$ i3 m, o: ^# }. ~ ^0 e% Y }+ d2 x7 I" B" ?( b
};
/ {5 |- i8 }4 I* A, G) n; O+ J& a
0 g2 S6 e0 x9 j: U& ~static int __init led_platform_init(void) F4 N- J8 W M
{
" K4 I' `8 T* J# h2 ~8 C/ m, X int ret;+ N# z% U$ b: y/ O; D0 W" U' o
#if 0
, r0 X7 M$ n5 x& u8 M ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, \4 T' k! b8 Z0 y1 @, D% e if (ret)0 f" S- a6 x; `& I. C# i
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( @' ^$ _9 v: @% E, I
"%d\n", ret);
/ w4 X# D1 m- _9 y& e#endif
1 u/ y, c. W4 k4 F1 D3 ?/ B" K ret = platform_device_register(&da850_evm_tl_leds_device);
9 ^0 D: z' G: Z' k" o1 q( t7 ? if (ret)
; k- }+ p) j8 w0 p; d1 v1 O2 X) Z pr_warning("Could not register som GPIO expander LEDS");
. R- S# }* B) N else t8 u3 p. Z Z# G
printk(KERN_INFO "LED register sucessful!\n");
: G, o( P$ M$ \- }4 C v+ s9 A F+ y) p7 Y! m) L
return ret;) q1 Z( z) J* P. Q
}
% Y/ l l5 ~, {
{# @9 t: [, L) X Q6 lstatic void __exit led_platform_exit(void)
5 R5 n$ I9 @, m{ J1 I1 z* r1 c9 X# k
platform_device_unregister(&da850_evm_tl_leds_device);, U- @; {$ ^6 _. ^9 X) J
& P3 Q$ C3 B7 Z! x! N$ `) a
printk(KERN_INFO "LED unregister!\n"); H! i$ z# ^4 F4 \6 y+ C/ v
}
h; F! @0 Q+ k- v, m3 ]$ ]! z2 |, d; L2 q2 b
module_init(led_platform_init);4 l9 ~2 D( H; i4 ?+ q+ ~
module_exit(led_platform_exit);- O& `- V2 F) ^. \
& J" B% p2 m8 @. W$ lMODULE_DESCRIPTION("Led platform driver");
- r' t0 d1 t$ [3 K( `: Q/ Z# [MODULE_AUTHOR("Tronlong");
5 n3 t3 A% ?# VMODULE_LICENSE("GPL");( b% W! A0 B1 r" S( F; }, r9 C) X/ k
& c- \$ l2 u8 H5 d" Y; O
|
|