|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 M" z: @/ a5 h7 Z) B# V% O#include <linux/init.h>. f% [1 N$ v. L
#include <linux/module.h>. }4 b, ~9 {9 r( j* ?; F* D
#include <linux/kernel.h>
$ T6 B/ Q6 ^0 w9 m+ W#include <linux/types.h>
9 {. V1 P; H7 y4 R#include <linux/gpio.h> L, @# Q: P, Q! J
#include <linux/leds.h>/ y4 ?& M) s" n4 ~2 `
#include <linux/platform_device.h>
" k5 o5 `/ B; D, g9 o
6 R/ m1 E2 R8 _% B( N$ v3 ?#include <asm/mach-types.h>
1 _' ]9 u8 l, U: A* i. z7 f' J4 x#include <asm/mach/arch.h>" c0 S6 k- V$ m/ g
#include <mach/da8xx.h>4 C/ K o1 f$ y: H* n/ ]3 x( ]
#include <mach/mux.h>
u( q; J, ~# Y4 v
8 s5 Q" z. ?& A" T( f#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
8 h% _. i- _& d$ f& Z; `3 d7 s" h; l4 I! [#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ }8 N X2 C- ?+ n0 ^
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
' ^$ h; }5 `3 @+ s! o; \#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& ]9 c6 e b1 J& \% I4 R$ S
1 w2 D' P1 V Z& {5 `+ Z/* assign the tl som board LED-GPIOs*/
* j: b4 e: z/ F9 fstatic const short da850_evm_tl_user_led_pins[] = { ]! B |) Q& Q, w% k4 D, ]
/* These pins are definition at <mach/mux.h> file */; m" e2 t& E& n: P7 p/ Y: i
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ h0 O- ~4 Y1 e8 f
-1
" X! C' s, x- f* e- E};9 v( K4 f. Y% @( ^' H; s
. l; j) ~8 B0 H" {5 M+ ]+ i- X
static struct gpio_led da850_evm_tl_leds[] = {" I/ B5 j) P) g* Z. K6 Z2 R" Y
{8 j. w% Y' `+ q% s1 Z! M' ]
.active_low = 0,- u0 k5 C7 G+ z0 F
.gpio = DA850_USER_LED0," M3 X% W: G5 ?6 H3 y1 O' W( i
.name = "user_led0",
. A* K: _) ^ U. h t0 k( @ .default_trigger = "default-on",& F) U( Q: l! S( c
},4 z1 F$ \1 `* x6 k& }/ G9 [) R+ M
{
6 S O5 E) _/ B* h( o .active_low = 0,8 a7 A @5 K o5 C2 u( |" {
.gpio = DA850_USER_LED1," A( L4 V% \0 c3 P- E
.name = "user_led1",
) a7 y+ f/ ?7 L* z3 o2 Z: _; ` .default_trigger = "default-on",8 G5 b# Z7 Q- G4 _8 y: A* _9 t
},
3 o+ `9 T" D3 d {9 g0 ?: B1 U9 P. \* h; E
.active_low = 0,( ^" G3 u* W1 `1 t6 f o
.gpio = DA850_USER_LED2,5 n8 S8 }/ ?! |3 Q8 H/ {8 d w+ L
.name = "user_led2",
, ~; h# n8 M6 C3 \& s .default_trigger = "default-on",
' p2 j: c! L6 j },* D2 E0 G# x! l! ^( \2 F' L
{, F- E' |, P$ \0 ~) J( t7 v( v
.active_low = 0,( c3 ^9 X* q# J! S' _& \ B
.gpio = DA850_USER_LED3,
. B* ~6 r/ t' L# F i! C .name = "user_led3",. Y& T( U+ ]9 `5 Z+ ~% g
.default_trigger = "default-on",' I' C) B3 H/ ]
},
3 W5 a% k# B7 K9 c9 W! p, I( e};
. r, [/ m6 u* V
/ ?) D. |* J* F. v* y gstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' ?+ `& S. M% h' P .leds = da850_evm_tl_leds,
; o9 q& v; h" _ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),: C7 }5 p& N: g
};/ s5 b* i, O$ t1 ]; _
; l9 U" f& U. {
static void led_dev_release(struct device *dev)9 E$ g' H( t6 w$ A/ M! ?
{1 n! C3 f& g3 K4 u
};4 t" G# H) S* T# T) F2 }, z4 R8 ?4 G1 A
, ?) S6 j! w; W% a, }# d2 }static struct platform_device da850_evm_tl_leds_device = { H3 R+ @* F" K# ~! U+ Q
.name = "leds-gpio",3 D+ T2 W) L, l X
.id = 1,: ^1 ^: g! I G" b2 D j- d
.dev = {
: F2 B: B% a6 G/ a .platform_data = &da850_evm_tl_leds_pdata,
# @, |+ S; h# I7 e. |5 G. t .release = led_dev_release,$ u' ^! o3 [1 `! _; E
}
# ^' \1 @, V* x' v9 {& q};3 u6 e- y( H5 V
+ \1 L6 q; o4 K9 t% _% h, ^2 l1 z1 z
static int __init led_platform_init(void)
. X O1 k3 S% h M) k% g/ F{$ k2 q6 x& U: {2 m0 d3 t8 G
int ret;0 m7 ]+ R% X. s
#if 0
4 p! W7 u" m5 x; }. w4 \ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
5 Q$ e4 r4 g* E' d4 I if (ret)
% `; D6 @2 Y2 U" s! s pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 T! C4 S& G0 Y( u0 X: P
"%d\n", ret);6 A4 w! G6 g- P8 A- I
#endif: O) R! m1 D% j) e0 L' e
ret = platform_device_register(&da850_evm_tl_leds_device);7 ]0 G& m$ }: d6 K- y9 J
if (ret)9 `, [* I# T. i9 A8 y
pr_warning("Could not register som GPIO expander LEDS");
: O6 w+ ?; k9 R5 P; A _ else
' Q, d2 A6 ?. ?/ b printk(KERN_INFO "LED register sucessful!\n");0 W& Z% l9 P b6 }
" \1 I# s: j+ E" I5 N1 Y) a4 J# Z return ret;6 j6 I" k% d4 X
}, [: K% G2 e( W9 G7 N
; k4 J) q6 m* U9 e& r# \+ A# Istatic void __exit led_platform_exit(void)" \/ w% @. n7 V
{% [- \ B* W' }8 X5 T9 Y% }/ S4 ~6 O) v
platform_device_unregister(&da850_evm_tl_leds_device); G" O& m" B8 M" A5 U" [$ \
7 F) Y% [# w; y; a* T printk(KERN_INFO "LED unregister!\n");
" i6 I( B0 d/ p) E7 y/ H}( n9 G I: G! T
3 h# e- A. C$ X T. Wmodule_init(led_platform_init);8 C( x+ j( _: o$ \. M
module_exit(led_platform_exit);2 ] \" l2 B/ D
0 G% D' y& d! T9 r" u9 b# K/ RMODULE_DESCRIPTION("Led platform driver");
" H" ^) [, b, [9 fMODULE_AUTHOR("Tronlong");
1 q- r' i8 f7 ]8 U9 gMODULE_LICENSE("GPL");
/ c+ u* e( D% Q3 U+ L" z
) b* v% F( ~2 F8 ? |
|