|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* P% a" n" w0 \' {8 d3 m5 M
#include <linux/init.h>
4 { S$ z$ U& Z) g#include <linux/module.h>
1 o% V; R' }# M" g. v#include <linux/kernel.h>
4 w* H- h9 |5 n. j#include <linux/types.h>
1 T; h) Q$ C: i% R) C4 k k#include <linux/gpio.h>
2 B+ O6 \- V& M& t#include <linux/leds.h>6 N6 h6 g ~7 G, W/ ~
#include <linux/platform_device.h>
) Z( e2 X" W! r1 g4 U6 I0 V) h7 }! D* f& f, l9 V/ @
#include <asm/mach-types.h> @: b3 H Z3 ]/ v2 Q
#include <asm/mach/arch.h>5 U ^2 Y9 J2 T N
#include <mach/da8xx.h>
5 q$ d' y. f6 y: t8 ~. R#include <mach/mux.h>
6 p0 J2 P- c. C, u7 g1 J; I2 M( P1 C+ Q$ \' m4 ]$ r9 @: ~0 W5 l
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
N, c( Z, Y# P" _#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 D2 \4 w8 ^# v# H#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)7 G" r% X8 V2 k, m6 c
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* [" }& k# N3 u. t+ m
) P$ n& ~0 O" d. k# F& \% t/* assign the tl som board LED-GPIOs*/* a P5 _. |# K) O* Q" Q" ]) N
static const short da850_evm_tl_user_led_pins[] = {
) }+ ] o' F2 X2 w& \( I /* These pins are definition at <mach/mux.h> file */
$ Z3 G5 [- a3 r DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
9 I7 m i, l% r& c* y/ E/ r1 V -10 B& Q) e! H' `/ m# H
};6 A% i( S" r* w# k8 L2 c
& G! g- Y6 e9 B# o3 O$ dstatic struct gpio_led da850_evm_tl_leds[] = {( V( @! D/ \: i$ D
{
# x2 G1 V) r; ] `% V .active_low = 0,1 W5 n0 p; d" {+ I2 J* K" ^" K, e
.gpio = DA850_USER_LED0,8 N$ v/ x; b7 d0 E6 ]
.name = "user_led0",& b# o' t9 l7 }6 R: n" h8 G6 T
.default_trigger = "default-on",: H& l7 z5 b2 O2 f
},
/ x, D7 v* X( Z3 X1 [# m" s$ s( t {
" N3 Z% [ l' {8 U .active_low = 0,
0 K$ N0 `- |, M; h6 I( @ C) x .gpio = DA850_USER_LED1,; F$ P1 W2 I$ `4 b
.name = "user_led1",6 y r4 ? z: w( Y, S! ~; Q( C
.default_trigger = "default-on",
/ w+ I7 c6 \6 d5 M },6 X- P3 Q5 _, S- K0 X+ M- h# Q
{8 K3 Q" _7 e8 X4 k" K9 p0 M! r7 [
.active_low = 0,3 s: [& ]) k; i1 Z
.gpio = DA850_USER_LED2,4 T* a! D G+ l" K- v, R' ]
.name = "user_led2",
" K) r' j6 y+ V# l' @% e$ F .default_trigger = "default-on",
3 w# n( _# D( [; O! B* b! T, R- X },, r c8 N# F9 H5 {2 G4 e% t2 c
{- d- r5 C9 l, M6 k
.active_low = 0,
, n- j# V2 C$ d- _4 H .gpio = DA850_USER_LED3,7 t( f+ g( u5 Y3 ^* x# a7 T) p
.name = "user_led3", e2 l7 w# M2 `6 i+ `9 E
.default_trigger = "default-on",
0 X- Q: ?9 o; [+ `' F },. B. q+ G/ n- b! B# {/ t% b/ V
};
3 }1 C9 U: P2 b. M5 b- d1 k
- A! b# p( r4 f3 Bstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
8 K* r* m8 H/ L- S6 S .leds = da850_evm_tl_leds,
) \: y; T/ i6 t' [6 m2 A u .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
7 i, k/ |2 n( s/ z7 @};
' q0 P# G! I' c4 z
& D! j- n! M/ {' k8 @/ P: H/ f- fstatic void led_dev_release(struct device *dev)
/ j6 Z, Z1 s# w# E n: K" E" @{# i/ V; d; X: l* U5 t# L& o
};% B! d! o4 f5 E( [8 x6 F0 ~
% E8 @3 W1 q( z& Y3 p$ `
static struct platform_device da850_evm_tl_leds_device = {
# t. R, h7 R: I. l .name = "leds-gpio",
v4 R0 |* a( A7 ^3 Z \ .id = 1,
* i4 Y, ~; z" ^7 A7 _7 ]8 m1 l .dev = {" m+ V, r8 l+ T" J' z \
.platform_data = &da850_evm_tl_leds_pdata,
- t2 a; c5 f! `1 m8 m .release = led_dev_release,
4 o) g0 o8 P/ i2 M }9 M; F6 q2 j4 w1 M/ r
};" M; i" m- r; @# y/ A( n
6 [: ?% w* u, [" Y, I" Ostatic int __init led_platform_init(void)
" m) P( ?0 s( ?1 h+ q{6 y. G. x4 |, a% }" e k5 f( e; J( ?
int ret;7 O! x6 T. c/ A" C3 G
#if 0, a, ^) |! W0 W3 _3 Y, J
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, Z7 |1 U2 \* o* }0 ]1 R) y8 F
if (ret)" c3 V% z, k1 k# U& v
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 q" q. W+ d. l$ \% U "%d\n", ret);$ E3 [6 i% Q0 ?$ R
#endif
4 Y8 q) N1 j) f. h. e- q; c ret = platform_device_register(&da850_evm_tl_leds_device);; J6 s7 x7 i l1 f7 T# |9 {7 M
if (ret)3 O' q8 V. `9 V' z
pr_warning("Could not register som GPIO expander LEDS");. w1 S! S" ~7 l i2 n
else: N7 q/ W# W5 A
printk(KERN_INFO "LED register sucessful!\n");/ I" C4 F {9 p: A Y
1 g: \, c" v0 D. \ return ret;
9 Y3 e! x# X1 ?# H}
. ~4 n! E1 \" L y3 k' i( I0 l" [9 G' M2 ]& q+ T. W
static void __exit led_platform_exit(void)
0 g1 |( X7 h) y/ l{
1 b* j4 R6 g U V platform_device_unregister(&da850_evm_tl_leds_device);; j" r( j8 D$ w* V- f, N; U
' T" I. P0 c' u( D' y# j$ r printk(KERN_INFO "LED unregister!\n");
! K( |' J* K# v O+ }% F}
, s2 {. B& e: t" E( g7 c0 E
2 ^3 y7 y" `& \module_init(led_platform_init);
U# g* r- I9 P& }1 ^9 zmodule_exit(led_platform_exit);
- C& {: Z) K' y: f, ]. @ k9 i" }8 p( A' [$ R/ H
MODULE_DESCRIPTION("Led platform driver");6 B) L' F( n" o/ B# d- Y; {; m
MODULE_AUTHOR("Tronlong");2 w+ q0 a2 X `. p
MODULE_LICENSE("GPL");# W( \; E2 ]2 K+ h
# ?- Y, C* R4 D$ c- a4 B
|
|