|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
) [# x, h4 \) ?+ Z! i9 g# J$ X+ o#include <linux/init.h>* o3 V8 |! U1 z0 @) K" M, }
#include <linux/module.h>7 z: |, M7 x8 }) S1 B: e8 a
#include <linux/kernel.h>
9 Y" l- I, f3 ?' X2 _#include <linux/types.h>/ i2 A) C# H" j% W
#include <linux/gpio.h>0 Z m: g7 u" [5 s! S' l
#include <linux/leds.h>2 @: Z' n7 P3 t7 C7 v# ^1 q
#include <linux/platform_device.h>0 F# v% n+ n' f# o9 L/ H
4 E( N- ~( o+ u3 h p#include <asm/mach-types.h>
) D7 |* R; j* ?. U* L5 n) B#include <asm/mach/arch.h>0 t$ N/ w+ J& M `! Q3 @
#include <mach/da8xx.h>
% n( z8 l" l. k1 w/ C#include <mach/mux.h>6 n, I2 V; R3 V# `; V1 g5 Y) K
( h) E' Q$ J( _; ^0 i1 A2 h2 A+ N
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)6 l" v5 @2 T/ _ z0 b- N
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 J# q3 h6 I+ k8 C; X#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& P. {* R+ {/ s/ o- \
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' V5 M4 S" b6 b" w7 @4 ^6 ?# I% T" ~/ r+ T. ^' k
/* assign the tl som board LED-GPIOs*/* G: e8 V! ^0 j6 D
static const short da850_evm_tl_user_led_pins[] = {+ ^1 @2 _, @" _- j
/* These pins are definition at <mach/mux.h> file */
, P5 a. r3 k! @7 @6 S, I' }+ N DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' z. ~" F# D& u0 k; q
-1
: H5 v1 c* _2 M( L z; B0 a! B};8 m2 E- ~' i9 @3 _6 y7 g
1 J }6 C- J1 |6 Z: M3 Astatic struct gpio_led da850_evm_tl_leds[] = {
" M& h" P% L( _! I$ H {: t7 @- t2 R( T2 z" _
.active_low = 0,! p2 }7 i9 L- p3 G8 t
.gpio = DA850_USER_LED0,) V: D) U- d) Q; T( y6 b
.name = "user_led0",1 u0 @' n* F- W4 ?6 @) k
.default_trigger = "default-on",( N' ^7 g( W' ?. S8 X$ @2 m
},0 D# H2 ^( ^$ Y8 }
{6 s% o ^& p0 z
.active_low = 0,' f7 o7 s. a9 l. P2 O) Z
.gpio = DA850_USER_LED1,- g6 h w" ]7 j3 C+ @" q, F
.name = "user_led1",
" R) H+ V- _) ?1 U% e/ v# b4 [) ] .default_trigger = "default-on",2 F; X& V( z( S |4 j2 ]4 y6 f. p( f T6 B
},$ d. Y1 q' h6 s" e( H/ G! M$ d
{/ G# }, ?% w3 ~0 p' v0 V# w* i
.active_low = 0,( `4 I) m2 z% L7 C" K% \/ c0 C9 k
.gpio = DA850_USER_LED2,
/ I/ I$ R1 k2 \. _ f. d& B .name = "user_led2",$ ^; l/ l8 E+ q3 \& K# A5 d
.default_trigger = "default-on",) Z4 {! T% C4 G2 t/ y, y4 y) b
},
$ b/ ]: j4 r+ p) L {) T; [# T7 U# J8 z1 N% q+ X
.active_low = 0, J7 o, S0 |, i5 b2 Y" Y
.gpio = DA850_USER_LED3,
; b* @9 v2 U$ i. y; M .name = "user_led3",
4 h j1 E$ t$ i4 ~ .default_trigger = "default-on",
8 h2 p. c2 s( S: c9 z },
. x! n- u! ]0 s% `4 ?$ X) }};
; j* i5 ^) Q7 ?' A! L. y+ {
) u1 i$ |& U4 W2 ^3 n8 p! cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 r8 U/ Z. o6 v* N. T* k1 ~ .leds = da850_evm_tl_leds,9 @7 R; q, b2 u. J
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),; L; ?7 Y% C; F0 y2 E# L
};
% h4 a2 U! W0 h- Q* j$ \; x5 q
% O# ?( [( A8 |1 w! a( X- N/ N% Cstatic void led_dev_release(struct device *dev)
0 h% [1 l' z. N) i; O1 V9 V5 e- y+ Z{ ~4 J( v) k% X) g3 L% h2 o1 T4 M: a
};
1 `4 C7 U- c+ s
6 a/ A* J2 g' g# Bstatic struct platform_device da850_evm_tl_leds_device = {2 D1 o1 Y7 Z: g
.name = "leds-gpio",
. O7 `! R: [! c! T) g .id = 1,1 R E6 ^% o9 T, B
.dev = {
* t2 i5 T4 l. ]3 S; p; n9 P .platform_data = &da850_evm_tl_leds_pdata,
2 }$ R! J* B9 @+ C/ c; @ .release = led_dev_release,
8 E0 o9 t5 ^" E5 K$ p- e6 V% y+ b }
$ U0 s- p( N* h* Z+ Y/ U+ Y% r};# K+ z; ^# J% c5 N
4 ~: k0 E/ Z3 V8 t* c( z7 ]6 {static int __init led_platform_init(void)
( b6 Y) z. W2 F0 h/ ~- v0 b{
( X* s D9 @% c+ x+ A) W int ret;
( c- ?7 {# b+ ^8 a#if 0
6 k/ @- y( [2 ~9 d$ U$ M ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 v7 Q A+ s( \3 | if (ret)
1 D8 v }% q1 ^5 U, S( b, Q pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 Z8 l- j$ {$ N1 k
"%d\n", ret);) B7 D* B7 T7 R# T1 k9 m
#endif
( Q# d9 W8 B h9 P2 S ret = platform_device_register(&da850_evm_tl_leds_device);+ l- m- o/ {: c C
if (ret)* r' E3 O' m- I8 ?& R
pr_warning("Could not register som GPIO expander LEDS");
3 T: c% a, i% t/ n else; [1 N C% V5 P: Q' Q
printk(KERN_INFO "LED register sucessful!\n");
/ b& A& d( P7 l! T7 R1 [
# J: G0 R2 [. I4 c/ k8 n return ret;! q/ [# |& M# ^" [' D
}
0 \7 V' W; K- t/ ]3 F% S+ l, [, X+ L# S2 H: s9 M+ w$ u
static void __exit led_platform_exit(void)6 _8 T( A e- ^8 H# G
{+ x3 {, Q* D$ @) i
platform_device_unregister(&da850_evm_tl_leds_device);0 `9 N5 R% Y9 i: k% u
_. v9 K0 v+ {+ W
printk(KERN_INFO "LED unregister!\n");
! [9 A. X0 g- J7 G" e' {8 Y+ E$ U}
4 A6 R! {3 d: I8 i# t6 c: o2 r( w F) h& K$ z
module_init(led_platform_init);
& s. \* f, j2 ?4 j2 x! [" Ymodule_exit(led_platform_exit);3 b N7 v# p% g
q6 V m) w' X8 a$ a3 i- c
MODULE_DESCRIPTION("Led platform driver");
: q' M' D, D! ^9 B$ K# l2 R. ^, K" pMODULE_AUTHOR("Tronlong");
# m5 g/ A" t8 T1 E9 o' KMODULE_LICENSE("GPL");
" W5 G+ z1 J6 t
& y2 g- V( S* y6 h3 b) h |
|