|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% d+ R! A7 J3 q- z1 A
#include <linux/init.h>$ ?7 Y! z7 C% t" d: w* U
#include <linux/module.h>7 x5 A3 Z0 ~! u' |0 @. ?5 Q
#include <linux/kernel.h>& H5 n' P6 l4 x' h9 [
#include <linux/types.h>
; W; F, [0 Z; q( S- P0 S#include <linux/gpio.h>) ~5 l3 a. R6 v/ \3 Y0 u
#include <linux/leds.h>
3 |6 ^& b8 U7 I#include <linux/platform_device.h>
. p- H# ]- b9 w( G. Z" I0 w
, e; _2 o4 E; N6 j' M#include <asm/mach-types.h>* @- V E& D1 v0 \
#include <asm/mach/arch.h>
( A% W/ z* J9 Z9 {#include <mach/da8xx.h>
2 M" w% i# `: z" e; Y#include <mach/mux.h>/ L8 ^1 _: @$ j6 u9 b% C
6 W. \8 l* {, v4 n' H#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" @1 d( _+ m+ {: A/ F1 _4 L6 C
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)- z- Q. g5 |) P. ^6 D& q6 h
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 b6 ^. W& {+ }
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 I1 F6 `6 P" ^6 J+ t& e7 d
6 ^0 Y9 h ?/ a' p( X/* assign the tl som board LED-GPIOs*/
* l. P+ S. n3 ?9 G3 J* z5 f, dstatic const short da850_evm_tl_user_led_pins[] = {: E+ J' k) \! |$ Y [; r, _, b0 O
/* These pins are definition at <mach/mux.h> file */
! _/ ~9 r% ]( f6 }. O5 T DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
! U- s; E& e# j# ?* D! h -19 E( q ?' l0 c
};
y% D. n7 Y' } u. f: ]( g* z( W& H; k' m5 l% R) F
static struct gpio_led da850_evm_tl_leds[] = { ~, }9 w! p9 m+ X
{
% ^& ^+ e( W+ L- p8 H8 q .active_low = 0,
$ f% U, ^7 I5 o; B1 J .gpio = DA850_USER_LED0,
/ S% V' a8 p" F' F: b: D/ X5 d .name = "user_led0",; M# [2 W% {4 Q& U
.default_trigger = "default-on",
* U" z7 `# Z2 ^ Q },
y" ~7 d' Z a% L( U9 m {6 }3 j' h- M- J( r& ]- i, o
.active_low = 0,, F0 [5 Z1 P9 w" ]" _9 W
.gpio = DA850_USER_LED1,4 P$ p1 U" l4 W" r. w3 Q% x2 n
.name = "user_led1",
2 ~) y) g3 |. E& i! j% m .default_trigger = "default-on",2 ~/ i1 }: S3 d
},, y+ j; G- @$ [9 W7 {1 T; C) i
{
1 M0 f! _; t5 Q5 h- A* d8 T/ h .active_low = 0,
) G+ p; S/ q! C6 z8 U% x7 E0 h .gpio = DA850_USER_LED2, e& L# M L* Z4 f6 B
.name = "user_led2",
, `# d, l1 ?7 V! q* J .default_trigger = "default-on",
* U! a- r+ v; E1 v# l },0 ^0 @* S+ K# N4 w0 z
{$ w$ a6 D( t8 J5 u$ m* y' b7 A
.active_low = 0,
& r7 ?: B, X- A; A" D9 \ .gpio = DA850_USER_LED3,
/ V. k1 P* n4 Z l8 p8 D3 T8 V .name = "user_led3",
`+ Z, j; x, V' q( v5 W .default_trigger = "default-on",
& z) t# ]' X2 X( n+ ^ },
: u6 R! l% G1 ]7 ?3 D& l};
) V; H9 X$ v# }" E" c
' H: q5 K+ i) q4 m4 d7 x1 nstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {* b# E& ~7 d r
.leds = da850_evm_tl_leds,
0 t) i5 w8 Q! X" ~ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),, V q1 R7 R q. _ g
};+ E# |0 V' \4 a: r- o
8 I% j2 I( ]& _/ w/ _5 W: w+ x
static void led_dev_release(struct device *dev)
( ]3 M3 g( v5 R4 z7 x{ B/ u1 T- l1 p7 {: v4 A* Q+ ]
};
$ Q0 }+ l6 H8 x% {7 s+ k: l" X
* ?7 o) E2 A! ^+ O$ o0 A' istatic struct platform_device da850_evm_tl_leds_device = {
! T) \7 K9 `. `* } .name = "leds-gpio",
9 n* a( V* [) P7 X2 K* |1 z .id = 1,
( p8 }1 |2 _% ` H .dev = {4 Z W% j6 W# R4 y# X2 C! {
.platform_data = &da850_evm_tl_leds_pdata,2 q9 Q/ v: U" Q+ A3 H- z% a
.release = led_dev_release,
! ^$ t7 W- |! t3 n( a, k- _ }2 \. G& D6 N d* H
};
, F! N2 s: u0 h! o& o Y7 ?- f% w5 f# N7 e+ B) r$ d
static int __init led_platform_init(void)0 W6 Y+ ]* ^' }7 q8 h% T2 p5 j+ S
{4 l }; _/ R; I& C6 n# h
int ret;
$ N, Z' d4 g ^#if 0
+ q& ^- K$ [7 r% @9 l$ L H8 U ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);2 j+ ]! r5 \6 y4 ^# ^6 U$ ?
if (ret)
* |( G; m/ l1 j$ {% |- c( p# F pr_warning("da850_evm_tl_leds_init : User LED mux failed :") S( W, _9 Q4 C1 }' s ?* @. D
"%d\n", ret);2 x! T0 R: N4 C7 p5 j+ @
#endif1 j) K: `4 W5 e3 B2 F3 O4 n& g( l. B
ret = platform_device_register(&da850_evm_tl_leds_device);0 U/ F! {/ Z( r c3 ^; k
if (ret)
# o$ u& _1 P2 `4 p9 k pr_warning("Could not register som GPIO expander LEDS");* J# X5 y' | a: w; i5 C" v! G
else
|7 g, B' j. I( B- e$ ~6 j0 Z$ e printk(KERN_INFO "LED register sucessful!\n");0 k- }& Z* s+ Q4 L9 k
, _6 o1 f( ?/ ]# I3 O
return ret;
4 R' B- ?: f; q* i+ Z; U- n; }0 J}4 D+ i# G/ i2 B0 s
0 r( s" \$ z" \9 ~& e9 H1 jstatic void __exit led_platform_exit(void)1 q: q- c- u0 S+ k
{% ^9 B4 T8 I8 G9 d+ o
platform_device_unregister(&da850_evm_tl_leds_device);- B: l) I6 |3 Q0 a0 L8 C# Y; M
9 y" Y( Z. _( Q9 l# m printk(KERN_INFO "LED unregister!\n");3 V8 o/ p; o9 P6 r2 ^3 k
}
! r4 S! B+ D" T7 X; S1 E1 L+ m" n; a: f( s" Y; a' A$ Y
module_init(led_platform_init);3 R3 ?+ |/ _) ? k5 F" `" u; a( O
module_exit(led_platform_exit);
7 \) Y: v! C$ M3 O# u/ t9 o
3 y1 f8 m" \- t& L& OMODULE_DESCRIPTION("Led platform driver");
4 ^9 Y- p* B* [& pMODULE_AUTHOR("Tronlong");1 g- T; u9 U6 p+ j% x8 e, `
MODULE_LICENSE("GPL");
% B v2 q9 q+ M q2 T( g
' K. U1 c3 q$ I6 z; C |
|