|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& ~1 L; n( |# ?9 Q* K#include <linux/init.h>
5 H% m; [# `/ u1 q#include <linux/module.h>1 {6 h) a6 _: ~9 l! n. E
#include <linux/kernel.h> ~5 \" z/ E, {6 v( n( S3 I
#include <linux/types.h>
9 h& f" X/ i# c: N+ j#include <linux/gpio.h>
* _' Z4 \. i% P9 h4 B#include <linux/leds.h>
3 i. U1 W9 o, U$ {1 R, @' r. ~ ]; a$ H7 s#include <linux/platform_device.h>- t7 j: h+ x4 S% M, h9 A
' h% o' E/ ^: o' y6 q$ e7 R
#include <asm/mach-types.h>
7 v6 `6 X! H" X5 [! F" j#include <asm/mach/arch.h>
3 g. ^+ `3 Q, O" L9 Z#include <mach/da8xx.h>
, o6 N: q$ E! X6 {#include <mach/mux.h>: R( i# M# w9 A8 j7 @
' _: m% r" N6 H: a) X3 C$ Y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( h# Q7 e& n& K7 {
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: S Y, B. l, ^% Q' B#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 u9 }# h( `( p0 M#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& l: }# s9 S' }! i& K' M% ~) x
- }0 `8 ?( K0 i& I: b/* assign the tl som board LED-GPIOs*/
" M7 `* a1 [$ S! @3 G0 astatic const short da850_evm_tl_user_led_pins[] = {
: W$ G1 L0 m8 s. P m6 B, y. j4 \ /* These pins are definition at <mach/mux.h> file */& m4 p9 S9 s+ n
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
: M0 q, Z q1 o) B! ^ -1# I% w& B0 d# i& O* u) T' }
};
) a7 D0 k. x [. x [: J
* g9 l: T8 @# r/ K# H- Fstatic struct gpio_led da850_evm_tl_leds[] = {1 N H: n. k0 s. \: q
{
! E1 W+ i1 X4 Z1 o/ c6 x" z& l! w: z .active_low = 0,
$ H. y* l; `, _* r9 a. S .gpio = DA850_USER_LED0,
5 o% a r( i. r4 d, W" ` .name = "user_led0",
9 K: d* x3 b3 C+ f( q2 z8 _; x .default_trigger = "default-on",
. k+ l5 }9 D% j6 Q" U9 S: p7 @ },' X3 p) p) x2 T' g; k( \" u* r
{) R8 G' e+ [+ z- c- w. x: Z
.active_low = 0, J# H/ ^ c' E
.gpio = DA850_USER_LED1,- |$ q+ b' n1 `9 N: ]$ B
.name = "user_led1",1 X& @: W: ?0 ~% b! W
.default_trigger = "default-on",
Y J( V8 U. [' s7 d5 I- R3 r2 ~ },4 B/ v5 Y/ h; g4 j6 r
{
; m+ d3 @5 }( j% y7 R! a .active_low = 0,2 H6 Q, \6 L5 n
.gpio = DA850_USER_LED2,4 r% f( Z- w3 n& K4 D, W. n7 J
.name = "user_led2",
) d" b3 l7 S H3 R .default_trigger = "default-on",# Y; p9 @* R% T
},
, _* Y' N; x$ a& @ {
# R+ q& Q$ N: `8 c' z% j7 l .active_low = 0,
. X; e$ a! O, V" F' O: r4 S .gpio = DA850_USER_LED3,
" ~9 ]# D( @* C" f: ^ .name = "user_led3",
2 b( ?: v0 T- |+ p# g8 W% e! H .default_trigger = "default-on",
( T: z+ {+ e- Y2 K },( ~/ n$ i8 B% E( T, Z) D: e7 u
};" w5 U& t1 d5 z: ?* q: g( H) _% K# }
7 w0 l) o$ U8 v, A9 t8 D+ V Z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* r2 C% C# E! ^6 V6 ?% S
.leds = da850_evm_tl_leds,! d+ k. B3 q# S- A2 N
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ r- p8 G' v6 i+ y
};
7 c( ]- s, M# _: d/ A
2 H5 D- ?$ @9 z# }9 zstatic void led_dev_release(struct device *dev)* F, E. r2 `% p, w, [5 K' L
{
+ b- b4 u" t M};
( z6 O, p: n0 G) Y8 O+ H
4 Y+ L) V9 ~" D5 p d) @static struct platform_device da850_evm_tl_leds_device = {
$ ^# G0 j& q5 |! Q) C$ }4 ` .name = "leds-gpio",
& |* n9 }( _1 Y* a Z. t b/ n$ s .id = 1,- x# v# K3 F5 L
.dev = {6 P% m* I5 P& y( b5 ?+ C
.platform_data = &da850_evm_tl_leds_pdata,. x! @$ g8 n/ U% `+ L$ P6 e1 Z
.release = led_dev_release,
' g0 Z; u1 o3 | }- }" E: d ?6 l$ D! e2 r; X
};
) I% y2 g, ]! u/ F' \) S8 N
, Q8 J8 p( `. M e4 u. B, Bstatic int __init led_platform_init(void) i; p, ]. G- Z2 E& t7 u
{
! D# q5 h5 @5 I* I0 X: c int ret;1 S0 H/ A0 N' h& X$ v- ?/ X
#if 0
& K6 e3 A* g9 C9 B4 N [ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( c: D5 o' }6 i1 L. E6 l
if (ret)
5 a% k; H* B! |2 o3 Q6 F1 o. m pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( n/ S# K* X; J; F5 {
"%d\n", ret);/ c1 v3 X( ]# R: @
#endif) X& G$ _4 G! L) R9 ], {
ret = platform_device_register(&da850_evm_tl_leds_device);( |4 k' _8 F! m2 ~" _+ j
if (ret)
r9 Y* G* v" a0 k pr_warning("Could not register som GPIO expander LEDS");# Z3 q. y! y/ ]5 N: e7 J& s/ O
else
$ K: j, C( r! m4 V printk(KERN_INFO "LED register sucessful!\n");0 `4 V4 s8 P, c6 }, F* K
2 P, _! h$ E% h8 H' T return ret;% g$ b) ~( l4 t) F* y9 U
}
2 U# L5 z5 }2 F/ M6 Z- `5 G7 _
% A, A. C$ x. R( U+ O& @static void __exit led_platform_exit(void)% ?- u. i7 o+ X8 U) e2 [
{; l4 x- o5 Z4 w3 n, L$ L2 N( H5 ]
platform_device_unregister(&da850_evm_tl_leds_device);
# L6 R7 |( b" U" y3 e+ `0 T- Q4 @ |1 U0 G; A5 e9 k, `* H3 ]
printk(KERN_INFO "LED unregister!\n");
# k6 A q; _2 k0 n}2 h& ?2 r% f1 |3 Y- n2 j
7 k& @& x9 S6 g" e1 d
module_init(led_platform_init);" J; G: H% I+ {5 y6 G2 ]
module_exit(led_platform_exit);# E& p9 }9 u5 s7 S; V/ @+ x
- t7 m% m( o& o! m0 _MODULE_DESCRIPTION("Led platform driver");4 o. i9 Q) E+ H; L
MODULE_AUTHOR("Tronlong");1 I- R+ O0 u/ n7 p
MODULE_LICENSE("GPL");1 S; c8 W. b' Y9 i. z) e6 A
, g" D( @. P# X E8 u# b4 F
|
|