|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" S/ E0 j+ ?+ m2 m5 _' ]0 v
#include <linux/init.h>( I: t* B- q; J8 u
#include <linux/module.h>' w: E0 w- D5 A8 F( n5 |
#include <linux/kernel.h>1 m$ b) k% r/ v( d$ A
#include <linux/types.h>; }( D& c- k- E
#include <linux/gpio.h>
# o: N: \2 V) @% {& R/ @3 ^6 @#include <linux/leds.h>
* z/ ?% L' Q( q" B% k% d4 p3 c6 Z#include <linux/platform_device.h>" M' `! b1 K8 u6 ~# k4 \# V
, V/ C3 G. ^( Y% q
#include <asm/mach-types.h>
, K0 W& C: H/ Y% i#include <asm/mach/arch.h>9 J w; E: M" o7 B0 Q+ U6 N$ a
#include <mach/da8xx.h>
: W; g2 }7 e( L& ^; G#include <mach/mux.h>
# c; a7 y5 ^/ W% M9 m- j3 c9 N* K* c" ~7 E5 K& n* h @: g
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& q; s. B1 R% j8 k+ G+ I8 l#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 y+ \ e. _3 l& v$ o1 b$ h1 T" r! w#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
1 y- W2 @) j) o: q2 A5 w! |#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% F0 p! c3 R6 \2 z+ x
" i: u) ?& `8 N% ~8 q/* assign the tl som board LED-GPIOs*/" {" l1 j/ P3 h( f, v0 D
static const short da850_evm_tl_user_led_pins[] = {
1 m6 \9 }% J, A6 N /* These pins are definition at <mach/mux.h> file */1 G9 q8 S0 \1 H
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( R. C ]( B6 S -1
! n* t, T5 V: R) _% h};
! q0 O- k* \: `% C. R! W. l5 t: j y" p. a& v4 v4 }1 d5 I
static struct gpio_led da850_evm_tl_leds[] = {$ M1 R3 W% d: L! z, v
{
|" H- A8 T. N1 ]' L .active_low = 0,. a% ], [0 \7 \% u
.gpio = DA850_USER_LED0,
# R+ {# w7 u5 i3 b# N/ i" k .name = "user_led0",7 f6 o3 {% G0 f6 `0 T3 o5 C) R' R
.default_trigger = "default-on",
9 d+ X: o2 W+ e) K5 q( V6 Y },2 S. x5 v/ b( q2 ^& H$ m% R& @8 W
{# E6 i$ Q; J# f& {2 }) d
.active_low = 0,' B! W( W! p; P, B {1 E
.gpio = DA850_USER_LED1,5 F' Q- M2 P2 v; S1 O) D
.name = "user_led1",
" s2 n5 k, z& }8 G C, f4 p .default_trigger = "default-on",2 X. N! L1 M" J9 \" o6 E
},
/ E1 |/ m4 _0 [( ^6 | {
2 A; }$ @9 C X6 l! s3 ~/ N .active_low = 0,: n4 W- Y8 ~: B9 e
.gpio = DA850_USER_LED2,, n# ?$ X' D/ j6 F
.name = "user_led2",+ j4 o" }# }* t5 z, b$ t. n( c
.default_trigger = "default-on",0 q# C. b5 b7 b) b2 G* x, j
},
3 D8 L# N3 `& {6 w# D5 l {
1 D, H% t; A+ y .active_low = 0,2 D% c! L( S8 ~% N+ a, K6 v! n
.gpio = DA850_USER_LED3,
4 j% e' R1 O9 N* X' z .name = "user_led3",1 I9 L: _5 Y: f8 m6 b! @) L y# V
.default_trigger = "default-on",* f) [! i6 v4 P9 s9 n0 _/ N7 m
},
3 r( M; t6 v9 ~, h- u. Z};
" u+ I, y8 `/ \" ~+ F7 L, w3 H4 a1 B5 x* E1 F/ C' K
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 R; D1 q; D! k' u( @
.leds = da850_evm_tl_leds,. N) T# R( U: ~* y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" x$ ]0 ~; |- p, E7 M0 z};" U& P5 _5 @% A' F( _) T0 V$ z
* D1 b) M0 l& j* R7 t m, c. t0 H9 @
static void led_dev_release(struct device *dev)
, ]$ K- d9 F- k{
5 Y4 W; a0 S( Y7 \};
7 w6 ~2 x+ H4 o) ]0 _5 B! Q. K" W4 a1 i3 H
static struct platform_device da850_evm_tl_leds_device = {( v5 t$ ]; }. R; k
.name = "leds-gpio",
% B/ q! v" X7 _" e V0 Y .id = 1, J- ^4 R6 M9 v8 Q; l9 M
.dev = {
1 j$ z# p) j/ @3 C, R .platform_data = &da850_evm_tl_leds_pdata,
# `5 n* R/ }. l. J .release = led_dev_release,# E Y) Z! {7 c0 U Z; N! q1 o
}
0 Q) T! W) `, I: ?};6 @; s/ I. C9 _ z3 E: W& g% z$ E
8 E, W. Y+ P# a* n+ Y Ostatic int __init led_platform_init(void)
4 v7 P; u. h7 S{
5 e* Y; O2 R, O ~' ?+ U' d int ret;6 E3 P- V# h$ f
#if 0
+ c* J5 ^& X T+ W5 N# o; N' \ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);, h1 L& H# C: Y
if (ret)
1 Y# m L2 r9 S' X: z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( @7 p& B7 N! g
"%d\n", ret);
5 [/ q% O4 a- B" H0 ]8 p#endif
& z' x7 ]8 _$ b l ret = platform_device_register(&da850_evm_tl_leds_device);
4 G/ {' o) y q! o5 w# j if (ret)
5 M5 f$ J$ K0 k2 Y1 D/ [. I pr_warning("Could not register som GPIO expander LEDS");
. m0 S8 @) U" f' O else
" f) q8 N" w0 x @+ L/ T3 I printk(KERN_INFO "LED register sucessful!\n");
. d# W, ~( z/ U! k3 x
0 F' x9 D" q6 a/ s Y return ret;) r- f. q) n7 U5 l O6 F/ m
}5 I0 C+ B# f, J6 q& W
+ m' D% i( Q4 h% Wstatic void __exit led_platform_exit(void)) G# B* c% {8 ^( n6 Y4 _, y. `5 j
{7 _1 ?6 q1 q. d. H4 d
platform_device_unregister(&da850_evm_tl_leds_device);
) X, m8 O) P4 b1 f2 M& H7 I& ?8 @/ }2 T! L, Y. C1 D
printk(KERN_INFO "LED unregister!\n");. e8 P4 P. ~; b" p: X, o
}
% J, f& w$ W$ z5 \0 r5 O) D$ O
* Q- h! A5 b1 l3 T' Umodule_init(led_platform_init);. N" I5 |6 \' G( e( \0 Q
module_exit(led_platform_exit);
6 z5 C9 r1 G3 O0 z& ?
& d0 b- c3 k* K7 j9 F. gMODULE_DESCRIPTION("Led platform driver");" y; x: s: l; |* l
MODULE_AUTHOR("Tronlong");' P* P% p1 g) W" P" L8 U0 a) u
MODULE_LICENSE("GPL");
! K: u1 Y: g1 i1 L
1 g9 m+ S. W" U' m5 S) z2 X+ L) m; u |
|