|
求大神给下面的程序做注解,请稍详细些,谢谢。8 z2 P, v7 ~; p, k$ ~5 ^8 r& D& v
#include <linux/init.h>
6 _! M1 G! j2 h: C N% z0 Z, P#include <linux/module.h>( o! I& b4 Y6 w0 f" A
#include <linux/kernel.h>
$ [; O S2 o5 B; j( T; p#include <linux/types.h>
) K& O+ V( ^5 Y$ C! F#include <linux/gpio.h>* S, g9 [: u0 V
#include <linux/leds.h>% t& K# Q& P6 _% h" q. I
#include <linux/platform_device.h>
- D: N* [- s" ^2 C) M" n1 V/ H0 i% [
#include <asm/mach-types.h>
v" v; X0 _6 C0 n#include <asm/mach/arch.h>( j% c+ H% W. J* j
#include <mach/da8xx.h>
h# S5 J! @& A* d#include <mach/mux.h>
: Q7 G% D$ A9 I8 m; b
2 h" k& y1 c& U. L3 Z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% |) \$ C4 q& |2 C1 R#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)' N+ ^. U$ P# n
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 s3 X# _# y. b/ C
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
4 i: o" M5 L$ a% h0 w% x
4 v5 W: o- L6 J2 _: ]/* assign the tl som board LED-GPIOs*/" s6 u" F1 ~6 r: j4 C: r
static const short da850_evm_tl_user_led_pins[] = {9 t3 t( Q/ h5 J' D# h6 W. D
/* These pins are definition at <mach/mux.h> file */
% z* |% M1 M1 W' \, a DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
$ m5 }' H& X- `, ~ -1: Q9 b: v) f. n
};- A) A/ E! }/ G4 d$ L5 a& d
* t& b$ E! ^4 e) }: T- Gstatic struct gpio_led da850_evm_tl_leds[] = {+ }1 u A0 d/ k6 z; c
{ ~& g: q. ~# f5 U8 ~! q: Z) A& c
.active_low = 0,
$ b( w% r- S3 Y4 @- f V d4 ?" S .gpio = DA850_USER_LED0,0 k; a! N5 Q8 d* x
.name = "user_led0",
; l3 I. \& ?/ @/ Q ~' _ G7 \ .default_trigger = "default-on",) ]9 k2 N8 I' R' r0 R% u: L
},* K+ _! m+ \, \; I7 o; Z
{, z0 U, b# X* C' {3 R
.active_low = 0,2 d1 P b( O/ P! l/ z" G; J( U$ B" `! B
.gpio = DA850_USER_LED1,6 Q: |0 r$ x7 e) G# j. Z
.name = "user_led1",7 T' m1 k1 t* B
.default_trigger = "default-on",2 b) n- B9 c' A7 }1 t2 {- S5 ^
},& ` P. E3 R2 C( @+ g( e
{0 k/ t! e: y" k. G! U
.active_low = 0,7 E0 _; U' ~7 O0 \" P
.gpio = DA850_USER_LED2,2 S) A$ q4 ^4 P- U5 O7 Z
.name = "user_led2",# J6 J/ S: S$ p! N
.default_trigger = "default-on",
& g- ~8 ?9 r7 H k% f },6 e" f4 q" x8 h2 a* h
{( e, j u/ ~ F, O+ \; i
.active_low = 0,
8 x+ f+ N6 ^9 b. r .gpio = DA850_USER_LED3,
2 C7 `# a! \* v, O+ U2 k( c6 l .name = "user_led3",2 ^/ o9 d) F, T8 \) m( T
.default_trigger = "default-on",6 }5 ?% x7 {8 C6 W
},$ r0 o& l( ]! \4 f+ F
};9 p9 C7 }- ?: \# |8 ?5 @) R4 u
8 |- n$ Z1 u$ C5 F" a8 ?
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = { b. U- p9 l3 O) d9 ^
.leds = da850_evm_tl_leds,
" U$ P0 t6 Q5 L2 y3 @ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 t! I( F7 r- T
};
6 P# h, T* H2 e8 S9 q( |: |
* u( \3 d" K) B/ A% L; Q0 p$ ^" ?9 Ustatic void led_dev_release(struct device *dev)
( b" L; K0 h7 q w' J7 z0 w{$ s7 g" H6 n0 d; z& {* I$ u9 {/ p; ^& {
};
1 T& g/ N0 y$ L2 _1 ~! \ {
! G5 d" R% \0 e2 B' {; L( f" pstatic struct platform_device da850_evm_tl_leds_device = {/ C% A1 t+ a& a4 m8 Y6 Q& B
.name = "leds-gpio",
1 R; D. [, P0 q( M/ b/ R' M! t .id = 1,( {' w+ n/ E0 q, [+ w2 A) e( T
.dev = {1 ?: u T% X' E. `" k! |
.platform_data = &da850_evm_tl_leds_pdata,7 Q) d8 }+ Q6 z# a0 h+ l
.release = led_dev_release,: u( h% g4 ?" s8 g3 e: z; e- p L
}
1 b0 F2 O! c, q; L9 W! U};
# }& p8 }, v1 O3 O8 `3 u. H
1 p) \; J( c' qstatic int __init led_platform_init(void)" w! U& u& P' i3 c
{8 A1 H8 F! ?5 ?
int ret;1 s9 R' z [1 P' x
#if 0
" l) o+ Y! s$ }" c2 r8 a ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, c! s! L' k( d7 ?% T- m: {9 e( E \ if (ret)# W' D. W5 B4 B7 \2 m" I. g3 E( k
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 x% g9 U7 Z, C+ z0 ^; v1 s "%d\n", ret);
' l- |; _ t( [& f5 ?( h#endif
K) r$ _! M" w0 q' l; l( V; d ret = platform_device_register(&da850_evm_tl_leds_device);% P! \$ F+ d8 _, s
if (ret)
6 x2 i7 v# ^3 m pr_warning("Could not register som GPIO expander LEDS");. F0 [4 m6 c" |- j5 o
else4 y$ f; I. V) V. z" M
printk(KERN_INFO "LED register sucessful!\n");3 S2 ^; N* h$ A: h
1 g9 `; O; C4 M$ q p1 a) K, _6 W! N4 B7 F
return ret;
/ t) F8 e: Q1 \9 L7 h}
' ]8 t' z! k/ |2 r: s$ P! Z# m8 {# s( J. H- d6 _
static void __exit led_platform_exit(void)
9 B% Y+ w9 i! _6 b; Z( S) o7 i{
/ I% @5 ]. O8 h- ^& K# {0 A platform_device_unregister(&da850_evm_tl_leds_device);
0 o( J9 ^7 @8 L. A9 @) R% h. R- V5 V9 I7 x- \5 r6 ~6 W; V! [2 u! S
printk(KERN_INFO "LED unregister!\n");1 D/ y! V+ [( V! D ]7 L ?+ g
}
* J7 k! ?* |0 i" @( F
: d& `& ]" O$ y$ D6 ?$ @module_init(led_platform_init);' X1 ~' c0 ^1 I" a
module_exit(led_platform_exit);. S9 V0 l2 F* f0 j3 P
% m j' N4 V, S- W, X3 i
MODULE_DESCRIPTION("Led platform driver");
* b7 |0 g1 C& O# p @MODULE_AUTHOR("Tronlong");
. G1 {( m- L9 j& K" J$ WMODULE_LICENSE("GPL");
: P" d$ Z" _3 S4 U9 O/ k* G
/ |) f0 S {7 n6 F. }' P1 Y) O |
|