|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* t, k- M8 ^" _6 F0 o6 _
#include <linux/init.h>& V0 m2 d3 i- e
#include <linux/module.h>
- O+ n( f! ^! Q; {#include <linux/kernel.h># w+ x( ?2 \1 ^6 t% r
#include <linux/types.h>
+ c$ g& K: j$ A5 J. q" r#include <linux/gpio.h>
! V" M9 M# u2 j7 E#include <linux/leds.h>
& s6 l+ s* ~) d+ r! b9 e#include <linux/platform_device.h>) t# ?& ~7 h' a; B$ p9 u
2 R$ o+ F2 g1 ^- v; T
#include <asm/mach-types.h>& T! ~8 t2 d1 n2 }
#include <asm/mach/arch.h>
8 I( P" v& H- }. |2 j#include <mach/da8xx.h>
. K: M6 e( M4 M, a% V- P# a#include <mach/mux.h>2 E! V" Y1 e9 r% X- q7 c
' J R: u7 R* O+ w( a4 ^" _
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% T x) S8 q- J6 Q- ^
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% E( G( h$ W5 H H, r
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" m5 L, ^3 C4 D#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 ?, a4 e% ?( ], f* W; C! v
- M1 L- K( T" u/* assign the tl som board LED-GPIOs*/
8 z6 @) i! ^8 n0 i6 lstatic const short da850_evm_tl_user_led_pins[] = {& ^8 W/ Q% A& ~! \$ M) \9 |/ l
/* These pins are definition at <mach/mux.h> file */+ Y9 ?1 G" A `" f& Q; A, W2 C
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 @. y+ G, H8 P) V n3 O
-10 c- K; `4 P% {8 t" d8 y3 ?' x
};
9 b. c8 y, M O# r& f3 N3 e3 [* b& v! E0 X, Y8 N
static struct gpio_led da850_evm_tl_leds[] = {7 E0 y [; F9 I& y
{
_6 A% L: P- U3 ?5 ^/ Z .active_low = 0,
6 R0 ~, [ Q/ b! C .gpio = DA850_USER_LED0,+ [, c1 a1 ?# r, ]: T
.name = "user_led0",
" q1 v" d1 S$ W6 Q .default_trigger = "default-on",& G+ E2 X( e2 h+ p1 |' H) b
},
/ `& n8 _" o1 t* D {
+ L) S( j3 B H9 b, @: e/ Y .active_low = 0,% d6 ?9 `& ~ w
.gpio = DA850_USER_LED1, |' ~5 @, _) m* r5 B
.name = "user_led1",
+ g. |8 f; w2 O" B5 X .default_trigger = "default-on",
; X! [0 i) h: I/ p },% d3 p2 M0 \1 E1 I7 ^: z$ j' c" t
{
4 a: X! ]8 I, S$ @. p- ` .active_low = 0,0 x4 n- V, Q5 z- I Q/ z5 J7 B
.gpio = DA850_USER_LED2, a1 w# m+ y5 t( ^# |) S% O; I7 L7 `
.name = "user_led2"," U" K/ a6 z Y- [& i. U, \2 _- @
.default_trigger = "default-on",
! o7 N9 n) W* [$ h/ A },
6 g8 W: ]0 x3 V; m' Y* `6 l {) I* | a" ?0 `' O2 R
.active_low = 0,
: w" P: y1 K6 R) M .gpio = DA850_USER_LED3,2 q, I3 v; e8 z
.name = "user_led3",
6 n; Q0 |+ V% V; J .default_trigger = "default-on",
* L( D! Y+ t6 r: i) c% z/ C },1 s4 R; q$ z" ]
};$ V3 G! \+ @0 J3 T4 [9 `
6 |1 {4 j" R$ _; Q% ^9 cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) @/ u& [: u" f$ O$ q. b/ f% z
.leds = da850_evm_tl_leds,
( m; F' q7 X7 ~& K6 x( h .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
. c% M4 e z$ B6 [7 f, A};. g, y( C O- [) e5 \0 F' \# n5 R* s
3 o/ w& a7 j- {- U: jstatic void led_dev_release(struct device *dev)
# }/ }( g4 y0 M5 Y/ S, n) [{
2 _( d V# L- S$ M" M};, h; J; @8 [; d
9 d% Q2 T. ^) a; m5 |0 Vstatic struct platform_device da850_evm_tl_leds_device = {* [; z3 m3 i# j
.name = "leds-gpio",* V! u7 D) b1 R. q
.id = 1,
; r, f. T. ~1 Y1 w. v K' b" S .dev = {6 d( z8 g) r# X! ]& W
.platform_data = &da850_evm_tl_leds_pdata,- I) }* L- F& q1 H
.release = led_dev_release,: e( c R/ ~1 A2 f0 M. |
}
+ D e. M, F M" }% H" I};
- w8 u; r% ^5 E; }5 d- t3 v( j& M$ q6 [8 Z- W0 g5 O
static int __init led_platform_init(void)
! A9 W6 U* ~8 b- f1 P, J4 }{
z, I( f# N# y7 ?& G/ y5 s: ]/ N int ret;
: d3 h* P$ W, W; k6 J( |6 B, j#if 0
% E0 D% |! n4 o8 S ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. e% I3 E+ b1 ]0 s4 e+ O
if (ret). m) R0 B, _+ z* X# M0 `! h
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& a+ Z* }8 h4 l& X "%d\n", ret);
! P5 G$ w$ T8 o#endif" M, H0 K" ~; y
ret = platform_device_register(&da850_evm_tl_leds_device);0 G% Z- w! `& O/ W# w
if (ret)
$ _9 V. K8 Z" L1 S" w pr_warning("Could not register som GPIO expander LEDS");
3 @( i/ u+ z, R$ M# Q else4 H$ P$ `. R% V6 z* L$ P
printk(KERN_INFO "LED register sucessful!\n");$ E1 E; B, |( H1 a
q5 r0 a- `+ @7 [; g* s. O return ret;3 M8 m, c: B7 t
}3 R- ?% c' ]; { a8 C
~) l2 x2 X% R' s; c
static void __exit led_platform_exit(void)
- y; X; n+ o% f; p3 M& t8 k{
3 i1 Z) j1 K) d) T+ { platform_device_unregister(&da850_evm_tl_leds_device);- L1 |* n$ G: ^/ [8 v- [: ~" N7 }- s- `
+ r, I: n! U" c1 `
printk(KERN_INFO "LED unregister!\n");
. e: Z. Y/ T* u, n" ^* v3 ^8 w}
9 N1 z8 q- p$ Z& b0 q( r2 R7 O- T; A( a, i
module_init(led_platform_init);/ s. c* [% n: v) d5 _2 c [5 x; I6 y
module_exit(led_platform_exit);
9 e) Z0 f5 O( z$ w" W, D
( u7 R- D n1 z9 I5 ZMODULE_DESCRIPTION("Led platform driver");
, @7 ~8 N! ?9 p- l2 EMODULE_AUTHOR("Tronlong");4 ~0 L& ]: {+ X& o1 ^/ t
MODULE_LICENSE("GPL");5 `' p# s: e/ b1 G" w3 }, w
, k; S5 h, D6 V, U+ ]
|
|