|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 U& g7 N5 s! N/ h4 z* F/ S#include <linux/init.h> b# u- A" k- {, ~6 k
#include <linux/module.h>' \1 J. {3 N2 W. C2 P1 v
#include <linux/kernel.h>
9 N( U! t5 E5 Y$ A9 F8 E#include <linux/types.h>
& M5 E8 O# D& t4 f#include <linux/gpio.h>
' x6 @6 m `5 i. b6 K2 s: g#include <linux/leds.h>" h! A( k; `' s- F7 Q
#include <linux/platform_device.h>
3 {& x7 i3 I* e; e
4 W! k6 y7 x9 i# s8 L9 t#include <asm/mach-types.h>5 o& g# m4 D' ^) U4 q0 T
#include <asm/mach/arch.h>
9 s5 Y3 N: Z1 T& z. g- ^6 p8 Q4 b#include <mach/da8xx.h>
6 q& t7 Y7 K2 V) a f: J* U; }#include <mach/mux.h>
7 }3 o! I- P. o0 N/ t, H. \, U, u% P7 s
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)+ k0 I+ U" d5 m! A1 K
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( U! G& R- L4 u5 T5 W
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ ]9 S0 o; C# z5 a8 K7 n8 k9 a$ y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% l0 [" X0 W9 U# J9 S9 _7 a d2 [5 e, x3 k. ]2 `# Q
/* assign the tl som board LED-GPIOs*/ a& u. z$ j, l1 P( w- X
static const short da850_evm_tl_user_led_pins[] = {& h7 P+ q6 h1 ^0 Z
/* These pins are definition at <mach/mux.h> file */5 L3 C* r: m, w& O% q
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 l* ?& g7 Z8 g( c3 y -1( |3 Z: j F% x- k+ u! P& o
};
! [! j7 I' `! ?% ~7 H
& _! v) O9 c7 J4 Z% P- D- Z& ]8 S" Q. gstatic struct gpio_led da850_evm_tl_leds[] = {
4 r2 I ^& q+ I- F$ D {
% |0 ?- \; |: d5 M/ h f P .active_low = 0,
2 W3 t1 Y2 ~4 @, z* ?6 v .gpio = DA850_USER_LED0,, Y& A8 L$ Z( L7 H4 Y* R( m8 g' ~, i
.name = "user_led0",1 A+ G% w7 j; s- [4 } L9 |
.default_trigger = "default-on",
* ^, B- C- [! S },: l. h" v6 {! a" @! n
{
/ U7 Z" P' M' S" f) s- a3 v .active_low = 0,
+ R; ?& K3 a8 k .gpio = DA850_USER_LED1,
1 l* \, _# t' W. ~ .name = "user_led1",
% G6 D+ |1 w2 q, ?$ v .default_trigger = "default-on",
9 Y+ l% u4 ?' j4 \% x+ T },
" R/ W% {3 D5 t- J: }, t. W( h1 H {! I: L( S. N" X9 E( d) i
.active_low = 0,
6 d: G) Z& W4 q& H .gpio = DA850_USER_LED2,
) N9 I. l$ O. T) o6 F5 Y .name = "user_led2",
" M' a- @2 I0 Z1 l- E1 s .default_trigger = "default-on",
* O' M% o4 u- |( [* p },
- n: G4 O; v* q0 C8 a! o4 E: O {
' u' f: G: K3 g, O .active_low = 0,, \1 X: r3 b; C& R( ]6 I
.gpio = DA850_USER_LED3,
2 A0 }1 I! \% j0 W .name = "user_led3"," B2 h3 h! M+ B- K6 o/ h( k
.default_trigger = "default-on",# y4 e4 F; |5 H, ^
},
) ~, c* [9 h% ]9 O: f1 {6 e};
9 \9 r: |& v* ]& c' E4 i' c
8 c! K0 K; b* p3 l' sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% \: E& v: e2 N
.leds = da850_evm_tl_leds,
" A. `) Y9 b3 _: ^4 d, j8 e .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% ?( J$ _, T4 T1 n};
7 j7 v1 `) b; L1 P; x7 {6 b% P8 }
3 u' w5 y( x& ^" f5 Cstatic void led_dev_release(struct device *dev)
% o& F5 N0 c$ n. E# p! a* t{
4 r+ Y+ S5 ]0 V6 {};
% G3 I4 T5 q: E* _/ {" H- T. S9 G9 W, k3 @
static struct platform_device da850_evm_tl_leds_device = {" H# o d% X. |) x7 k' v2 B) x. P8 D
.name = "leds-gpio",; l4 B. t) m& b% D
.id = 1,3 z3 d: z2 E8 C a% [( P) L
.dev = {9 x: \3 X. {# U9 @+ W# D
.platform_data = &da850_evm_tl_leds_pdata, r0 A* G) O$ b8 g: T# H0 _
.release = led_dev_release,( [3 w% M* P) w2 U) U
}6 e2 `3 x( x; g) l: ^1 f) b, C
};
8 I( a8 E% u4 \1 `2 T& p* X1 w/ D4 F' z
static int __init led_platform_init(void)
( b) s4 U8 T9 p; E' x! D& C2 o! p{1 V# c" w+ j% x7 z5 ^
int ret;' Z, _3 W( Z: E4 H6 |4 p
#if 0% s, t# W' }5 K0 H, e }
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# l5 k; `; B* T# u X5 N
if (ret)3 ?, U4 m% J: } b2 o
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 u; s( d1 K( ^% L9 v% x3 t/ D
"%d\n", ret);, u% p- L( I3 |5 ?9 _: V# P
#endif; q: P# J; H( S5 ~2 z/ C
ret = platform_device_register(&da850_evm_tl_leds_device);
2 A1 J* w, U+ G l) }) o% ~, m3 R if (ret)
1 Y2 i0 a$ U( c) a. A9 r' [ pr_warning("Could not register som GPIO expander LEDS");4 j9 ~2 i/ D, s! {) b+ x' u) ]
else
1 a% ~' ?: V6 ^# }4 U printk(KERN_INFO "LED register sucessful!\n");
. w& w, Z. m- X4 ^* j# n" N; l' M- d5 s. F2 o, T2 z8 I6 H$ V1 M5 f
return ret;
2 g. X. r2 d! j; X& g}2 f+ |6 b8 p# l, p" v7 B8 X0 Z
, Q) y5 Y6 m/ \- n
static void __exit led_platform_exit(void)2 I+ x' X( c* W$ a1 e1 |+ R
{! H' g. V2 z7 t# c. |! N# ~
platform_device_unregister(&da850_evm_tl_leds_device);0 H( x" |2 c7 }7 A# K! \
" _8 {- k u, v& K4 ~ printk(KERN_INFO "LED unregister!\n");
9 K$ k0 ~8 J6 F. C0 c m6 \}
5 y. S n$ V! M. y4 R6 z4 |1 H w V+ v+ L1 y! e
module_init(led_platform_init);" F( Z1 O8 t+ v
module_exit(led_platform_exit);) ]" D5 N2 d2 a* i+ G
( `3 z# g7 U5 a1 J/ u! Z1 o
MODULE_DESCRIPTION("Led platform driver");
- S& g a \8 G) n+ SMODULE_AUTHOR("Tronlong");+ m$ _# O' g" x# z3 O
MODULE_LICENSE("GPL");
& O: S4 L& T! [3 m* z, p1 D
* i3 w0 V8 K3 I: ` |
|