|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
( Q" \0 I+ I) u& T, W) B3 M# a0 G8 v#include <linux/init.h>+ z8 a7 n; \$ y2 _/ h
#include <linux/module.h>
4 t0 N" }6 J0 b: t6 V#include <linux/kernel.h>; G+ R( A: v: K
#include <linux/types.h>4 R- r4 q/ B4 d
#include <linux/gpio.h>6 `/ |' S" K$ m3 J1 C# Z
#include <linux/leds.h>
0 r. G. p4 Y4 T! G8 b#include <linux/platform_device.h>
3 H- c: E$ ^* U7 S. G0 C2 q/ K/ l. h' l3 h5 f8 ]/ T
#include <asm/mach-types.h>) K/ i4 g* W+ ~. U6 W8 P
#include <asm/mach/arch.h>) X% X/ L, ^- }3 P: g. H/ l# R
#include <mach/da8xx.h>
" k: U+ x9 }3 u4 r#include <mach/mux.h>
: w! V7 H. m% x9 \4 k. @* T J5 r
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 K3 T3 C5 f5 n R, Y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 L Y/ i0 s: P" Z
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)7 K& q3 h' x, |3 K! a. y2 g
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" k( b8 d- y1 M( P2 F8 Z
& @: T8 ]" f. E3 T! [/ C: J9 z
/* assign the tl som board LED-GPIOs*/+ ]5 w- {$ ~0 g/ d. P* o8 r
static const short da850_evm_tl_user_led_pins[] = {
6 t7 R- T9 f! t$ {9 l l/ m /* These pins are definition at <mach/mux.h> file */- I0 R+ V# A0 E7 ]; y
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. y+ o n( Q/ q7 i( }# W7 T
-1
8 c& y5 A6 ]5 @ c% F) u};. ^$ d6 ~- o6 W, D/ K
2 g% E' J0 G0 g S4 Z3 z% @& ystatic struct gpio_led da850_evm_tl_leds[] = {6 b2 B, q1 b" w! `7 F `$ }8 s% ?
{" O$ _* i2 {7 b# m4 G! s% v
.active_low = 0,2 z. t$ c2 K, m8 G6 e5 S) J/ F
.gpio = DA850_USER_LED0, c7 p1 C3 p/ V: |/ A
.name = "user_led0",& T0 P) f Q# Y) e
.default_trigger = "default-on",
& R; w- n; u: p# K },
" ^( h. B: q! O7 N {9 ^5 L$ z. @) R9 j4 t- U u
.active_low = 0,4 u6 o- w8 U. U7 d
.gpio = DA850_USER_LED1,* m6 S9 K6 K8 @: z. l& _/ J
.name = "user_led1",. N& M" `4 G6 {2 m# d
.default_trigger = "default-on",/ d* }4 F3 n" g
},
# u5 M. ?' ]9 i5 Z: }# X. ] {; r. q8 Y+ x/ R0 L: ^9 k
.active_low = 0,
T: l- ~$ ?9 P .gpio = DA850_USER_LED2,
& u7 y; Z+ }* J+ p8 b; s2 q .name = "user_led2",9 L Y, ^- t4 V. x! k
.default_trigger = "default-on",
3 L1 n! X! p; F' a6 K },
" f& t7 d+ x. k7 b( |( M! x* Y {
- Z- B' P) d3 ^. d8 C .active_low = 0,9 {- L( Y9 b7 ~) v( Z' z+ C9 n
.gpio = DA850_USER_LED3,
0 U j# A, j, Y) A1 J+ I7 b .name = "user_led3",
$ N6 W/ p6 a% j7 a .default_trigger = "default-on",
5 G4 ` n- |4 s" o D$ h& `% C },
6 L' W6 {6 z/ @1 H; ]+ b};
: |0 O9 d0 p6 _: @9 W
$ b0 E/ T" ~; q2 z! ~/ ^- j8 n! t& gstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
?9 R; |: V, A .leds = da850_evm_tl_leds,
5 _/ H) z% D) r/ u .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* Q' }* D" z7 o% t};2 e4 x: _/ }& ~% j# }4 T/ V4 B
! c! n5 s6 [/ K- o- x7 ystatic void led_dev_release(struct device *dev); ^* h7 ]+ d5 E: g' h7 u
{; U5 o3 x2 i7 O' \6 }2 G# H( ~! c! m3 j
};
( \2 `% }" e' F4 y3 o4 m
! C, u# K, a' I0 ]! p C# _static struct platform_device da850_evm_tl_leds_device = {* v+ |8 c! }/ |
.name = "leds-gpio",3 a g* |% ~/ _: y
.id = 1,
8 W3 s) G* A* r3 G/ u1 I0 ]: b .dev = {
1 P$ D% s8 V# e q5 c .platform_data = &da850_evm_tl_leds_pdata,/ _# t ?/ ?% P7 [( u. I' O. X. F. X
.release = led_dev_release,
, s( u# `8 ^6 Q& g- R }
# d6 K, x* v3 C( g};! b" u; I5 b% | S4 G5 \
. I# e) q0 q/ X8 fstatic int __init led_platform_init(void)' w0 [ ?% v" X+ D) D/ n$ @
{
- _ Y3 e2 w$ D, C! r' } int ret;, v8 J7 U6 j0 x
#if 0$ I* T. p2 y1 P$ i# B7 d
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
9 M$ x7 Z( N- R/ A& K4 t+ Z if (ret)/ o1 R, R- x/ J* E
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 x) `# n$ ^$ z+ _1 k
"%d\n", ret);, D& j- S7 V! Y' d
#endif
) r: s8 Q$ \3 S3 E) q ret = platform_device_register(&da850_evm_tl_leds_device);5 c5 r* s S3 J, p3 a0 z$ Z
if (ret)4 ^; {/ D# v) B- F
pr_warning("Could not register som GPIO expander LEDS");, m% T+ k& |) D# Y+ B
else
) @, j8 N9 i% H2 M6 k6 Y printk(KERN_INFO "LED register sucessful!\n");
: j0 t6 P1 `1 F; q( I& w7 e4 z4 z$ B* N) d% q% B' F" @) |- d* T
return ret;
- U4 I; h. R; M! y+ `}
: C) ?3 s* d6 s8 s- @3 v9 E8 k/ E1 i( @
static void __exit led_platform_exit(void)+ h+ G" J! t( i; p" M4 N
{1 K, o" f" `5 J6 O* t/ N* m
platform_device_unregister(&da850_evm_tl_leds_device);( X! X' Z/ d5 H* X) {
3 O% ?2 c" }5 Q! ^+ N
printk(KERN_INFO "LED unregister!\n");
! H% I8 l3 ~* ]8 u# @}
& V* C# u. @# X Y( P3 L6 t& q0 e: ]9 M9 ^
module_init(led_platform_init);, q8 H0 }! S% o; X4 s+ ?4 [ `/ ]
module_exit(led_platform_exit);8 Y- W; ?( V0 V( N( Y1 O/ r
3 I; j( H6 T f5 q
MODULE_DESCRIPTION("Led platform driver");6 l4 L0 r: d3 l- r6 B) h) `
MODULE_AUTHOR("Tronlong");; }( Q+ s, e+ y9 k* t
MODULE_LICENSE("GPL");& e; z8 f8 A% m+ D* O: }& G
/ O. W9 R) p* a; B9 ]7 c
|
|