|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) i' ?* G! k# ?8 v& h% p; n
#include <linux/init.h>* o/ q5 B* C$ y/ }4 z" ?/ L, |. {# Z
#include <linux/module.h>
5 I3 k" p9 r7 G$ B3 [/ x& p#include <linux/kernel.h>
7 L9 y- T9 d4 b& |- p, |#include <linux/types.h>- s5 _+ c0 i4 H% N2 T
#include <linux/gpio.h>
8 R8 a- i' ^/ C+ d" V' {#include <linux/leds.h>
/ O) M, M9 y& I#include <linux/platform_device.h>4 B) a% n8 r& }9 ?
5 g1 p( B" L5 y% m) I+ M; p
#include <asm/mach-types.h>
( A- _0 r5 G. O' V2 ?- Q#include <asm/mach/arch.h>
" j: W: N6 S: U. e% O! H# T! h N8 N; |#include <mach/da8xx.h>! A, U# J T+ z
#include <mach/mux.h>8 D7 `9 a C" H2 t8 s
! E. g1 r% \. i* k- {#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
3 n* F$ @/ N0 x, z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 C% t5 U# ` C& E#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)( Y* G/ L8 s" \) `' S, F/ ?. ]
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& c. h0 X" \' t" ^2 h4 Q% n) R7 [; o t- c" d: E6 m
/* assign the tl som board LED-GPIOs*/
3 M7 _: U! j8 o3 k' I. l8 ~0 [static const short da850_evm_tl_user_led_pins[] = {
T8 U" A, L6 O: C /* These pins are definition at <mach/mux.h> file */9 y* r! O0 L# E7 L
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. Y" _# t' s: u1 r
-1& a3 ^, i( r! F/ f
};5 P# f! _3 j% d3 W: P9 z
2 V) U& ?# s( `: d
static struct gpio_led da850_evm_tl_leds[] = { a& c. Q7 I; L; ~- P9 C
{
2 D# G7 P- }5 E6 _, {, B .active_low = 0,
! e) f$ n( e: m .gpio = DA850_USER_LED0,+ J! f9 I! Q# U% g. R" a6 W
.name = "user_led0",
* z3 ?, Y* r, p. e8 H. i6 Z .default_trigger = "default-on",
; i3 T' u* C" @; R+ G8 r/ p7 \ },4 m. U" ^; P- x3 W# ]
{
+ R# o: z' @/ H' [: J .active_low = 0,
$ q; | T% Z+ @8 y8 F .gpio = DA850_USER_LED1,
/ d" g9 u+ T+ | F2 V# n R .name = "user_led1",
( ]- r5 v" i+ ~, s6 N! q .default_trigger = "default-on",8 r: u! p( r( N; Z0 A% x( Y
},- z9 g ? T' q' p; N( y
{
" {, G; s4 T$ s% f& V& P .active_low = 0,8 G" v/ F k: l. K$ ]. s: a% X
.gpio = DA850_USER_LED2,0 h X L- |* e! ~3 v
.name = "user_led2",: ]$ W5 m9 C& L# t; Z
.default_trigger = "default-on",
, |: u1 W. Z: S% Z1 \# H; k/ N },. O9 c" y5 v4 H! K/ |
{: M1 E6 ] ?, M) z; x
.active_low = 0,
' v p3 d6 s/ i0 T- @1 y .gpio = DA850_USER_LED3,* E) }- y: }) |5 n0 A! f$ c
.name = "user_led3",2 {' A' t# T9 z3 c: ?$ H l7 z
.default_trigger = "default-on",: I. ?" n# f5 u0 v& K
},
- ]" L, @. G! |. ^% k};
1 p) f; V* [# e) Q3 O/ J5 C- q3 {% b' B
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 T1 w% ^" k4 x
.leds = da850_evm_tl_leds,
5 B7 W' i$ i9 o6 @0 T- w .num_leds = ARRAY_SIZE(da850_evm_tl_leds),: y) @( S5 H$ L4 C. A
};* F: E7 ^) k4 N5 S/ w/ O7 o
' b/ g. B8 } [5 I: T0 Estatic void led_dev_release(struct device *dev)
0 a) b/ u6 S: S! _/ C{! {- y8 B) Y$ r+ F+ d
};
1 h' l5 A( v; z ^# M& V! E
) o0 u, y9 x" C$ d$ ]static struct platform_device da850_evm_tl_leds_device = {) E$ y( A0 m% b3 D' v
.name = "leds-gpio",
% p5 j0 o4 c8 E" |% S; B( U! K1 x .id = 1,
& r5 h1 E/ h9 t; G/ b4 {( z! p .dev = {1 Z7 \/ T: C! u' P2 G
.platform_data = &da850_evm_tl_leds_pdata,
# |: o1 @0 T) Q; n0 P7 q) Z .release = led_dev_release,
; q- u7 ~, E* C: \/ } t8 H/ E }
7 x5 j$ y! Z8 O- y D" T& x};9 W; g9 t K4 U, q
. _+ d) @! k9 C* e( Z5 Qstatic int __init led_platform_init(void)
0 ^1 P% Q* T" t* ~- }. d{/ ~- f0 A6 P6 i1 G
int ret;
' q! ?" y' L/ U2 Z1 V4 {! _. Z#if 0
. W- w& C) ~& X! `" Q, u ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 {$ f# z4 W- s& H- ?5 v, G if (ret) x2 p: Q7 O v! H& p
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 R7 L6 O: O% s4 H: o. u0 S- I "%d\n", ret);
+ b0 }$ z; c( b3 t- } o* A#endif. |) O; u0 U4 O z3 r) ^8 P' f0 O
ret = platform_device_register(&da850_evm_tl_leds_device);. t a( P7 G U
if (ret)
# e3 P0 `: |4 I( w& o pr_warning("Could not register som GPIO expander LEDS");, c8 H5 k0 G2 B
else; V$ j% g4 G( g2 X' P$ v8 \
printk(KERN_INFO "LED register sucessful!\n");
3 U& p s# }, R) s( o0 V3 j9 J8 B, I8 ]0 L6 Z5 p# n$ X
return ret;
5 _ J# `& b# d6 t# r1 ~4 p% n}3 B% Y- W* a+ Q; {8 C: g! U! R
" r2 o, ]) N; H; |. S3 e& Gstatic void __exit led_platform_exit(void)2 X5 G! k0 n. ~6 j' Q) S0 J# V
{
4 Z9 u8 l+ D" H1 Q$ t% | platform_device_unregister(&da850_evm_tl_leds_device);
3 I6 R6 f. p0 Q, i4 q) m" i* h- S$ F8 n3 L( t8 L5 f# i
printk(KERN_INFO "LED unregister!\n");+ ]" y7 p' H) J' e
}8 v4 b5 S* V& F* Y# Q' F
2 S) h, o6 s2 A) C- f& C4 D
module_init(led_platform_init);% J) B% d* ^. i+ q- C6 B
module_exit(led_platform_exit);
7 O6 i% C( ~; N& l% T' m0 l' {% b2 w- `* R7 y& F
MODULE_DESCRIPTION("Led platform driver");
0 x/ p% B# Z% F. h8 z% M, X2 bMODULE_AUTHOR("Tronlong");
- v, s. I. B8 y8 n' u2 eMODULE_LICENSE("GPL");* L y4 J: {0 j) ~1 U8 h6 P
+ X& { D$ M, w, A5 w9 `- I
|
|