|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 \6 O, o p0 Q# e& e#include <linux/init.h>: ~& {: B$ v( x' Q3 F' L
#include <linux/module.h>' L" j: p9 }4 r0 I1 m
#include <linux/kernel.h>5 `' f8 S& [4 a
#include <linux/types.h>
- E2 ?$ w' C# M#include <linux/gpio.h>, c2 e3 Q0 y1 g6 G. b
#include <linux/leds.h>
, `+ E: @2 t: o3 E6 L. }! D& k#include <linux/platform_device.h>
' z* y1 h P- d. n- u$ L5 z4 W1 g$ z: r4 P. H) q7 Q# J
#include <asm/mach-types.h>2 J' m7 y* k9 k2 m8 x" t; |- Z
#include <asm/mach/arch.h>
7 R2 E8 y+ U' ]0 o/ J/ o4 I#include <mach/da8xx.h>' d& p2 y& V$ [
#include <mach/mux.h>
& S6 }! J3 c! n& n+ ]( |, ?5 ]: `, Q9 A% b! \- t
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 V: o, F- u2 R; ?5 A! x2 _$ Q l' C
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ [* I+ C* A- i3 c0 p* t8 U
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) J7 b: q: j" A2 a2 u#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ s( d0 o# t7 ^* F* `2 m+ }$ \
% N/ ~. P8 Y* w6 @. S0 i
/* assign the tl som board LED-GPIOs*/5 C9 Z' `$ g; _0 t, {$ N
static const short da850_evm_tl_user_led_pins[] = {
/ ~) L* s+ T1 X8 W/ _' s# R, {2 V /* These pins are definition at <mach/mux.h> file */1 ]. I. m' t% \) s6 Q
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. t6 x% E$ R- V4 Y$ j5 ?6 g2 g -11 p @% b( C* C- v' Y- m
};
5 g2 q2 p9 D7 Q0 M4 c5 D7 }3 D& q& J1 g+ N
static struct gpio_led da850_evm_tl_leds[] = {
6 R7 u% D" g) K) X {- n: ^% J+ R( ? g1 Q
.active_low = 0,0 Y0 m$ D" v# h! s) U. P8 V4 N
.gpio = DA850_USER_LED0,
4 G7 _! P5 z) Y) ]( g .name = "user_led0",% Q( W# O- G6 B: }
.default_trigger = "default-on",* t& e& j- F3 Y$ [- ^) @
},# x& x; m* m( R" z* \5 i
{
; L6 X# |, v/ c% l" U .active_low = 0,% v! S1 V! R, B* A c% Q
.gpio = DA850_USER_LED1,% P# v, T4 |1 U! [5 o) {/ f- b
.name = "user_led1",5 h0 j! t" h* @+ u7 n( x
.default_trigger = "default-on",
3 i( ~) x2 }5 M- Q },& ?* l9 {# h. v/ ~8 F
{
2 {4 ]3 S+ M' d9 } .active_low = 0,
, q" V7 K) z8 a .gpio = DA850_USER_LED2,
( F" e) }2 g' b# f4 A8 g .name = "user_led2",% D/ M5 s2 I: y. F: b; }
.default_trigger = "default-on",1 F' p& n, k( L# U9 T! {* ?: u
},6 s% i0 ^& _5 Y& S7 N
{
: ? _& Z8 Q2 J/ T6 h( x .active_low = 0,& B; F r/ I4 W: }% G/ Z4 w8 ^
.gpio = DA850_USER_LED3,
! ~# \6 K5 J. Y. I .name = "user_led3",
) `; K6 r( e- `! ]* Q .default_trigger = "default-on",
. v0 z s7 E1 S# m },+ u5 `1 `, M3 ?% }# k
};4 |9 t, I# ?( y# z( W" [
9 }; c4 R+ `7 O {- Z! Q7 [! E" Sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 u$ N3 I/ h6 l& a9 B4 _ Y& Z/ ]
.leds = da850_evm_tl_leds,
' f8 @( O9 \$ O% R* J .num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 _9 f" a4 m! y0 ^
};
, _ O" j1 V& F; l% O6 Y. k( l- W
static void led_dev_release(struct device *dev)
) P8 b( g7 R! @: `{
7 I! j+ ?( _4 R+ s" M* R4 {};
! [1 U6 S8 ^5 e* S2 D
& ^+ O! a0 A2 g& X2 _3 astatic struct platform_device da850_evm_tl_leds_device = {$ g, S3 w* d- u5 M; g( C
.name = "leds-gpio",
. ^: l. w& u# G/ i( c, K) v .id = 1,
2 G( @7 n$ U, J9 L/ V .dev = {& x/ b0 D8 ` Z) W* S
.platform_data = &da850_evm_tl_leds_pdata,3 `, W8 ~: @+ p; S
.release = led_dev_release,
+ ?1 H" Z; Z ] }0 x" }1 {( M) V% M5 a7 e( ^
};
7 L; E6 ]' g$ U, [' A4 w, s# {! S& ~2 e( j' c M
static int __init led_platform_init(void)! L3 E! h9 v# O1 i: o9 Y8 `8 h) r
{9 W- k/ w7 o% w2 ?. q
int ret;
/ A/ x( k* o0 N m& ~#if 0
1 M( G# X0 C0 S- |% D ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);1 R* {) B. Z7 |& P4 \, i$ x. e2 W
if (ret)
+ h+ d) A( ?8 e8 x% I pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 z! @$ l" R( G/ h5 \! F# h g "%d\n", ret);
7 _: p5 a% b$ U+ ~( U8 H2 e#endif
# o7 H( f, m, C% r) C ret = platform_device_register(&da850_evm_tl_leds_device);5 V; m# I1 a( H" {. a3 g
if (ret)/ d4 Y3 x3 v; r$ b
pr_warning("Could not register som GPIO expander LEDS");
( ]% K; F. X3 c else" a, [# S) v# k |: a
printk(KERN_INFO "LED register sucessful!\n");
5 s* V# t- H6 Y3 A9 W( ? x- s- a+ X6 G
return ret;" w# X$ s7 Y" q
}# c6 c& A5 s9 v8 |
: s: x/ b1 L! y1 r. |; z7 O, f" N$ rstatic void __exit led_platform_exit(void)
" t- m$ g9 A( A' D{
. W _, K5 O$ G$ \ platform_device_unregister(&da850_evm_tl_leds_device);
+ ?2 ?% @8 ^* G! [/ j
; O2 ~3 H: D) K& Z: c9 l: X' B2 k printk(KERN_INFO "LED unregister!\n");' N- B0 n, q/ n4 m& s5 E
}
; O7 r- L; t* z+ c3 m" W. A
3 F9 U1 {+ j ~/ {0 P0 {& Lmodule_init(led_platform_init);/ a9 C+ L' J( p" G+ A9 ?, r+ H
module_exit(led_platform_exit);
! q0 L6 ~7 `! I2 [9 i& h# \6 d* K$ R; v4 k
MODULE_DESCRIPTION("Led platform driver");, ^4 I2 ?2 Q. E
MODULE_AUTHOR("Tronlong");
0 S' Q2 Q* R6 T- S) tMODULE_LICENSE("GPL");7 ]2 U, h# m& N' i( v+ P
$ C: L6 W7 G* l6 i* B+ ~- J |
|