|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* r& F7 }3 z8 z8 E
#include <linux/init.h>8 ^& {9 C$ `3 k
#include <linux/module.h>
+ q) c4 c# V" b! y#include <linux/kernel.h>
/ a0 A) k& x' J$ z" r#include <linux/types.h>
: \, E7 h* Z; ~+ w+ ?3 l& i#include <linux/gpio.h>
, R z4 z9 z7 A5 x7 {6 y+ \#include <linux/leds.h>
1 J w" {/ J: R; n5 W0 Q) T* h1 |#include <linux/platform_device.h>
( D1 D; M" y& G, `, Y3 {9 M2 `$ s$ z8 \5 `* c5 Y% ?
#include <asm/mach-types.h>4 O# }5 d1 M" X# r* u' p5 Z8 ~, n
#include <asm/mach/arch.h>/ m4 _/ y# \+ N2 ?9 U
#include <mach/da8xx.h>
k. k& U& L. V" y0 x1 E' a& v, ?4 e9 O#include <mach/mux.h>
" V% k+ w8 a3 O, h5 D1 s. v+ P
1 X* M4 A8 w, e3 ~, Y& @#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ l8 [' a: f- T0 i7 @8 G6 O$ u
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
. e. r1 d9 q$ y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* K E- q8 i( ~! E" M; V7 E" Z
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)4 k: o0 x5 z9 q3 ~& O& t# \$ i
$ p2 t' {* Q' k/ ^5 H9 ]/* assign the tl som board LED-GPIOs*/% U" `( a0 q2 F3 U! z
static const short da850_evm_tl_user_led_pins[] = {
6 K2 H" f6 [) b# {5 p, W' n: l /* These pins are definition at <mach/mux.h> file */% E9 m' O( A, ~/ o- \2 w
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, ~6 V. I/ ^9 y0 t0 J
-11 G3 J# g- F) r( R0 A/ I! Q$ S
};7 t; K, m( ?6 [- I
) d8 N0 ]9 ~: r/ Y. Z: R+ W( kstatic struct gpio_led da850_evm_tl_leds[] = {5 g/ U( ?7 F. R
{! s0 i' {; v8 b; R7 f: _4 P
.active_low = 0,) s& j5 [1 ?+ V4 m- U7 a
.gpio = DA850_USER_LED0,# o0 U5 n, b1 I) Q3 Q; J
.name = "user_led0", f" s+ ]9 v* {
.default_trigger = "default-on",3 y6 a' K# p$ r% S" n/ m5 q, E
},- s) Z0 L, F0 s7 N! v
{" W H' a. u- S/ k0 t) q' t3 p; L
.active_low = 0,0 |5 k5 y" }7 G9 ^3 E
.gpio = DA850_USER_LED1,
' V! e1 b* T0 G, U# }0 W2 l .name = "user_led1",
+ I% Y) p* F5 d0 i .default_trigger = "default-on",
7 K5 h- c- ~) T. j1 B7 r# | },8 o* n1 H8 u+ m, h7 Q
{+ z. B6 D) A" M( j% R; J$ M
.active_low = 0,
5 E w6 o3 n0 u! C8 @ .gpio = DA850_USER_LED2,9 K6 Z7 T8 K, F9 f' o: m S
.name = "user_led2",
1 }, h. Z/ U9 b/ B/ } .default_trigger = "default-on",
$ g; ?" e) A) K4 }; v6 T2 K+ v S },0 Q- u2 ]9 j" b) K" U9 I
{
; E+ y7 S# [ E6 l4 ] .active_low = 0,
& I! }& D+ P! A$ ] .gpio = DA850_USER_LED3,1 ]$ Y; K) V7 Z' o
.name = "user_led3",, K5 @$ p& m+ g8 ~8 \6 g
.default_trigger = "default-on"," X7 i X/ Y8 x! @/ k; n
},
% b3 p6 a* y/ M2 e6 ]5 ^4 _9 n};" |; q/ }+ t" |0 p1 K" P0 K
+ j4 S# |3 h6 @+ K$ l+ h+ s4 ^ R
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# ^ s0 F R% u) n$ ~& ] M
.leds = da850_evm_tl_leds,
! o, u1 x3 {3 c5 I2 q" R( w .num_leds = ARRAY_SIZE(da850_evm_tl_leds),( H/ Z5 C9 [1 {
};
6 I, U5 z2 k+ p
. M( d, o9 Q) S( Gstatic void led_dev_release(struct device *dev)
8 ?1 n1 j" e+ _/ H% F9 F9 f- s{- J- Z/ ]$ r4 v% V4 p
};! K6 a8 p Q Q2 |0 v1 V$ [2 |
- z, {" p4 Q. t
static struct platform_device da850_evm_tl_leds_device = {
p J. C- @* K2 @- g d .name = "leds-gpio",% H7 Z/ ]5 G9 M% s/ c1 a2 V: w
.id = 1,2 A5 D0 y+ W4 J; Q
.dev = {
. L9 Q" P- e/ p7 z9 n1 A .platform_data = &da850_evm_tl_leds_pdata,
# \9 z% g& F: k1 u; M9 R .release = led_dev_release,
& {/ \+ v6 H$ }. Y4 F" r/ x$ K: ~ }- H& b* ^5 ~- w
};3 Y% n5 r" T, J, v& j$ D k) C
+ ?- @4 _2 ^& v' C9 |% h; a) Rstatic int __init led_platform_init(void), X$ n" P6 }7 C% q% l+ C9 r! w
{
( K" d V+ ~" p" j; F1 q, n int ret;
U! A5 F9 n. k* \#if 0" ?2 A2 [) l* n% T& X
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- \& T+ c1 Z L3 k+ k1 K if (ret)
7 a6 l; h0 O4 G pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: p/ N3 p& S" S' s8 @ "%d\n", ret);
- ~. m G. r% N- t; ^( w#endif
& s- u. z, x- e1 G4 K ret = platform_device_register(&da850_evm_tl_leds_device);
3 `/ n3 ~0 l3 n& M5 z5 R' F) j( z* A if (ret)3 M# C: _1 s* @3 L. W
pr_warning("Could not register som GPIO expander LEDS");$ f4 q2 _3 H7 X1 x" a) K' ]( }
else
- X# i# G3 B# S1 R( L' N0 ]: v printk(KERN_INFO "LED register sucessful!\n");5 d: S$ `# f& j A
+ Y4 l O: j V; Q% P, I- M1 S! z3 \ return ret;+ p4 i0 {. T5 B
}
3 Q; Y7 C6 _7 k" @8 t
3 A* O2 I7 t* a* V' m6 U2 j# mstatic void __exit led_platform_exit(void)
% l+ B2 T( [* x# q& }1 B7 r{6 u/ z" m1 v8 C' G) m
platform_device_unregister(&da850_evm_tl_leds_device);0 {7 l0 E7 K" }6 V
9 I( M% J3 X5 m& R
printk(KERN_INFO "LED unregister!\n");/ y4 j) h8 N+ Y i& T0 O
}
8 g7 _" t) F& H" [! k" Y
0 ?9 x2 G0 O7 A U# Hmodule_init(led_platform_init);7 Y6 H# M/ |0 w' R% X( ?
module_exit(led_platform_exit);% e' o2 v2 n( U
B9 c+ z" g. i* Q# F5 n3 [MODULE_DESCRIPTION("Led platform driver");: f6 p% c: |0 H" D
MODULE_AUTHOR("Tronlong");
$ O, U: E2 y( F! c) ]! EMODULE_LICENSE("GPL");" [+ `4 Y; l# e0 ^% T
; G5 r; S7 \: S/ H
|
|