|
|
求大神给下面的程序做注解,请稍详细些,谢谢。; e, f' D& z! i: {. K% Z1 l3 t2 @
#include <linux/init.h>
, b1 n9 t# j/ }$ ^& j#include <linux/module.h>( C2 ~, A( A8 G/ a
#include <linux/kernel.h>
0 v2 F' L: e8 i% Q7 k" z% h, D0 Z#include <linux/types.h>
5 }; p! a1 Q9 B5 @! G4 Y#include <linux/gpio.h>5 E# f7 y5 S; ^
#include <linux/leds.h>
$ J6 z% ]) y# E' L7 \#include <linux/platform_device.h>2 l$ s5 ]% x2 n4 K9 U8 F# j8 a
3 n! l* f9 w2 B/ v; y#include <asm/mach-types.h>' S0 Z5 [3 S1 {" h
#include <asm/mach/arch.h>( ^/ \7 P3 R% E, h7 O* y
#include <mach/da8xx.h>
- _) r7 O8 p; K. H5 d* G" I* y#include <mach/mux.h> I# d; Q2 B: @- V( Y$ W
c) t e; i; g1 m8 B4 @) b. f
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)4 b7 k6 O! |$ n
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 a6 w+ l: z: s# s5 e( z) ]$ V% B) Q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- m2 Y- y3 u6 V& _( p
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 ]4 v* X! W2 T: ?6 d8 K# N+ v& S5 w: I$ P: @: }3 F
/* assign the tl som board LED-GPIOs*/
: U) Y% O4 O; ]3 S5 y2 H1 ]7 l/ Q% Fstatic const short da850_evm_tl_user_led_pins[] = {
& f6 H1 _, f! T9 e /* These pins are definition at <mach/mux.h> file */; j# j" b5 V0 A, t3 ]0 y
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
! I3 c1 G7 c- d# b -1
4 D* [) p2 _4 [4 i' l5 f5 ^- X};
R+ F* T) U4 g+ ~. X. q2 \& n% V; W+ R6 Q& z+ ^
static struct gpio_led da850_evm_tl_leds[] = {
+ c3 }: _% c4 Y {
: X9 U! l' U. l .active_low = 0,; ]' P% d2 d1 z( ^# j: j4 i& z
.gpio = DA850_USER_LED0,
& v- x. K7 T, C6 A8 ?1 ~ .name = "user_led0",
) V5 n9 B" p! u .default_trigger = "default-on",7 ^/ ?5 {5 `/ c- d9 |* u. E
},$ d6 S: @2 a& B* G& {
{
$ y# m5 b) G6 w# [1 j) ~" T .active_low = 0,& f: S/ v, Z! w4 Y% T. J
.gpio = DA850_USER_LED1,
4 S) T& c! o5 G d& o1 n: Z .name = "user_led1",! q$ p5 O! [; g, Z3 H6 U2 P0 N
.default_trigger = "default-on",
$ x! y# y& l! a, w- O },
* ~8 }; y& X) _" U: c, S% k {# X' N8 i$ N, J8 W8 i
.active_low = 0,1 {$ y( [+ x7 r) ^4 v/ ?0 u. a7 K. i
.gpio = DA850_USER_LED2, l6 |) ]5 ] |* r# W: v( w
.name = "user_led2",, l/ C* i' a. Y( K
.default_trigger = "default-on",+ G9 f, T' ?% }' ^0 Q& z
},0 F: k- Y2 r( c8 G
{; I8 [- K5 t4 X( {
.active_low = 0,
' Q0 H- E7 o9 k& {! d, E ?5 F .gpio = DA850_USER_LED3,
3 D: d6 p& _& s8 i' x/ a .name = "user_led3",
# e1 D# D1 g+ z" G, z .default_trigger = "default-on",4 t/ m$ ]1 Y! J+ y- e- p$ n+ a6 P
},9 E5 U- X. q& H+ f
};
7 e8 Z4 w1 l( J3 m* u1 p$ r
# f: ~! m, P! B0 N: l* a6 a3 @static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ ^ c+ z- W* E( ^/ ` .leds = da850_evm_tl_leds,0 J$ t* r x D$ v
.num_leds = ARRAY_SIZE(da850_evm_tl_leds), {. g: R# h0 Y. O( Q i! i5 {
};$ M9 v: [* C* w! c% |8 _! n0 z% }6 ?
4 O. Z3 h! C l9 P3 u2 T/ Mstatic void led_dev_release(struct device *dev)
' o6 {' p+ T" ]( N! L/ {( T{8 d/ O6 y! x! c: A; E
};
. y* M2 w' M% y2 Q3 C9 a: w6 q) H5 j7 F3 ^, m0 E3 W) D7 Q
static struct platform_device da850_evm_tl_leds_device = {
6 Z% Y5 W7 R6 L% a4 @$ Z6 j- ~ .name = "leds-gpio",* ^* v/ D0 \) T. a% i/ h
.id = 1,
6 M4 A; ~1 u$ H: q, S .dev = {
3 t$ o1 R/ O8 q7 Q' V1 e .platform_data = &da850_evm_tl_leds_pdata,+ `, [5 a5 @/ c3 t1 x! \4 x0 `
.release = led_dev_release,
- A, p; D# W$ n3 R }
! Y5 F) ]; ?* x$ [2 r7 a8 r};
Z4 N) b/ p) u1 n! a$ d! W9 I' `8 G
* _3 {. W$ p* i% Xstatic int __init led_platform_init(void)
3 R9 }: z% G c- B& |( c5 g{6 M1 \+ @0 h) z
int ret;
( P; k) G" }( _# W7 p9 w1 l#if 0" w$ t, P; P: ]' @# W
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);7 ~' W& a: c! C, ~. I/ H, Y/ o
if (ret)
. v: z2 s' x0 ^8 o& {3 Z% H pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 B& i& |* F T L. n "%d\n", ret);
) o( U* A% x a) C#endif
# t$ _8 k# J6 N8 J! R- I ret = platform_device_register(&da850_evm_tl_leds_device);
1 |/ ^) i/ ~3 i) P- e( R" e0 h7 F if (ret)
! j& F* d3 C. ~: Q- O2 T+ H pr_warning("Could not register som GPIO expander LEDS");
) x3 j1 e6 v& s6 ]! |: { else0 ]( f5 d1 @" g* |( _: k# G
printk(KERN_INFO "LED register sucessful!\n");9 j0 Z$ J5 l( C& G" Z" [/ \$ R! H5 H
9 Q3 I- z' o6 x5 ^. c
return ret;
q) ~, M# k0 |}% \% w( k0 F! R1 E
7 D9 p; c* p5 X0 f$ Jstatic void __exit led_platform_exit(void)$ K: O. Z; n; C& P- N/ o
{6 U* g& o0 _# P4 W0 U( I. ~$ D
platform_device_unregister(&da850_evm_tl_leds_device);
! P4 M8 w4 Y' M0 `, {3 H! Q
9 X3 Z' `: J% B5 A printk(KERN_INFO "LED unregister!\n");
8 `' S' f" p2 m5 l7 U}
+ D& _! r; r- g% F2 a8 }# i1 ?( p; @- u
module_init(led_platform_init);1 ]6 a4 d4 N8 V2 E9 h
module_exit(led_platform_exit);( e& B2 S: M1 v) Y" z) ^) Q
0 B+ `3 Y* C: \; G+ gMODULE_DESCRIPTION("Led platform driver");
- d) k" J8 v, o- {; ZMODULE_AUTHOR("Tronlong");
/ B! o/ E, D) d2 y' QMODULE_LICENSE("GPL");1 P0 `4 e. [ Z! b0 [5 b' u# e
5 D/ Q" y0 M* d' Z% ~ |
|