|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 w- c6 Z/ w0 I- N6 ?$ }#include <linux/init.h>
^* ?+ w1 c1 T#include <linux/module.h>% o1 e; Z# H$ |- u d, c
#include <linux/kernel.h>
L* ~8 J$ r$ _1 c8 h/ T#include <linux/types.h># W0 @/ Y7 ^( @' i {: R
#include <linux/gpio.h>5 X$ k- I3 @/ a. x2 y
#include <linux/leds.h>
: k _5 J/ x( _9 p#include <linux/platform_device.h>6 M* G# X+ l: m3 T8 Q
" P2 B. L6 E% A#include <asm/mach-types.h>
7 s) g9 v& n; b$ \- Q( a! c#include <asm/mach/arch.h>
% I- E0 a L+ N$ l8 ~' u, y3 Q#include <mach/da8xx.h>2 ]. @9 P& o5 A3 }( \$ i
#include <mach/mux.h>3 B5 u& f) ]0 ]# a1 r) M
8 n' J* I$ Q h9 @; M#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 L3 ] S& t: X5 W
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)/ s0 n' D) L" h4 J
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 F7 N( h! k+ F! j" @* u& U
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 r, y W: j# }4 F
6 S0 X4 f0 }# A/* assign the tl som board LED-GPIOs*/5 l* P ^+ c3 K/ B4 U* T1 T
static const short da850_evm_tl_user_led_pins[] = {7 |3 `, \: B \
/* These pins are definition at <mach/mux.h> file *// q3 a) B3 H2 }5 |$ M8 m9 X% H: ?
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," Q3 y2 ~! W' R- D
-1
: v' f4 r; n2 C2 W0 T};# ~ m, D" O; y9 y
+ C8 s: Y8 H% `0 p& k$ T, ^static struct gpio_led da850_evm_tl_leds[] = {
: q1 T7 U) m N3 F. v7 G {
$ U6 L$ R2 b, h+ k) y) h: e) W .active_low = 0,
; U9 V2 _8 Z2 g4 X( U a0 [9 j .gpio = DA850_USER_LED0,, R. G( u- F! ]4 R, c1 Q
.name = "user_led0",
- L9 o6 j5 K) v .default_trigger = "default-on",6 [1 j ?! W% z/ u
}," t1 C9 n* m9 J9 [1 |
{
, X* Y6 f* t, ?7 l& t .active_low = 0,
1 g: Y+ E% f: H) ^6 \, m .gpio = DA850_USER_LED1,
5 [' R! M2 k0 _6 f1 ~1 _% S .name = "user_led1",
k6 t1 C, p' T8 Y .default_trigger = "default-on",6 L. J$ x; d$ `% L- x. o9 U+ S
},
7 e" h7 V) g }0 r) g {
& y* z0 c* @5 ?6 Q1 z .active_low = 0,
9 ?0 o( P. c$ w W .gpio = DA850_USER_LED2,
5 `% l' `/ T5 R8 p .name = "user_led2",
. a! B+ Y8 ]4 r4 l* v- u$ C+ @4 f5 z .default_trigger = "default-on",
3 Z/ N B1 L& A+ _8 l/ { },) n9 K9 y3 J/ Z: C- J3 J% Z8 ^
{, R8 W: k) `" j/ {. d
.active_low = 0,$ T* Z7 B% ^7 w6 r: l
.gpio = DA850_USER_LED3,
% ]2 j% `, Z) ~8 p+ E; m$ w .name = "user_led3",: |0 u( n( w' R9 N" r
.default_trigger = "default-on",: o/ f9 F0 T& x; N
},
$ I. F3 L$ l2 G& ] |};8 _' v/ H. j2 u& ]' Y. Y
% n: d" d' C$ |. z' |' I
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
) _1 W* }1 I9 a .leds = da850_evm_tl_leds,( x4 x2 d; H' O7 F2 ?" s4 B- V/ L
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 ]- c% ^' J! T};
! d/ H: j1 z1 y( M
4 h! ^# L6 K$ sstatic void led_dev_release(struct device *dev)
* ?; [2 q$ ~4 U4 b1 A q{1 _5 X* f" a2 n! ^! r1 }
};, D3 T9 Z U7 w9 P0 F0 c
$ p9 B, q6 D6 t, X; x5 [
static struct platform_device da850_evm_tl_leds_device = {
7 {5 Z; Q; b+ W6 P |* | .name = "leds-gpio",: q$ X! }! n* Z3 ^3 j: A
.id = 1,
! M$ p: j' P) Q3 X3 v9 O .dev = {
- K4 [; n2 y! p3 O .platform_data = &da850_evm_tl_leds_pdata,& M5 P. F* Y. x/ v$ S4 ?
.release = led_dev_release,
7 _* A& z" U6 c' C+ }$ E( r }" B; K9 `7 N7 e0 y3 b; l' v
}; w. Y. C* y7 J) V
; j; u$ ?) P1 }7 ^! o* Y2 dstatic int __init led_platform_init(void). g4 r* c8 K) Y3 U$ `
{* n, \+ O' v6 Z
int ret;
$ O% @2 N: @* o- W#if 0
$ U& H% I- l3 K5 D ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* P1 A( I ?* z
if (ret)" n9 |. ]6 V: ~1 X. g% m; E ^9 k
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: J7 F9 ]" z& M) f7 Y7 h "%d\n", ret); a0 X m( p2 ]. v1 |, t
#endif
0 t: [/ M5 d2 N w1 s, A3 c6 i ret = platform_device_register(&da850_evm_tl_leds_device);
( J5 ?* L" b% P# n% J if (ret)
8 ?* O1 X& S& Q6 L. ]) c pr_warning("Could not register som GPIO expander LEDS");
$ u9 a9 V. `% l' G else
; N# v- I% G4 |9 B; u printk(KERN_INFO "LED register sucessful!\n");
) G" r1 q, C, N/ k/ r* U, D+ e! t% t# M! j
return ret;
@8 P6 e1 C& h; R}3 q+ Z4 |: ], n, u, E6 x
: ^) X+ s7 o* K& I, I
static void __exit led_platform_exit(void)7 d1 Y' `9 O8 d+ Q" |# n9 ^
{& k6 n0 x8 L9 ~' @ @/ E) u
platform_device_unregister(&da850_evm_tl_leds_device);
- z0 {5 A' d# G6 s
- S5 Z, B# r9 B% V printk(KERN_INFO "LED unregister!\n");
) J/ j S& R. L. p}
6 Y( x" V( M- S) c/ E0 k- `. {3 ^6 O+ b f
$ l7 N6 ?0 ^. y; B' l9 i4 Amodule_init(led_platform_init);
6 P* O, _. h; C# [module_exit(led_platform_exit);$ J+ ?6 J- i7 @
8 J9 U" m6 \3 b- UMODULE_DESCRIPTION("Led platform driver");1 R5 [) F I" j* D/ ^/ ?+ d( t V
MODULE_AUTHOR("Tronlong");1 b7 N) R [7 V, \7 s
MODULE_LICENSE("GPL");
5 R5 B: G f+ ]3 d* a% B
8 F* R$ `: o2 p2 f |
|