|
|
求大神给下面的程序做注解,请稍详细些,谢谢。4 t- y/ V) T* E/ F5 V
#include <linux/init.h>0 J, ?* M) O1 f# A
#include <linux/module.h>
3 Y* ? r7 u `' N' D# S#include <linux/kernel.h>
4 U' s5 ^4 J$ d#include <linux/types.h>
4 Q( I1 y2 h9 l$ E! x5 f#include <linux/gpio.h>
$ c! e6 Q, Q ]: g" R: i' }! C#include <linux/leds.h>+ {& m/ b+ L6 @4 V6 ~
#include <linux/platform_device.h>
" D2 }: [+ ]4 s
, I6 h+ Z4 P. n* |. O4 J8 }#include <asm/mach-types.h>
1 ]( n U: K2 L/ i e/ T. g#include <asm/mach/arch.h>
& g Y o( m" P% ^#include <mach/da8xx.h>+ A' R* L: ~ K+ p7 D. o
#include <mach/mux.h>
) u! O0 P, g4 |! V. M& L$ e& z [3 I* P
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" S3 ~, Q k& ]! d6 r
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: z% D- H( L- ]! [% O#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 r- E! H, P. @4 \" F
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, S& D2 s) h+ b7 z, _, E
/ c) A% n' u( Q: D( @/* assign the tl som board LED-GPIOs*/4 L7 h8 Y. a# y8 |# @9 f. s }0 ^
static const short da850_evm_tl_user_led_pins[] = {
, J K/ P# E* O, z. z. U4 ~- T /* These pins are definition at <mach/mux.h> file */
E8 z* G( Z, \ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 e1 w1 [: s. k. g0 a% K/ s( ?" v; x
-1
8 p0 n* ^) Z' b4 `};; l2 _8 p Q; ^/ Q, V7 J
* ]4 p% ~* ?" z2 @( z; ?static struct gpio_led da850_evm_tl_leds[] = {& f: @0 x1 e8 `" n% ?
{8 m: [, R8 v# n7 G$ o' C0 B6 o! m
.active_low = 0,0 X7 y/ c9 b: z, _' l# ?3 [! B
.gpio = DA850_USER_LED0,1 H, e! Y j! G& o. d* g/ z
.name = "user_led0",
6 W7 r6 F5 a- Z- c4 C- i' g .default_trigger = "default-on", q. D# y6 V P% V6 n6 e9 ^
},3 t0 W/ m% c% x* ?% `" I1 S( [8 l
{* ]1 n8 D* D; m0 F7 q2 c6 {. j7 z6 j
.active_low = 0,% N8 x6 q7 o9 ^5 ~, G. k
.gpio = DA850_USER_LED1,( g/ _ r1 z4 l* M
.name = "user_led1",
$ Q# r) d, j- x. g2 h .default_trigger = "default-on",* d) X: C. N) T
},
1 M: f. q; i* u+ \5 H) m {* a' p8 a3 B# s6 [& K
.active_low = 0,* V- }7 E! T# f9 |2 }) [
.gpio = DA850_USER_LED2,, V# t2 q+ A+ p. s" X9 i5 M7 _& ~
.name = "user_led2",
3 O: I6 y; V% i" N+ M9 C5 C4 n .default_trigger = "default-on",
7 w+ l) ]. A/ ^- G; q },; \) ] N& n% w
{7 b7 @- q% M) _, X3 e) n
.active_low = 0,
- w; q; ~( X$ I& [. w9 w .gpio = DA850_USER_LED3,
0 I0 I! c( I" e/ { .name = "user_led3",
. F. r1 N2 y1 O6 o; b- j% [ .default_trigger = "default-on",
, Q/ w* ~( O5 `4 S" q0 F: Q },5 C$ _* O+ {) ^& V8 p+ X& E
};& b. {! H9 s' d9 H3 k$ d1 R. j
4 E! p h) A1 v, T* X+ ]1 _
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {. a6 q/ ? E1 {& {$ c- f
.leds = da850_evm_tl_leds,1 t% P! w7 S. Z) i7 K
.num_leds = ARRAY_SIZE(da850_evm_tl_leds), ]2 z5 _; j# d/ }# v. @+ R) G
};
) b0 x+ x! k2 X' l) I# j0 O
, T2 d3 J( H# M+ p& k* `static void led_dev_release(struct device *dev)# K' p) B% \' G/ ~
{
$ \, i- L P* D) j) ^};
. D; |0 Y( {! ~
& J* Y$ E F# }+ j# a1 rstatic struct platform_device da850_evm_tl_leds_device = {! \- f1 E/ g) c& b: W( c
.name = "leds-gpio",
, E8 U- O/ y( G& p .id = 1,- w* P& o2 T. k5 I: Y
.dev = {
( e v1 }& Q- {* w# ^) o6 x .platform_data = &da850_evm_tl_leds_pdata,6 g; \/ g6 I; j3 {
.release = led_dev_release,$ Y a* }: e8 X+ c4 m! B
}4 Z( W: Y. a v& e0 b: K/ O
};
- L( i0 n& a/ a+ T# f; i
, C W N# Y: B0 `, \; r. Q' fstatic int __init led_platform_init(void)
+ J7 p4 O$ C+ q* F. N{, D3 v. {4 R2 G: X7 `& k
int ret;
# i, v T @% q: ?2 y#if 0% f" C- }: i' J3 l5 l. G% d
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- Q0 x2 T% ]- ?9 c: Z) i4 @ if (ret)
) Z' T5 i! [+ g: | pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 m; k( s* z n7 Z. l1 J( W
"%d\n", ret);
9 g6 A8 x) P9 \3 `7 T& x#endif) G& Z" b* G e1 M1 x
ret = platform_device_register(&da850_evm_tl_leds_device);
! d. M$ T0 ~: y if (ret)
& u2 |9 B- }0 }* p5 d pr_warning("Could not register som GPIO expander LEDS");5 J* h6 ]3 V$ w) [
else
' h! a1 S" T- N. G. Y' {7 k printk(KERN_INFO "LED register sucessful!\n");" n; A, ]5 v( M5 I% }% ]4 C
. O8 `+ a+ z8 v% e, L: I3 I return ret;) O5 `2 ^8 c1 Q8 | r
}
0 Y9 |4 M5 m8 L9 }5 E, z- Z1 `: l: ?9 ]6 ^
static void __exit led_platform_exit(void)( R5 `3 a: q. Y
{/ p7 B4 U, ?3 p" N. c% q
platform_device_unregister(&da850_evm_tl_leds_device);
( `2 k# R6 W: P. A+ O9 o5 U5 Y2 z. A* T( g) f2 X& \
printk(KERN_INFO "LED unregister!\n");# l$ h& p, b* V% ^5 f; l
}
/ a/ H. \% h2 N# M' o2 y! L/ F! O; T( {
/ d) k/ v$ U! o) D# d5 q, C* Imodule_init(led_platform_init);( J& L; v, g. z3 y9 k" i! Y, M
module_exit(led_platform_exit);! O+ j' ^' F: K) @8 r, ?
% ~# q( @' C: r% YMODULE_DESCRIPTION("Led platform driver");
- ^$ E* Q6 [( kMODULE_AUTHOR("Tronlong");
2 ] @2 R+ i3 Z/ ]MODULE_LICENSE("GPL");! ~; s: x$ O8 c3 x+ ^6 x
8 A! q; t/ M, \: c# l: X |
|