|
|
求大神给下面的程序做注解,请稍详细些,谢谢。: F. l4 i0 U" v( }
#include <linux/init.h> A5 K; H7 h/ \8 M/ U! F
#include <linux/module.h>5 W g# I. G! s. S6 d
#include <linux/kernel.h>
' v3 q9 W* S- c- U#include <linux/types.h>
# y0 C- q) N1 d#include <linux/gpio.h>
/ W& y' f/ n/ k- o" c1 z#include <linux/leds.h>
) c: S+ j4 B% i9 H5 a#include <linux/platform_device.h>8 i2 j* z5 P7 Z
7 W! p, X7 h. Z3 V; t; d#include <asm/mach-types.h>
4 b: d" {- r0 r; Y0 `#include <asm/mach/arch.h>
1 m; w6 k* W4 U3 ]* J/ i#include <mach/da8xx.h>) R- n% q" Z# o, D/ |
#include <mach/mux.h>$ R5 ]8 W( Q/ y, f% [ d$ e
$ N' ` \) ~, h0 O% M#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 ^; x9 U3 s4 ]; j9 h: u#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)% K8 [% s& A" c& K8 T
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 H) ^* X- e0 b4 N#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
7 N/ x/ c8 P4 ?, \& O- ?; H9 g- N D/ N: r
/* assign the tl som board LED-GPIOs*/4 E! h: _1 Q) Z: \
static const short da850_evm_tl_user_led_pins[] = {+ w4 R% L* O* Q6 Y8 ?6 Q& k
/* These pins are definition at <mach/mux.h> file */7 l. \; ` O5 v$ m7 ^7 _
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,; E ?) ~ s+ Y2 t9 Q4 V
-1
9 Z1 d) X- O- A8 G B: Y3 `& v) @};- Z2 n9 ?2 u7 u1 z
2 h9 }7 n$ p) }2 E$ b% V+ q& lstatic struct gpio_led da850_evm_tl_leds[] = {
( G& N4 |3 I3 g- V {6 e8 {. x3 \) S3 ?5 E
.active_low = 0,
& d+ a* ]3 }+ ^' ]3 c$ d .gpio = DA850_USER_LED0,
0 `; N. f# i" A/ t& o .name = "user_led0",
: f; l% N! i) P+ h .default_trigger = "default-on",
# P) y* g! Y1 I& F' I3 X1 R' M l },/ X& j w% k4 V7 B% y: T) D; _
{3 D9 A/ e+ u: ^4 o
.active_low = 0,
1 c( K3 W5 ~, A2 R7 r4 Y .gpio = DA850_USER_LED1,
2 n0 {$ [0 a! K v9 ] .name = "user_led1",, x% _3 C. W- T
.default_trigger = "default-on",- J+ ~! ^ D: [7 k7 \& t
},
* O1 l/ v4 @6 D( P& j {
, [3 N. `; m6 h9 u" `6 b .active_low = 0,
$ m9 b) ^1 \( H2 t' g6 } .gpio = DA850_USER_LED2,
: W8 s% A B) e! U .name = "user_led2",2 h# J5 y! i2 X# ]3 L4 X/ L
.default_trigger = "default-on",* a1 f1 k1 ?5 a, t6 t3 B. U* Q
},
& w& {7 F# {; o# o {" C. p2 l/ ^0 Q5 J/ o8 ~. i
.active_low = 0,
: a+ H4 `8 ~/ l. f" J .gpio = DA850_USER_LED3,# i/ d6 U" J- u) Z, [# w
.name = "user_led3",
: X5 ]: O+ \9 ?# z' k5 ~) ? .default_trigger = "default-on",
$ F7 V8 U0 G1 U, S0 @% U, z+ ^ }," n6 |# o, c, W, b0 x) c
};
- o& U8 G4 |) x! B' A7 T% @0 o9 r, s" l3 k7 R2 m# ]$ t
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {" s& z2 q( M( z. u9 ^) ?% |+ |
.leds = da850_evm_tl_leds,
; T: |5 L' t/ C. | .num_leds = ARRAY_SIZE(da850_evm_tl_leds)," }3 W9 |% {# [2 L/ t, j' y- P" K
};
+ o, L: S5 X7 K/ B- M5 \( R3 P3 h' Y7 v" m
static void led_dev_release(struct device *dev)
$ ?& ^0 p/ z, S$ u/ p! c3 n{
3 X) e3 \8 q8 m};* j$ E+ }- D3 p8 b" {% S2 C
* k* R8 I/ y3 J7 h/ z7 V
static struct platform_device da850_evm_tl_leds_device = {' S1 ~* I, }! h |# T4 ^& H
.name = "leds-gpio",
' \- W+ s& k9 Z# ^) p0 D .id = 1,
9 j: w! K+ ~1 t( O& g .dev = {
b: l4 q0 ]& b$ y% m: K( z! p .platform_data = &da850_evm_tl_leds_pdata,
; D4 {" E; r* g0 G+ f! ]7 b, J .release = led_dev_release,$ U3 y6 u: |, H
}1 Z1 a* y0 _5 |3 S( r
};( t- M4 B" J4 y$ D& p; W; T) {
! Y1 Q" r, }9 ^/ z5 y
static int __init led_platform_init(void)8 ]/ [" i, ?, F2 X/ l
{
* D& C ]) R. k: s' @5 B0 n: M int ret;& m7 v; N: [: _2 p( v* Z z
#if 04 ?* Q4 j- G+ T6 C4 ^
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% ~$ `. y+ Q8 [1 a$ u if (ret)! w' t7 K0 s+ Y9 ~* L' ~
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- g/ b; d2 p% U' f5 p1 \2 @
"%d\n", ret); x' \" O* R3 @: E" n# J) n9 P
#endif2 Z/ X+ }2 k# S9 T( k" l6 D+ y
ret = platform_device_register(&da850_evm_tl_leds_device);3 h o% D4 |& Q8 w7 U1 [ q
if (ret)
: ^$ Z$ p9 t+ v pr_warning("Could not register som GPIO expander LEDS");
3 @2 s: h4 M1 c& C' S5 k3 O' u$ R$ G else ?2 m' s! n1 k- W" A" p5 Q
printk(KERN_INFO "LED register sucessful!\n");
" e2 I |8 k; E- ~, e+ y5 m9 v$ |0 J# l: s ]5 i% E" M& c
return ret;9 z1 g3 V$ y h, s) T& }7 o
}6 @7 W$ W" e" N S& o: L9 N, S
, i. {; D0 D$ P# Z
static void __exit led_platform_exit(void)
/ x3 z1 ~8 a' m7 r- `0 L, N o K{' Y: X4 [7 K. T/ `& r( j7 [3 X _
platform_device_unregister(&da850_evm_tl_leds_device);* L5 B' L* n7 O, _& b
6 Y% O1 E2 ~6 F M# e printk(KERN_INFO "LED unregister!\n");# O& [' b$ X. \8 m: ]2 m) v
}! N) j+ e/ B1 k+ T+ I
* Y3 b4 w# K n, q. N+ D
module_init(led_platform_init);" y4 |, K6 @" o6 ]$ J7 I" K V- p5 r
module_exit(led_platform_exit);! g5 a( {% [4 \2 R
5 R2 v% o5 L7 m( e
MODULE_DESCRIPTION("Led platform driver");
% W" T9 Q- C y0 _MODULE_AUTHOR("Tronlong");
; a& ^* ]/ C y e# }MODULE_LICENSE("GPL");
- B- u! W% x8 n
2 ?4 X/ ~3 ]) w* k" N$ A: M; b |
|