|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 z, J6 U. Q+ H#include <linux/init.h>
4 O0 N! Y" ^7 |6 D1 d7 w#include <linux/module.h>
4 P, d3 u/ }! Q# H8 M#include <linux/kernel.h>
9 p4 D2 b* ?0 C/ G2 w I3 Q#include <linux/types.h>4 K2 O h, p9 ^4 M7 e
#include <linux/gpio.h>( Q/ A# O2 v/ U( o6 z# i) P3 [: X
#include <linux/leds.h>1 D% x, _7 E& J E: F- Y6 R2 Y
#include <linux/platform_device.h>" K& z0 e" g9 L% s3 c) X1 z
, P: m: b" u& \
#include <asm/mach-types.h>8 M3 B6 f; D$ ^/ c
#include <asm/mach/arch.h>
: H4 X1 _! I, h1 P#include <mach/da8xx.h> n5 e8 q2 @9 i% k$ ^0 L) j6 A, p
#include <mach/mux.h>9 b0 [6 U& i. s- R3 c' w
8 o2 P; n/ f1 O6 T#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); P1 V7 ~3 \/ [4 G, }3 _
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) e8 x7 P" f4 e5 Z7 ? T4 o
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)8 Y& y: A! @- f( Q8 z4 B
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
+ x$ F/ b6 ~. }$ r; i$ g4 Y0 l& r) K! n( [
/* assign the tl som board LED-GPIOs*/
& ? T& x# z' B7 J dstatic const short da850_evm_tl_user_led_pins[] = {
0 ~+ T, b' w- l /* These pins are definition at <mach/mux.h> file */
3 L2 Y$ c4 Q5 P9 |) K4 i* l+ Y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
1 _# E( P+ b1 Z -1
8 @" R2 t1 [0 K% t( p% |4 G};
7 e& b" a. N0 u# p2 ]# o) }' u
2 B& P& r4 Q8 x9 Y3 O# M9 O4 Lstatic struct gpio_led da850_evm_tl_leds[] = {2 h% X# e' s7 p
{; k9 p4 f- K4 b* T8 X
.active_low = 0,: ?7 q: }4 X7 V" l: d5 ~# E! \
.gpio = DA850_USER_LED0,( w" I, ]- ^. h: |4 W2 W/ h
.name = "user_led0",1 D4 D P: Q. h6 m1 b" t, Z3 W
.default_trigger = "default-on",( e: b4 ^$ X$ e" _- j: d4 r: X- x
},
% F$ q$ D' C) @5 c' r5 z H {- N4 l: a, n7 t( T1 E) I3 B
.active_low = 0,
+ y: h. k. k+ u. T. y .gpio = DA850_USER_LED1, Y; w, S4 }$ B* G( b5 v
.name = "user_led1"," W' h* T1 ` S
.default_trigger = "default-on",+ b- O3 b( m: [& U) C- p! y! @
},$ x. H% E% G& F5 F$ f& o5 s
{8 D6 v) l- z" ?. k
.active_low = 0,0 ? j& d! V3 _6 T% B
.gpio = DA850_USER_LED2,. v5 M& g3 [1 o9 ^6 @9 {
.name = "user_led2"," T/ |0 h9 N+ @3 K
.default_trigger = "default-on",, F2 S* M# G- ~8 F
},
5 W2 K0 G! F: _6 k3 r( M6 ? {+ O% C! E$ m; n
.active_low = 0,
^$ l4 j1 U; a6 Y) C .gpio = DA850_USER_LED3,
1 n! U5 q( K- V9 H& U# v6 r .name = "user_led3",6 I& @8 b; o* W/ b7 y
.default_trigger = "default-on",
) _5 i+ R- P! v },2 q8 i/ V$ N' ^
};
# }' u& C4 k9 N1 U9 ~8 ?
1 e. D7 J1 e: i4 j b: k5 jstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" x' p3 P' ?- K0 h
.leds = da850_evm_tl_leds,% I6 t" Y9 L i: ]) j+ Q8 d. B
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),* R; a0 |7 }6 f1 z5 i7 S5 a) m! J
};
4 J- l* G$ U( t* k5 k6 O/ Z6 t+ L- a: G
static void led_dev_release(struct device *dev)
- g1 @+ y) Z5 ?% j& ^) |{
6 t! y3 g; A, r: \};
9 ?( [4 w8 ?# P/ U
0 g$ `; E& d9 v4 V* ^8 i1 T$ q8 sstatic struct platform_device da850_evm_tl_leds_device = {
7 x! w/ }0 R$ U7 T' _1 h; n L .name = "leds-gpio",
* E# A% M- g* p) ^9 W* P+ ?, [0 `- C .id = 1,3 S' |" _2 f' [( F* {" L' G! l* I
.dev = {. i0 D& g7 p+ V2 T( o6 G; z: F
.platform_data = &da850_evm_tl_leds_pdata,1 g2 P9 Y) A% Z8 n# V2 \
.release = led_dev_release,0 n) n. F1 r3 S3 ]9 T" ^4 G. F, |
}9 Y q8 O. v+ M: v$ T' E
};' @( R `' r" r9 y9 z
/ f' V' r% M* }5 u( Bstatic int __init led_platform_init(void)8 h) Q T G7 j9 x0 \. L+ e
{
; P. S& B7 M- J+ x1 _6 r int ret;
: Y" _& e, v: E0 Q5 }9 `#if 05 ?2 b" b) u4 M, Q/ C# @
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
* [, N- D, J# o, M" o# \ if (ret)5 i: q* E) a4 e/ Y
pr_warning("da850_evm_tl_leds_init : User LED mux failed :". h9 n" B m6 v$ J/ J8 {# p
"%d\n", ret);) G) q$ M# k( Z
#endif
6 u& }/ J% E$ P1 r* m* \& | ret = platform_device_register(&da850_evm_tl_leds_device);. R n, ]" g8 z+ f9 n
if (ret)- o0 g6 [, ?9 z1 r3 f0 F5 `/ h% _
pr_warning("Could not register som GPIO expander LEDS");* i. c( J0 _% \6 w8 q
else" L1 e* B7 ?4 h$ g2 k, x
printk(KERN_INFO "LED register sucessful!\n");; B0 h, c$ x& }& b! L' E/ F _- j- X
. g* M# C5 L# ^2 E' `' c return ret;/ \$ X) t+ V/ W: H9 G; M, a
}4 N7 r- Z/ _3 o
8 `* y8 |% q# `7 J- {6 h
static void __exit led_platform_exit(void)) M- V5 S/ o; {9 ]
{
: T1 i, ^4 x5 i7 V platform_device_unregister(&da850_evm_tl_leds_device);! E1 Z. U& y6 G8 o/ a( z9 d
9 w) F+ k7 @ p5 j
printk(KERN_INFO "LED unregister!\n");
- [" O. N6 W7 J# E4 l D9 o}
/ ^0 J2 d( P$ `; e6 @3 J) w) T. ~+ W
module_init(led_platform_init);* w _! t/ F& j6 U2 h, }; F
module_exit(led_platform_exit);# [3 I- c; Y; Y. B
' [% z9 p* w* b' ]
MODULE_DESCRIPTION("Led platform driver");
4 \1 t' B- }3 A1 \MODULE_AUTHOR("Tronlong");
6 R% }9 H1 n) FMODULE_LICENSE("GPL");
! g1 H% K) D9 Q9 k" [7 t( [5 b
1 ]6 m. j3 s' B8 F& w/ j |
|