|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! b& B# Q/ B2 |( ?8 L) Q0 B) j& m#include <linux/init.h>
3 |; p* s; n4 ]9 H; n5 n#include <linux/module.h>3 d$ N! B& o# z) b- h- l% D
#include <linux/kernel.h>! X/ O; U) L0 R
#include <linux/types.h>
( `+ }) Y1 u' o Y0 z$ `9 L. |#include <linux/gpio.h>
7 _' d& n9 a3 h7 {#include <linux/leds.h>& |* l4 e7 P& a
#include <linux/platform_device.h>' w; r5 ? @0 n- R
8 w! ~7 ~- u5 i1 H: u& F3 h$ `
#include <asm/mach-types.h>6 g$ v+ g6 ]) q0 G" m9 q4 \
#include <asm/mach/arch.h>
6 P4 ], _# h/ j. `, J4 o' Z#include <mach/da8xx.h>: F1 g5 m P# ?: N. ^* f6 C3 u$ x
#include <mach/mux.h>
9 p3 ^5 f) R5 w+ |4 M8 n7 N
0 V4 t! z% T! d/ _#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ }( P* s& R( [9 M+ n#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ D" M% E3 V1 M5 t) H. N#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) [" D& {# R E7 K#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: O; H; j( o4 c" L: R/ ?" ]# s2 B, A( `5 |5 w3 p; F8 I. o- q
/* assign the tl som board LED-GPIOs*/+ A% @) P" [( d1 H
static const short da850_evm_tl_user_led_pins[] = {- y2 N, }9 l# L
/* These pins are definition at <mach/mux.h> file */# v: Q6 ]$ A; w) N* E' ~9 r
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ r; m; W+ I) s7 h! e
-1) h9 C' y* R* [! _. v K( ]
};
0 Q# l# l, ~1 [+ n" ?9 B* o# \, L
static struct gpio_led da850_evm_tl_leds[] = {
% e% o7 X1 Z" y8 L {
R9 ~- b% l/ b1 E# P* ] .active_low = 0,
) v: Z4 [9 m% T8 k/ M6 l/ ] .gpio = DA850_USER_LED0,( C3 G3 D: }# y3 n$ R2 A6 Y- g; `# W
.name = "user_led0",$ Y6 }: Q2 P) {% l
.default_trigger = "default-on",! `. y' d% `/ K" Y$ q, {
},
' j; M/ X1 ]) m/ T; W {
) g1 l' J/ o K) j# |% ]/ B .active_low = 0,0 J$ C/ I0 P: p
.gpio = DA850_USER_LED1,
, L0 h7 i% x7 ]6 Y% @, k3 Y* [) X .name = "user_led1",1 p! O+ _8 h! W
.default_trigger = "default-on",
4 n7 t: D/ @' `, c- H },
a$ E8 s. d f$ G' _+ z {; H& V7 F" d+ i; r! {
.active_low = 0,
+ X+ V& A) r7 [' r" z7 \* t$ ^7 C .gpio = DA850_USER_LED2,: A$ B* N4 ^& m) D7 P
.name = "user_led2",
. T) |- r3 q0 G) } c .default_trigger = "default-on",
# B. ?$ E/ l1 q },1 G! r" l, |% T8 G5 p' n6 A
{* l/ n: d! \* z- W; C3 a1 S" _
.active_low = 0,4 c, \; x, h( E- ^0 Y( n
.gpio = DA850_USER_LED3,* N$ @6 O2 d s5 r% j$ Q
.name = "user_led3",
9 s6 d6 u$ C8 v' |; S1 m .default_trigger = "default-on",
8 p/ i5 T) C2 w, N },: t- s: i/ p. i/ _
};
' S- O5 o/ m8 b% H9 O
+ q/ e n/ |/ P0 a* @2 a! ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ b8 W; `. g2 |4 D& c
.leds = da850_evm_tl_leds,
: O5 b; ], b) Q2 a" q$ E* g+ y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),) L, H) U: c! l! W1 c
};
: p( i* |- }( T, q) S" h: L8 w! M1 J( m6 v; }
static void led_dev_release(struct device *dev)1 v" O, W/ D0 |+ s
{( u' w* c" I9 u* U8 V4 q. A
};
0 \. y; s$ P( d# t" y1 X* C" F: E0 c' ~7 Z) q
static struct platform_device da850_evm_tl_leds_device = {; Q; P* a0 R* J6 K: N$ _! [( k
.name = "leds-gpio",
) g# o" k. o9 Q* L1 H2 n! ~: S .id = 1,9 i. R2 Q( U( F; k8 H0 F
.dev = {' S6 Q' S i, |3 ?1 \$ b1 P
.platform_data = &da850_evm_tl_leds_pdata,) [$ b B2 n( i, L* N' I W, s
.release = led_dev_release,
& o0 r! L0 n5 j }
- e% @9 ?" j" Y1 X- f. f* ^};
- M8 `+ h" `' X4 j- M
! T# O+ r* Q0 z" P5 j2 \3 Ustatic int __init led_platform_init(void)
3 V8 P& w' j) i, R$ Y+ a/ x{
# X `& f; U) j6 |0 u int ret;
) I. d4 m2 d+ q* _" V6 s5 r#if 0
* j' |0 p4 b: I* Y' s ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ h& d9 R' J8 V1 g3 ]( K: d if (ret)
$ ?2 A; ^7 Y" [$ a8 l2 U pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 L. N0 C! n% P1 Z9 q6 [ "%d\n", ret);8 }6 C/ \% `; r; |
#endif
' q* b9 _; ?& W, C' d ret = platform_device_register(&da850_evm_tl_leds_device);
8 i9 ]5 m6 [9 P, \7 r# q/ f if (ret)+ n. a% v/ q+ ?: ~2 G) c
pr_warning("Could not register som GPIO expander LEDS");9 F y. W4 W) `$ `3 u3 Q1 Q$ h
else# f# @$ v2 Y1 t
printk(KERN_INFO "LED register sucessful!\n");
! Z' c& p$ `& w" ~' I
Z% X( `3 C! J( o0 K, s return ret;' t5 _, `$ w ^0 K& _; v0 n* t
}! j0 F1 r& }, O. W/ v8 s+ b
( L: p8 C# }0 A2 d3 t6 t
static void __exit led_platform_exit(void)
5 T: J& q3 ]6 k. B8 d) I+ ]# T{
( U$ V Y. f7 Z# s" v platform_device_unregister(&da850_evm_tl_leds_device);* f& k! _8 G& J" ^
9 `8 p+ _; S' @8 W: \% r
printk(KERN_INFO "LED unregister!\n");, V7 E) ]5 G) L% M' J0 j
}
3 z1 g* b: b8 K* m1 X8 }1 E7 L- }6 L# _& h3 U
module_init(led_platform_init);: U1 j/ w7 d9 E* g; Q7 ?
module_exit(led_platform_exit);$ t; \: w6 n7 D9 b* T/ k% G
3 P, l1 r, N) d; j" |1 r
MODULE_DESCRIPTION("Led platform driver");
* ?& r; U& z5 P3 ?7 G5 d# {& GMODULE_AUTHOR("Tronlong"); q. e, x: c: s! B% c& r
MODULE_LICENSE("GPL");
?1 ~$ s. Z8 K# ?# H5 N2 ~
) W1 w0 s7 M r+ v |
|