|
求大神给下面的程序做注解,请稍详细些,谢谢。- i- b/ ]9 E) ~
#include <linux/init.h>
, j( c) N1 Y3 z. t5 E. g) H#include <linux/module.h>
( d3 n. W6 e) @# B5 \6 p#include <linux/kernel.h>
8 M( D* G ?2 ~- ~# b#include <linux/types.h>
9 t! Z1 [ r6 w8 J. Y+ ?' S; U#include <linux/gpio.h>
/ j, b' {; P& J, F! B9 t; z( k#include <linux/leds.h>
) H0 [. O/ [, R7 F w#include <linux/platform_device.h>
! t! _2 c) ~$ e& V( V
5 H8 _# \4 b; W+ s) J#include <asm/mach-types.h>
: d; G3 _4 x7 @# g. p4 _3 s$ C#include <asm/mach/arch.h>- ~+ n O' Q+ o2 A, ~! p3 j# Z
#include <mach/da8xx.h>& Y3 N* `& _2 e# h) a E: }. w8 i
#include <mach/mux.h>
# z0 T3 q3 u7 _0 f+ A" w+ t' n
4 E& o4 O9 c( q2 l" |#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- {8 O8 h5 E, b- a$ B
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) Q/ V# J+ D8 [; U" ?% F$ s: g8 F
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
w! Z5 z( e% x6 R#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
9 s5 ?* r1 B3 O; K5 n- t; D: L6 K5 b. t) L2 ]. S" h, `5 L
/* assign the tl som board LED-GPIOs*/
$ x# z7 `$ `. M2 F7 n$ rstatic const short da850_evm_tl_user_led_pins[] = {6 ?7 O; i* `, z
/* These pins are definition at <mach/mux.h> file */9 D# [+ p* m3 Z) v" L9 |( S
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
! i, P5 x+ Q7 G# J; ~ -15 e' |1 u. Z8 f- h+ C
};
! J( k- `6 D! `& m8 e4 l
2 \7 x- r0 ^! Z! x! d' ]6 Vstatic struct gpio_led da850_evm_tl_leds[] = {
# B# a2 r O/ C$ t+ y+ @3 N8 v* I$ Y {# x8 R( V+ E8 f9 F6 ?! M0 c1 d
.active_low = 0,5 d9 s/ t7 o6 E
.gpio = DA850_USER_LED0,: o+ v; X5 R/ g9 g
.name = "user_led0",/ V5 y7 r8 E2 y5 O c' E
.default_trigger = "default-on",$ ]1 |! e8 X5 v2 e9 i, |3 u7 z
},
G" P! y( d9 q3 d, d {" F# c# X7 ~; g4 J- ]$ X
.active_low = 0,
1 ?9 _4 y- g% X .gpio = DA850_USER_LED1,, k5 {0 t" f/ M
.name = "user_led1"," H2 f O5 n+ b9 \- i1 |
.default_trigger = "default-on",
1 y* k, M/ K! I4 l/ Q },% v+ ~ E4 B3 g
{
1 j& J2 P; j8 T4 f .active_low = 0,: v5 K* r w' e: i! z+ f2 u7 x
.gpio = DA850_USER_LED2,$ B+ [' s5 M+ P+ J
.name = "user_led2",. a: l% x7 M( B+ P- m+ Y
.default_trigger = "default-on",
% l) s- b9 O' p( M* z" y' I },2 C% l& _& z6 [5 g; r5 i
{4 r& K+ ^5 d+ u2 a y( J
.active_low = 0,
$ w1 E, q y W: z .gpio = DA850_USER_LED3,
+ ^- A4 R3 A1 \! l% z' j .name = "user_led3",8 ~- B) K: I \ \# H9 X
.default_trigger = "default-on",9 M" I" k2 m' |# m' ]
},
# K3 s3 p' p; {8 T) s};5 A% b. a8 N6 U: w) h
* {6 Z( z! Y& A& N
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
8 H- F8 [, Q# s- ? .leds = da850_evm_tl_leds,! n% S. q/ t/ H' M9 v3 F3 a
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
: f1 } G$ W% e};: y( X. f9 @+ q) p1 [# v/ j
u5 F6 x: }7 Z( D6 X& V O- g
static void led_dev_release(struct device *dev)
) P8 d r. l) { x% w8 S{
- |6 T% J5 X8 h# M8 ?};3 s$ c# K; i$ N$ k7 Z8 A0 B8 h
2 r- R4 l; ^' B0 [8 ^static struct platform_device da850_evm_tl_leds_device = {' S4 L" e6 v" F* c8 ]; p
.name = "leds-gpio",
* X1 [! n/ t% |: ?* ^) J* d .id = 1,% E# q$ q0 z: z- r0 h$ g8 g
.dev = {6 Z" _0 _% q- i9 `
.platform_data = &da850_evm_tl_leds_pdata,: `: o/ g% z' v1 Y* u' ?5 H
.release = led_dev_release,8 z9 N. i6 ^; v" y9 Y
}( Y! i" m3 P* I# v
};9 t( S$ m3 N% J/ j7 u% _
. k! I7 f) U9 `% V7 a& ~static int __init led_platform_init(void)
3 \- N K( Z# C8 Q" w* I* }{
: f; B5 D+ K$ K int ret;8 q$ |% v$ P: m& t. x0 t
#if 0- @! R" `7 i- x
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! d0 ^) R" q: y+ ~+ ]1 |
if (ret)
% ^4 W4 E4 W! _) W8 K9 ^- R2 x- ] pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 g& j+ r/ L; y0 H) H/ w2 `
"%d\n", ret);* \2 E7 E6 U5 J3 G: n- v, {* I
#endif4 Z" `- p, O& y" i5 l) O! R) Q% D
ret = platform_device_register(&da850_evm_tl_leds_device);
6 Q$ h$ u/ h/ T1 U) n* p if (ret)
L& Z9 Q/ \% o- W+ ]2 F% F" A. [. z pr_warning("Could not register som GPIO expander LEDS");
! G' L% `# G9 s4 N( K5 } else: G& j! T' D8 G
printk(KERN_INFO "LED register sucessful!\n");7 t* \. e8 z6 W
3 x2 o9 g, j/ T8 K7 [/ k; ?' b
return ret;
, v4 K" ?$ ~. Q0 t}
, ]( f) ~0 m1 B* h) a" |
1 `: e. |* e7 Qstatic void __exit led_platform_exit(void)
; r: c% P2 p0 d0 F{" {8 ~$ N: Q4 [6 ]
platform_device_unregister(&da850_evm_tl_leds_device);
: E! a# J0 D' r+ b5 _" d1 i/ I J# z3 W4 j$ ]
printk(KERN_INFO "LED unregister!\n");
& u8 C! \; m3 R}$ U2 E; R" ]4 H7 U9 e: R6 M
, Q5 t8 V; p+ H3 b* ?; e
module_init(led_platform_init);) i: S% x- G! y
module_exit(led_platform_exit);5 n* `& e# @$ I3 Y' L1 w& b2 G
- p4 V9 |' H' C! _MODULE_DESCRIPTION("Led platform driver");5 p* o6 d, D$ Y% i
MODULE_AUTHOR("Tronlong");
( M& P1 Q& A4 |$ U* }& V8 {MODULE_LICENSE("GPL");5 A; ^. Z) A0 {/ Z: a
7 d1 }$ }$ u( @ |
|