|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
% R# e7 D; F5 w0 K" x( z+ v#include <linux/init.h>$ b" @3 H& m+ x6 D4 V- ~9 o0 f0 x
#include <linux/module.h>! T2 r1 L0 z; u: |% g% B+ z
#include <linux/kernel.h>8 S/ Q; q1 [; F# c5 Y. T4 X F9 @5 F# Z" g% [
#include <linux/types.h>1 `8 Y+ \ H# {- X
#include <linux/gpio.h>
$ H, a% n% t5 D* W* B- |#include <linux/leds.h>. h+ u6 w0 X' W/ o" V% C
#include <linux/platform_device.h>
: D* ?8 X" G" _
3 K! i b8 L# ?8 M/ I2 o2 J0 z#include <asm/mach-types.h>" r9 r2 K4 \9 |, q) W K- U
#include <asm/mach/arch.h>% S& u$ p, b1 n# }% z
#include <mach/da8xx.h>
2 F3 u1 N4 M6 b. I9 K H2 D, `' |#include <mach/mux.h>
0 \! w3 C& h K0 R% f
# q4 B! p0 i: s$ [" g. d9 Q#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; u3 q P% L: {9 ` n$ Y. Q#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 N! l0 u9 p9 ^5 `' I& e
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
$ I& E2 d3 L2 H! ]#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! z/ {* w: @7 D; i, x
3 m2 T& j& i4 F3 s! L5 H$ X! _
/* assign the tl som board LED-GPIOs*/, |; ]# q* \* U: V) n
static const short da850_evm_tl_user_led_pins[] = {* `7 b* s) {9 p# {
/* These pins are definition at <mach/mux.h> file */
8 \; v2 u8 n7 z: S DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 a, n& `; T- { m' Z& W) W -1% j# ~. m! @) P; X
};) J8 } W5 D' }+ q3 H8 D7 q" B
2 W$ r/ p$ ]5 ~( p. H# e2 Astatic struct gpio_led da850_evm_tl_leds[] = {
! r% G. \3 S$ d' V7 V1 E# Y' x {) x$ p/ |6 }2 C1 {/ x
.active_low = 0,
" N' E9 o( G4 i) O5 C/ @ .gpio = DA850_USER_LED0,% s6 _& ~6 L, z
.name = "user_led0",
" o u; f+ J* T .default_trigger = "default-on",
3 [7 d& B0 M5 {; t* v# i },
l6 u" M4 U+ E" W4 o# P j {
7 K, ~: a( n. ]% h .active_low = 0,6 U0 f6 _' }3 E5 k
.gpio = DA850_USER_LED1,+ d4 a, F3 l* b; h
.name = "user_led1",
6 \' n0 k9 F7 ]1 P7 @ .default_trigger = "default-on",
! }8 b9 z r1 [% ]% W+ b },
% B) b9 y% |) _2 a% s: W9 ^! Y, I {2 @! J. |7 K4 ]
.active_low = 0,
% z& w9 L; y" g$ `# Z .gpio = DA850_USER_LED2,
- k2 M. q/ }, p' ^# J, s. j .name = "user_led2",3 t" A V3 R, D n
.default_trigger = "default-on",
3 g; v. E8 l+ n9 [6 } },+ F2 @' s! I4 s5 E% y& _- @' Z
{4 g( {( R+ q+ Q. {
.active_low = 0,
$ T! k0 \! y, K .gpio = DA850_USER_LED3," B2 S2 [; Q' E# W8 A% m$ e
.name = "user_led3",. r, X e1 [% c) @5 z
.default_trigger = "default-on",
@) p( ~# }- b$ O9 V/ z },- V, @& n H2 `& G
};- a( I. `4 x4 d7 q5 c4 u9 z
- O$ q4 |7 q2 P1 A+ T% z( {/ F# H: X
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 `+ ]/ q+ q+ ~6 I% [, |
.leds = da850_evm_tl_leds,
% S& R' h0 P) [" R4 g- W .num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 o4 x- W/ G: E. U( n- G
};
' ^. i9 o# P5 h* [ c8 N; H+ H
4 ?! f! s5 f7 M$ |3 ~/ h; @, j9 pstatic void led_dev_release(struct device *dev)
7 u& j9 c4 T" ~/ A. Z3 A{& ^ ~6 N5 N2 ?9 H7 F& e1 V
};
, @. F, V- m8 y3 V+ f$ b' D9 {) j( y0 X& M
static struct platform_device da850_evm_tl_leds_device = {
# E$ ?6 y3 c5 j! V2 G+ s6 U .name = "leds-gpio"," n, j# P; V `/ |# n0 x
.id = 1,
' u$ x2 k( K9 \+ O; c6 B .dev = {
$ i5 s; R; i1 \9 V% D$ G" N .platform_data = &da850_evm_tl_leds_pdata,
/ q1 h# p! Y# J& y2 v; F, N/ u( t .release = led_dev_release,6 {# g! d* ]# k
}
, A, R. ~( h: n3 E. x$ H2 j8 {5 D};
1 c. r I* c" z( F9 C6 |$ k4 U8 I0 ~- F' q0 G" W
static int __init led_platform_init(void)
/ @9 q: y6 O' h' n3 h5 H4 f8 V; O{' A) q4 l: W9 D2 ]
int ret;
, t0 `' _; P7 X; ^, p1 `& Q#if 0/ ^6 k6 b9 [% S8 t6 I: O
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
# k' l! Z: i& N% d% X! H if (ret)
% w4 a. u, W P pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
R+ T$ ^( v% \/ {% ^ "%d\n", ret);
2 m4 T* n, o0 j L! d1 X% k. Q! R#endif
! P9 j9 G$ x% T ret = platform_device_register(&da850_evm_tl_leds_device);8 b2 f7 ] u6 R' { g
if (ret)
1 t4 u' i" r/ l. }7 W pr_warning("Could not register som GPIO expander LEDS");5 _; l. r( N% y. c
else
0 o# q( Q6 ]4 u1 A# K( J printk(KERN_INFO "LED register sucessful!\n");/ ^0 H- q% S0 r5 C9 }2 `
J9 |; r, |9 v& V
return ret;
/ V. M) G- F0 D. [+ ], S, I}
) `9 I' Y6 ]4 I \% i O4 ^
3 p2 z' W' [/ B1 m/ X5 w4 Ostatic void __exit led_platform_exit(void)
6 N( m. C' v9 m9 o! f; q{! \ l' O2 G& k6 Y
platform_device_unregister(&da850_evm_tl_leds_device);. `. I+ L# k7 Z" Z5 l, l7 L
/ W2 f/ Y$ Y, H& e printk(KERN_INFO "LED unregister!\n");* M: J& c. r1 q3 X% c
}
9 ]2 v: k( W1 y; }
$ }5 d/ c3 F# |* f5 ^* [module_init(led_platform_init);
2 Q7 L4 Z) K$ V# Z" l% i& k3 Vmodule_exit(led_platform_exit);8 O4 s0 V1 \7 P' `- ~
- y/ I- r. f4 p8 m$ m
MODULE_DESCRIPTION("Led platform driver");
3 @! f! |2 |% ]$ eMODULE_AUTHOR("Tronlong");
4 d; n9 K2 b1 p0 q1 CMODULE_LICENSE("GPL");" @4 n/ M/ q/ |& L8 V' J* A- N& S7 q
8 d. ] q/ `- b7 } |
|