|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# a+ v8 q) ?6 o, \
#include <linux/init.h>
2 s5 ?0 _- q x4 `" `1 y K: s#include <linux/module.h>" g* D4 u% @6 ]+ e3 }# k. E' U
#include <linux/kernel.h>
0 h( ^" ^" m# y8 b d#include <linux/types.h>
$ y Y8 D/ C! X) \ W: u7 p- m7 Q#include <linux/gpio.h>+ U1 h, p" G+ y [4 \% D& ^
#include <linux/leds.h>1 V- s2 A, ^: u2 M O! @9 O
#include <linux/platform_device.h>
) n3 \4 l# S8 f$ ]* v6 o) [' p
' Q$ b% T( T/ j#include <asm/mach-types.h>
) R4 E3 Z( @0 c; n, U P1 T#include <asm/mach/arch.h>+ |1 I* @7 W& l2 \8 k
#include <mach/da8xx.h>
( O8 j+ F/ @. j) W" R#include <mach/mux.h>5 F. ]5 F V7 T
( R' }& B& w5 k#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& a+ ^0 S2 c4 I" z: I
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5): H. p& s2 T" m, h a2 @
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 O0 {3 I/ Y F- x, u( w4 d( u#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, R5 ?* |3 F$ B p7 B( \7 u; a- ~2 Z6 Y0 H$ E
/* assign the tl som board LED-GPIOs*/" ?4 Y2 x x, J+ g2 `" g' q
static const short da850_evm_tl_user_led_pins[] = {' T0 Y6 r+ P, H/ j7 l& O1 V+ }
/* These pins are definition at <mach/mux.h> file */6 V7 _: W$ c A% k8 G
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," \$ ~0 \! j/ J4 a& b# [3 W2 K4 [
-1; Y) C3 L6 I4 X' f6 L& s' m
};0 w" B( [8 W9 j8 p
! G& a5 A* j: r" F
static struct gpio_led da850_evm_tl_leds[] = {! g+ d, s: d( n
{
# Y/ p; ?6 d/ H9 x/ ?4 ] .active_low = 0,
5 r x s7 G6 k6 @4 z1 y$ ? .gpio = DA850_USER_LED0,7 W4 v4 |) P; }2 z
.name = "user_led0",) [6 I0 V0 ^5 B8 I" F, f& J
.default_trigger = "default-on",
: P& T# H3 ^$ B E+ X- B& F },1 [' Q& z' E3 V! j* ~
{( r9 |3 }) k" n: X) n+ a. O
.active_low = 0,: c3 R* W W& s2 B2 A) n2 S- b
.gpio = DA850_USER_LED1,5 @! j6 i- b, H
.name = "user_led1",' Y2 o0 g! P' O1 G; L
.default_trigger = "default-on",
5 J. {9 f; ~, Z* `, A },
9 R0 X2 u7 T& t; g1 U) P$ r7 X {/ A* V7 y! G& `! y4 Y8 ?2 j
.active_low = 0,
- U6 S" ?& j$ u c .gpio = DA850_USER_LED2,* K* z5 k* K2 ]8 [: Y+ j: v* B
.name = "user_led2",3 f) J4 K( z# N! q. @
.default_trigger = "default-on",7 d7 j2 r, m, r9 x6 Z* a! A
},( ~* S8 |! C: W/ i9 I
{
% M5 |/ D1 W; ^. f" t/ z2 A; H .active_low = 0,- o4 c! k! W4 q L# Z# ?# r
.gpio = DA850_USER_LED3,, l$ ?& Q; \& q4 }5 d' K9 a
.name = "user_led3",4 y7 O0 a3 K3 W( p" [
.default_trigger = "default-on",
* `* N1 @0 x% D! M- `) V# B) A },
( @' y. W! d$ R};8 e8 b2 Z, M, V8 l
8 |" _1 J7 X6 t8 U3 S; j: h
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; W# g" U# i9 \: e0 P% r8 S .leds = da850_evm_tl_leds,
5 k! o O& f! w, T .num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 ^4 K' |! G; y# X
};
( g4 e. m9 p9 E( J3 l3 S& k1 q
+ U# |$ h, e; dstatic void led_dev_release(struct device *dev)
) o E. F8 B1 u; m8 \( A: ~{" x/ i8 \) ]- I
};
! l* m' i1 Q* Y% j+ \
( A( F+ K- }5 ^' h1 V" Q) Dstatic struct platform_device da850_evm_tl_leds_device = {
+ V& h- y; Z% H7 Q- G; b1 k .name = "leds-gpio",
# C+ A; m( ]' A+ m$ ]- U .id = 1,
* b% P8 E5 H* h# r- [# n) Z .dev = {1 I7 x% W( @/ }1 w1 L
.platform_data = &da850_evm_tl_leds_pdata,. e) S8 F2 j( R. ?
.release = led_dev_release,6 z- Z L7 W# I$ j! H# C
}$ n- j) i( O# {% H0 d, l
};, A, n( x( _: W1 r" H5 v
5 f! u: t4 A2 R8 t/ M0 h) {static int __init led_platform_init(void)/ G$ U4 H6 }$ C- g* N6 y5 r
{
4 \- o o! v$ M- H+ \! Q int ret;
4 ]/ T6 Y4 a) n! a. L( b/ I( Z#if 06 k' c l8 S$ Y: q* e* Y
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); T9 f; H% L9 H$ Y% x1 B, t
if (ret)
/ N, t: V1 M: n! B, K) B0 F pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
' r; `* @! \) M1 R6 ^ "%d\n", ret);
: N8 b' J+ Q' U c$ m8 [2 m#endif
! o; o# h- @! l6 ]+ l, N3 W ret = platform_device_register(&da850_evm_tl_leds_device);
" @/ s/ o4 x6 H- ~( m if (ret)6 ^8 F4 c, d+ T: n2 e' A9 h% ]3 v
pr_warning("Could not register som GPIO expander LEDS");( \' D$ F# F, |4 F6 r1 M
else/ I5 x7 r3 z3 _1 o7 |3 s
printk(KERN_INFO "LED register sucessful!\n");4 o/ v; e4 D% n- |
6 A2 n0 m0 d+ k return ret;6 ~$ b6 r9 A" C7 I( E6 O
}$ ~ r$ R& N. p$ [# y! {
& c: d( p7 g) y) wstatic void __exit led_platform_exit(void)
0 e2 y5 A5 O& v6 O8 p{
" `- U5 W; f' T. _ platform_device_unregister(&da850_evm_tl_leds_device);
, v% a) e2 q. J, h+ `6 n0 ]5 X1 s1 T- [3 l
printk(KERN_INFO "LED unregister!\n");4 F! d' s. u$ v2 O# V; H9 Z3 ~
}
; a' \7 ]1 p' n N3 n
. n# A8 V: M* \module_init(led_platform_init);: ^* \# _2 a! G
module_exit(led_platform_exit);' i* D' f* t$ @ ~
+ l. G' R9 p, g* C& X. G# A& m
MODULE_DESCRIPTION("Led platform driver");
' M4 o/ `) ?" L: NMODULE_AUTHOR("Tronlong");( z9 r/ p) i6 j0 R1 Z
MODULE_LICENSE("GPL");
( W2 ^1 Q. T2 K5 L" f: N- H% {6 q9 G5 f# g7 z4 p6 ^1 g
|
|