|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
) }6 i w4 @* F6 _4 x- d9 E, [! J/ H#include <linux/init.h># q4 @- s- B' q- K- Q6 u
#include <linux/module.h>
( C# [" e- i" t8 C6 Q5 ~#include <linux/kernel.h>; ]2 Z4 e) `. S
#include <linux/types.h>
: H$ a O! p, S) ^% _$ s) ]* {#include <linux/gpio.h>* P0 N1 }/ h: ~+ M7 M
#include <linux/leds.h>5 w# o3 s F# o, l6 a
#include <linux/platform_device.h>
7 X6 `- n7 `- p8 R Z- q
8 j, c# @& r3 H* x! ?2 @6 I#include <asm/mach-types.h>0 g& g: J4 ^1 e6 ^ K% U* m
#include <asm/mach/arch.h>8 G+ y) A4 n: f+ D
#include <mach/da8xx.h>
6 G" [5 G: A' }" M4 C. Q1 X# W#include <mach/mux.h>
% f( E: Q& O! u1 \9 a8 F. a( ?* k" Q# @6 A' }7 S6 q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- m _( x* I% L8 E#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! P% s- e* U" h; v( h
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 N4 `7 B4 g" C% k6 }( [" ]* A: M
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 T6 S% r- S* D% G
, X$ G, q2 L0 O
/* assign the tl som board LED-GPIOs*/& J, S7 s y0 L
static const short da850_evm_tl_user_led_pins[] = {
8 N$ ?2 Y( o0 a6 e! W: a /* These pins are definition at <mach/mux.h> file */
- U: b' `( B/ i9 k+ P1 o DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,3 k8 {6 |" z" D7 w
-1- z/ |- v( z: j( {# y
};
( m3 G7 ~ c$ @5 Y: ^8 E F% E' z5 b9 m
static struct gpio_led da850_evm_tl_leds[] = {: }) ^5 f9 Q E, \$ o
{
( ~2 H1 ~" Z; y, z* ^ .active_low = 0,
+ f: X4 e' V$ R" p4 d! F .gpio = DA850_USER_LED0,6 H( q8 S' q R- N c, P4 o
.name = "user_led0",- b1 u& Y6 [& A% Y. j3 ^
.default_trigger = "default-on",
: L! n; ^9 |$ N9 | },
+ R9 \9 C0 B) Z0 k {
* u! B0 q% Y2 y .active_low = 0,& P" S% I& q1 D! K
.gpio = DA850_USER_LED1,
y: F% I; A. o* U9 a7 d: p .name = "user_led1",
+ v# T" @8 n# Q/ r6 T. c) Z .default_trigger = "default-on",
! J6 M8 _) J) n. D% P% B },
( Y7 n8 q* O" z {
% c4 E6 Q/ d, H: J% u% P% M* D7 d .active_low = 0,8 y6 h. w4 w6 ?
.gpio = DA850_USER_LED2,' `" K+ x$ [8 z1 h. c0 z7 G6 d
.name = "user_led2",
7 Y4 O3 o& M p" m) o) N .default_trigger = "default-on",. |6 }4 A' t9 i6 v% S- j
},
4 Q, [5 \$ u3 Y3 n/ ^ b( A2 V0 i {
! p2 P1 o6 f* b& ?1 a .active_low = 0,
! u0 c- s$ k* C8 s% B' o* G .gpio = DA850_USER_LED3,( V/ |# e) p) K1 g5 X" M% e7 x
.name = "user_led3",/ g# @' m$ A7 M5 ^# H" z7 t
.default_trigger = "default-on",
$ ~5 f( J( ^' r- h) u },
% d6 `/ |9 s$ c/ K" [5 c};
% V0 v8 U9 }0 z6 s4 Q5 X
1 D( F3 {2 C) n9 o' istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
v0 G$ p8 h. e. Q: x .leds = da850_evm_tl_leds,$ H1 k7 h4 I h
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 C( \' ?" c: d9 i& i0 o1 ?! H
};7 p! P7 B9 X2 K* y: h$ S/ A
/ p0 G1 G8 J& p( v* S4 M/ @7 p0 X
static void led_dev_release(struct device *dev)* D m4 b4 k: F; Z* l4 g' j+ V
{9 }% I" T6 O8 j& S# }, Q: V
};
2 `- ] a7 Y3 }3 I
* G& b6 q9 L' F9 R1 M$ \+ ^3 D4 |* Cstatic struct platform_device da850_evm_tl_leds_device = {
* A" Y7 l' p: u! x .name = "leds-gpio",* o5 |& g; _ ~! h
.id = 1,
' `0 h4 d- J* a, N: N- ] .dev = {4 a. m6 [6 I. I2 Y: R+ [6 ^
.platform_data = &da850_evm_tl_leds_pdata,
! ]0 W5 C( K% g/ u1 O .release = led_dev_release,
3 P1 v! Y# t8 f4 [4 x; k4 g }
& _0 b, V# C# }7 R) F& y$ }};$ }0 N) u+ C, p1 o* @1 ^
: `1 B+ `. L1 O. F" }5 H! Q
static int __init led_platform_init(void)5 a5 u4 s& ~5 n+ Y: h0 @8 ^% ?
{1 M3 b$ n" ?: X# K
int ret;
2 N$ S' Y, _1 b6 P; w6 `$ _#if 09 h0 v, C& {8 S! L1 A9 a% W
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 b( p' O* C/ T6 u/ ~, c7 {$ y
if (ret)
, |+ y8 x$ z; P pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( l* F$ \# t9 C0 ?% Z1 r* p% I) I
"%d\n", ret);
2 t; d/ I3 O: L#endif
2 d) K6 ^$ t4 H4 v7 C7 d/ T# W ret = platform_device_register(&da850_evm_tl_leds_device);1 a {# W# u" B7 d: c/ q2 x1 W
if (ret)
4 Z, m# t8 J, c pr_warning("Could not register som GPIO expander LEDS");
: X$ ^% f! t+ }' r" J! }- Q else
" `$ ?, ]/ n% |) |9 N, [ printk(KERN_INFO "LED register sucessful!\n");% i7 }$ y( w$ l) g
D' K; d6 s' o0 ] return ret;
- l: T; X2 i" P7 ~2 \}# E1 ?* \& C- j! D/ b3 j& c6 [
1 f" a- P. Q5 b$ D) ~) G* Ystatic void __exit led_platform_exit(void)
V2 u8 w8 A! I. ^' E& I: {{8 Z0 I$ d+ U5 F3 b9 K" A
platform_device_unregister(&da850_evm_tl_leds_device);
: L7 N" O, ~' s. `8 [2 R( ~
" ]: ^5 S w% L, r& z2 i( V printk(KERN_INFO "LED unregister!\n");, @# M# \2 z& R- G' T# g
}6 s1 D/ x( F: {! Y* J
$ ^: d/ G" {* y; _' e. |) Qmodule_init(led_platform_init);
2 j1 Q% ?* K) B2 t, u! ^% i. @* h+ pmodule_exit(led_platform_exit);* P7 U0 t# h5 t9 i; X0 O
, w1 G/ s( @" I$ J8 ?8 D3 DMODULE_DESCRIPTION("Led platform driver");; S6 [( O8 \- c3 g, v+ T
MODULE_AUTHOR("Tronlong");9 g3 |( j, i6 u4 [8 g
MODULE_LICENSE("GPL");
0 _" A2 }* i( {, @8 A
8 f8 z7 z9 W8 I$ ? |
|