|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 u3 d$ Y* L. E( r
#include <linux/init.h>3 F$ r; e; m' K5 P3 t/ q2 V s3 G
#include <linux/module.h>
# o& Z9 L. x+ i' c* u: N# w#include <linux/kernel.h>
, N6 T0 s8 }6 I1 f4 O8 D* r#include <linux/types.h>
! C9 W! N$ R: m3 V) N; [, O#include <linux/gpio.h># ]% O$ g5 I; z Q+ |# k( w
#include <linux/leds.h>
T3 i" S: [7 v" k7 K3 A#include <linux/platform_device.h>
4 W, t' c, k7 }9 j, w
# z1 A/ W6 l- Z! y& b#include <asm/mach-types.h>
/ k8 ^1 A( k! }- f#include <asm/mach/arch.h>
# n& W0 C1 ]" }: W4 {+ q#include <mach/da8xx.h>. j! F2 a* ~7 ^; c: R* U
#include <mach/mux.h>) v0 ~ b9 h3 s3 h3 x' k
" H A2 ? u' k9 B' ^& y* X, d* }8 h5 n
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0) w' b; u, Y3 s# E7 X
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 R9 z9 n6 S8 y/ M# R#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ w* L9 w) Y& W; N. o#define DA850_USER_LED3 GPIO_TO_PIN(0, 2) H! e( _$ r9 e
7 f; [8 O' x5 M3 x: _$ W" B
/* assign the tl som board LED-GPIOs*/. i" B7 Q) w8 X/ k7 y# q
static const short da850_evm_tl_user_led_pins[] = {
0 K% j1 e! u# J8 D6 q- x+ w /* These pins are definition at <mach/mux.h> file */& O% a/ j$ e9 d: h
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 J1 y& H& h4 Y. O: j6 ] t0 `: x
-1" W% e% ?5 O* d7 [; F1 c% o6 V
};
: E6 d; r8 Y; {" `3 z3 w; q% p; P' t
static struct gpio_led da850_evm_tl_leds[] = {
0 }6 \8 e8 r. M) ? {- U" [5 ~6 y3 F4 e. @
.active_low = 0,
$ v. M+ b: p0 `( T1 t .gpio = DA850_USER_LED0,; E2 }# d3 z( k, X
.name = "user_led0",. ]* I+ i7 h1 W ]9 e1 \
.default_trigger = "default-on",
& ?/ o) H7 N5 R, P3 a$ s3 | },- d8 D' T, a6 p7 M+ V/ A7 ]7 z! E8 S
{
- B1 h! [2 [$ Y0 k4 Z4 v3 x .active_low = 0,* `9 ]. x% k* m% U! b, w
.gpio = DA850_USER_LED1,
( f3 Y- Z% c' v$ |) b! x0 p* ] .name = "user_led1",
5 O u2 v K7 h/ u .default_trigger = "default-on",
& O+ S' T5 [8 g' ` },
8 Z7 [0 Z/ {& u7 I9 y {
1 b" s$ h+ i. {# x8 p6 @ .active_low = 0,
% _, \. G+ q; e6 v .gpio = DA850_USER_LED2,% [' f3 V# h* J5 E; A; P8 x G
.name = "user_led2",
6 ]2 h: N% I4 p7 V .default_trigger = "default-on",
7 W; x% p: k: S2 b },' [+ ~4 B: |, V5 M
{
: e. f! q' v% [+ H" r9 W, c .active_low = 0,
7 c9 q: }+ S: \$ M .gpio = DA850_USER_LED3,
! P, d. _' ? V+ y' N .name = "user_led3",' C$ w9 }# } b
.default_trigger = "default-on",0 l0 L0 ?& X# N, D
},
' l- n6 P; f/ Z+ M" Y# q};1 U& z; z: o( X* r8 ^
' y) b, E& j3 O! j( ]static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 h" T5 r) g9 W, P$ \
.leds = da850_evm_tl_leds,
" r4 J: V. Y: Y- y0 e .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
8 r( y' Q( u2 Y0 R" p};% m5 O0 ^& J, R! I
* w8 e' I6 l1 k% h1 g7 E m; j) ?static void led_dev_release(struct device *dev)
* C" W* `! [; m& Q3 L& u$ h{; h. B2 a! G+ D( g; D* V
};
0 p: X) L! \7 U: X. P. ]- Y9 H8 }
0 v5 Z, ]! F# C( ostatic struct platform_device da850_evm_tl_leds_device = {% g: }/ a6 `% W4 `
.name = "leds-gpio",) e+ [# {* u+ [/ D5 u1 y7 l6 I
.id = 1,
( q$ D( t" h: r0 V .dev = {: o; ?' z, r% W" ?4 P
.platform_data = &da850_evm_tl_leds_pdata,
. q% [/ _3 ?/ B! D: J3 a .release = led_dev_release,
" p7 _- Q4 T. G/ Q6 J& r }
% F5 V* g! W' @6 s};
. v `7 n8 I7 w `9 X' F1 ~: o; ~7 B3 J! ?
static int __init led_platform_init(void)% ~7 J# j! H3 v# T5 F+ e" @
{; L# Z% A: O$ T8 \: G. x4 g- K3 V+ e
int ret;! s4 U/ Q. E: Z. i* d% q5 z
#if 0
& J& K x1 \' {7 C ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% g' q$ m5 R! l, x$ r if (ret)' K) ?* i- |/ J, }5 d# D9 N1 |4 h
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# k9 {4 Z+ B5 e. C/ x Y "%d\n", ret);
/ C, g0 _! T6 ^#endif
9 j5 \" ~+ S2 M( M ret = platform_device_register(&da850_evm_tl_leds_device);
/ Y/ h5 K! @# T* i% t! Z( O if (ret)& H N# A+ Q- H( [- I$ c z% B
pr_warning("Could not register som GPIO expander LEDS");
3 c" f- P# s$ x+ x7 D else
. s& N" p+ t& t printk(KERN_INFO "LED register sucessful!\n");3 }& ^3 k, e6 |8 B! a- B
& e8 T8 w- F4 X, w' E! Q return ret;# p7 Y# Q! h- }. d$ t9 K5 m
}5 }+ }# a. e$ o. M% v
9 R) L- p5 e5 J( O+ P4 P
static void __exit led_platform_exit(void)
6 V/ @" `8 m& e: q8 m, v{% o$ m9 ~/ j# t
platform_device_unregister(&da850_evm_tl_leds_device);
. x4 z% n0 x$ u* {! a* N
+ `6 `- C) V" [7 s printk(KERN_INFO "LED unregister!\n");
6 }% d% h8 ~- F: l( Q6 d0 \& g}
3 ^6 u6 i& ]) p" \5 b" M( }
2 r6 h- k- p, Z% l6 W' hmodule_init(led_platform_init);
) ~, ^5 w, c0 `& y6 umodule_exit(led_platform_exit);
: G% {5 j9 e) X( i
. W. Z* N, ?% d+ PMODULE_DESCRIPTION("Led platform driver");
9 S( d7 o7 B3 y! ^: p! l3 TMODULE_AUTHOR("Tronlong");: `, z& g& L: |+ @+ f$ a
MODULE_LICENSE("GPL");" t# C( }6 ]4 C4 s0 h+ y1 `4 _
9 M0 U$ `1 b( X1 h, s8 |
|
|