|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& @; n R- U( Y9 P#include <linux/init.h>+ F' f1 ~! b0 j9 m" k4 M& L
#include <linux/module.h>9 h/ f" r8 n+ l
#include <linux/kernel.h>
! |$ {$ ~" d3 w6 T# A" b" J j. c#include <linux/types.h>
" [9 ~. y7 K# g' ]#include <linux/gpio.h>
( L7 I3 P+ @9 P: ]. @& t#include <linux/leds.h>
; i2 I( T, b, |3 }3 E2 h( Q#include <linux/platform_device.h>6 W7 J' |: {$ m; \/ u7 L
& ^4 k" d1 W1 c* ?# y4 i- v' c3 {; k
#include <asm/mach-types.h>
7 A; H5 p3 a/ A9 y. c4 [! @#include <asm/mach/arch.h>
: @9 S5 J; e4 Z) r( {; x) F* w#include <mach/da8xx.h>
$ q# ~( d0 F. p) T7 T) H#include <mach/mux.h>
1 ~- U2 _& s$ Q
$ `% e+ b7 Q' k% T T#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 j# S5 M2 A7 d* ^, }' e
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, q, X( D0 ]' q" d* q( B+ J#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; {7 i+ I. Q- [2 E! E! s9 M& W#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ s$ ^# t% A; i1 y: G9 q# b: A4 I4 l+ L3 q0 F
/* assign the tl som board LED-GPIOs*/
) g2 R8 T2 L% w, B4 A- hstatic const short da850_evm_tl_user_led_pins[] = {
, t- p/ |# ^3 d2 m /* These pins are definition at <mach/mux.h> file */1 a2 W: `5 u& Z" q' h8 F2 V2 j
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,0 H& @) h+ [- O
-1! L- U- ]$ X7 ~( S
};# J ^* |! m0 |" }
* a& D4 V7 p' Y% [static struct gpio_led da850_evm_tl_leds[] = {) b- a4 ~1 u3 u# r
{2 @0 ~8 C( _- x* r$ H% h
.active_low = 0,
5 A% h! O* U k& q" ]$ [ .gpio = DA850_USER_LED0,
% X7 i5 u' }3 e" V, H: T! J7 i, Y .name = "user_led0",
1 h$ f2 P$ M: o' a( X. o# x) V .default_trigger = "default-on",( A% g! p/ p" x1 T$ G0 M( p) M2 n2 d( O
},
1 t3 r. X) V7 S+ ^% ~8 }& b {2 S* {8 g# d* i) |
.active_low = 0,
8 E2 X( j0 L0 g$ v8 i .gpio = DA850_USER_LED1,
0 s/ r& V2 K2 m, K& |0 n# r& e .name = "user_led1",
! b, g- F# }1 D* U: m .default_trigger = "default-on",
; V1 T& ?" R7 O },7 C3 A2 a, ~3 \0 s% J) m# y
{- _* u! d$ ]. c, u1 M% D7 J
.active_low = 0, A3 P! H& R0 |3 i/ X3 y
.gpio = DA850_USER_LED2,1 L; p# y- A8 [
.name = "user_led2",
4 ?" P- A& Y5 y ?, \: [* C- a .default_trigger = "default-on",
7 {3 Z! T' T9 o4 Z+ ] },! E9 h1 f) t8 P& k' Z
{
. V/ ~! c; C* _ |' a .active_low = 0,
6 Q# w/ L8 o( G% u# H .gpio = DA850_USER_LED3,4 i$ S' A* U% i
.name = "user_led3",3 H; |$ [/ L& N! d, s1 A2 C
.default_trigger = "default-on", j0 z: H6 x+ B
},
, F: h4 v! r) H" y1 d0 M4 W};
+ g* j3 P5 p2 R- y+ U
9 ?8 F- K, i9 y7 E$ U3 \; ]static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" z7 F- f9 v0 |: [ .leds = da850_evm_tl_leds,: r9 Y! z! k4 f4 f
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 z7 f$ _/ h5 S
};$ D* ?# ?4 ~( ~) h9 P) w
- n g9 m0 ]5 }7 t; I" ?7 ^% a
static void led_dev_release(struct device *dev)
# V6 F( a a( q1 ]8 ^{" U* @. T9 k- P$ @6 z+ J
};
' |+ X0 y$ u) o% P
( K( f, ?+ e, u* p- E0 Bstatic struct platform_device da850_evm_tl_leds_device = {
2 r, x$ M, T/ x( R .name = "leds-gpio",
: w. ~) r3 i5 _) w8 c .id = 1,
# \, q1 R" R) C5 B: j5 z, ~ .dev = {/ |% H# m% w2 m3 t( r; W& @5 K3 X
.platform_data = &da850_evm_tl_leds_pdata,
% l) ~0 h! _( f& L .release = led_dev_release,8 A, y* w2 E. [9 _/ V& x$ @
}' n: q) R9 q+ l X* W
};& \0 ?5 F3 F/ r2 A
/ ?, O# H* i( S8 [2 s
static int __init led_platform_init(void)" N0 b. X1 T5 V; o* x
{7 z w& J) l \' m7 _2 c+ \6 b
int ret;
) m5 p6 X% F/ X! r [. _#if 07 M k- f! o7 l7 \/ u) i% ]2 a
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 i5 t4 e- p) R
if (ret)
$ ]$ E) F7 |) n4 u/ S3 f3 ] pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: ], j0 `2 P8 J' L$ Q "%d\n", ret);9 U4 q/ J2 D/ a' e1 s) |
#endif
7 X/ p) ?) m7 E, ^! B- L ret = platform_device_register(&da850_evm_tl_leds_device);/ @! f$ l& r6 g3 ^
if (ret)5 I% K2 f a" _% O5 _) h& d
pr_warning("Could not register som GPIO expander LEDS");
6 E+ ^9 }* u0 d/ z else+ q. T: q1 R* v8 V5 C
printk(KERN_INFO "LED register sucessful!\n");
: T/ ~3 A: h& S1 o2 x! I3 H1 J" D' o3 {5 y4 `* O
return ret;- r( [! f/ s0 g, Z5 _
}' w% E) B6 A! v/ Y3 y
2 C8 O. R/ a' c1 g
static void __exit led_platform_exit(void)# Z- V% [, l# ~# D- h
{& K$ h% q0 T: }3 V% g: H
platform_device_unregister(&da850_evm_tl_leds_device);
% \( f# C. L1 \% `, I4 a# C @0 Q9 J4 w0 e
printk(KERN_INFO "LED unregister!\n");. _# f. r+ a- [
}
; C- E, `' z0 i* R
. U- [- ~+ o0 C4 @" U0 I- S# k- y( ~$ {module_init(led_platform_init);0 W1 o7 ]+ Z' w/ K w
module_exit(led_platform_exit);
; r' \! a% ], ?! H2 p0 i
6 `5 s2 B: y: c Q: `5 HMODULE_DESCRIPTION("Led platform driver");
' T: I | c4 W9 C: N5 @MODULE_AUTHOR("Tronlong");2 O" C: j' a# F' p ^; _8 z
MODULE_LICENSE("GPL");0 r: ~3 m1 g$ f' D! F# Q
0 ]% _; X: a* D0 h6 M3 j |
|