|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! i% j. ~/ U5 M" W% S m4 ]& m#include <linux/init.h>. u; O) r: C) K O3 L. I- g
#include <linux/module.h>7 k; K, c( ^: a
#include <linux/kernel.h>
1 ? i; z# P/ `! ?9 a2 S! B#include <linux/types.h>
9 E& r) i) C' A4 }#include <linux/gpio.h>2 q8 d8 e) L% G' C7 F
#include <linux/leds.h>/ i: A9 [( G; X2 x d* ^' n
#include <linux/platform_device.h> q4 F3 e1 B6 q$ b
9 t2 r/ G9 m4 b, p8 w% e
#include <asm/mach-types.h>' s0 L9 ^4 G1 J6 \+ \
#include <asm/mach/arch.h>
+ b9 {) ]. ]% L0 ]4 {8 X3 J) }#include <mach/da8xx.h>
& R. Q: ?) a. y+ {9 V3 z4 I0 p g#include <mach/mux.h>
5 Y! L H: [; ]6 g; |% h
; n5 `0 S' L/ [; B# U/ t4 T6 C2 P#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 \: j8 D W; Z3 l6 V#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 Z3 L2 S3 V5 m/ S( C) U#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* P/ w. [4 ?# j7 L4 u1 n6 ~
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)) ~" C/ P: x: s# y7 `4 j
6 z8 m7 z8 X1 I/* assign the tl som board LED-GPIOs*/$ z1 {' x$ z ]- X, ~
static const short da850_evm_tl_user_led_pins[] = {
; D' s( \* o& f. n0 N8 a /* These pins are definition at <mach/mux.h> file */
$ M; J# B; U+ y# t; k DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
3 o7 y4 j, n5 ]* ?+ i& P/ X0 j -1
* d# G* X% V z4 e4 I' G: i};, m4 f W+ V; b# m: o5 F' q
8 X# I" g( ~" h2 `; g& I! Rstatic struct gpio_led da850_evm_tl_leds[] = {- e% R5 a! S, \9 B/ _
{
) W( z% ~% G, `5 L .active_low = 0,
* m! t9 G) n* V( @. \; z( N& z .gpio = DA850_USER_LED0,
+ v! H% B+ I: n6 X/ P0 z( |+ K3 X .name = "user_led0",
E1 ~1 p1 J7 c$ B4 j. H/ \8 B .default_trigger = "default-on",) x! O3 @. B& C$ R0 r# \
},0 u: e% \, K9 P4 d0 l
{5 I$ m9 X. C7 a1 l8 E
.active_low = 0,; |9 A$ t$ _7 d: l4 [# |
.gpio = DA850_USER_LED1,2 v5 b! W1 e8 G$ o6 P( S
.name = "user_led1",1 Y5 |* A, x4 V1 o* X
.default_trigger = "default-on",2 }/ q' k: C4 C5 E7 X
},, {$ P9 z( b3 p B9 W0 W
{1 ~1 @; t6 k. p" C( U: B
.active_low = 0,, @. Z: h5 y5 i5 {5 S2 J
.gpio = DA850_USER_LED2,3 T) T( k c: }3 ^+ ]
.name = "user_led2",
1 F* P( S# q$ S: b1 L1 F6 z .default_trigger = "default-on",
3 D9 c2 S. [$ u, } },0 t8 P: d+ x i2 r+ j) c
{
4 n( @' R0 b$ x" U9 m! O .active_low = 0,8 Z1 C% O" D4 I7 C5 v
.gpio = DA850_USER_LED3,: E1 { k& a. N9 l# N
.name = "user_led3",4 q3 a. U) ?+ C. v/ K5 e, _! P
.default_trigger = "default-on",5 R3 G0 J4 r' [/ L- Q
},2 Z/ k" Z8 K }
};
0 F7 }# ~* Z' E4 r1 ]7 m2 T
$ b4 s) r2 }6 L' G3 W; v) sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
! s5 Q9 Q/ R1 w3 ~" K: c+ P .leds = da850_evm_tl_leds, t4 g6 S& I* d$ n6 j7 Q( U
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),- q4 x: {# Z: q( l+ O3 f
};
1 f& o8 Y5 y/ f: E7 a! s$ Q5 c& ?8 z
static void led_dev_release(struct device *dev)& Q9 b; g) _' M) r
{2 c+ ~: s% C) q1 {: l) V
};" Z9 E6 i @8 \/ B
- U+ P! a% w% i2 C- L1 M( H Pstatic struct platform_device da850_evm_tl_leds_device = {; e0 I) l; _6 u
.name = "leds-gpio",
9 u# T& y6 G4 S) l .id = 1,- e. { i" x2 u, U+ a- X0 [
.dev = {
" H! k2 U; B; M0 z q' D! p3 m .platform_data = &da850_evm_tl_leds_pdata,
% j* Z& `! a4 r; P .release = led_dev_release,
/ `" g8 w; Z9 M& x }
- D$ w8 \# i4 N' v};
0 `$ i6 v! n# D h S, Q$ o+ f: D; _" a2 }( i" h% A6 {
static int __init led_platform_init(void)
2 z$ w$ D1 G5 @ P" f: R9 H( V{
) T, K3 \5 M' B8 N6 g int ret;' {# g# i& y* n. k. r' B& s: r
#if 0 z8 g5 H, E- L: N4 _8 R
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 c2 i5 o, Y3 D- f* D% k2 o1 Y' Q% W if (ret)
4 }' M& X0 ^5 U$ G: }; ^# ], K pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 K; J' T f4 l) y
"%d\n", ret);
& u" d: E/ b! _! m# P#endif
6 W7 d5 v/ K4 i ret = platform_device_register(&da850_evm_tl_leds_device);
7 n4 E$ @9 t7 g: e: T! \% x if (ret)8 `4 \# p% K' I) m' i( I' a# S+ E
pr_warning("Could not register som GPIO expander LEDS");
+ A$ x9 J! o) H* r$ [) `2 u else
: t3 x5 j6 s# r printk(KERN_INFO "LED register sucessful!\n");
4 d6 d0 [' R* z& ?! [" o! s) l
. Y$ `7 E: U a' H1 K/ @ return ret;
$ e1 l* ^2 m8 ?( |9 {}( r8 v, o. Y( z9 f
; f d0 @, [4 v, l4 S& a( v
static void __exit led_platform_exit(void)
3 ?. t0 k3 Y9 ]/ c2 A{8 s/ k O R/ B8 X
platform_device_unregister(&da850_evm_tl_leds_device);* |9 O2 k9 V2 D! F& y
" f! C3 P: A" v' B% W* t printk(KERN_INFO "LED unregister!\n");% _: r+ u% V: e) Q: a
}" J* Y! c7 _! _4 Y( n9 P9 c
/ Y8 D- c/ y3 O3 J, Vmodule_init(led_platform_init);
+ R0 K" E9 L, X0 c. t0 ~module_exit(led_platform_exit);
/ e) y* N9 V+ O& T
2 Z6 P+ D* O4 X5 ?3 V0 P( A" YMODULE_DESCRIPTION("Led platform driver");0 V5 F' R3 t, c# d; G
MODULE_AUTHOR("Tronlong");
" H- g5 e) D7 r( r( ]" QMODULE_LICENSE("GPL");" @$ Y6 u+ e* G
, V& K3 K9 o2 E r# N0 U$ D |
|