|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 n: b- T. R7 l4 D1 q
#include <linux/init.h>6 \( e5 R: a4 E( i/ M% ?8 w
#include <linux/module.h>
! Y' h% Z6 a2 P/ I0 g#include <linux/kernel.h>! {+ Z1 M+ x* X7 h8 |% {
#include <linux/types.h>
, T' b6 L6 m6 O! b1 c3 n- Y" I# u#include <linux/gpio.h>
/ f9 u5 c. v& I2 D: s! r#include <linux/leds.h># T( ^3 x- s- I. }
#include <linux/platform_device.h>3 H; K4 z- s7 k' e% ^1 v. t* d2 K
& |8 i1 _! [& q4 r" G2 r
#include <asm/mach-types.h>
( o. t+ \6 L& A#include <asm/mach/arch.h>
9 i8 r) O" `3 w; r' J& |3 W#include <mach/da8xx.h>
9 v1 Q2 E- q! P; N#include <mach/mux.h>
' B" p' D( j P5 l& r5 t# E9 G& p W: A9 L! u, u* C8 }5 Q
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; z0 _! S3 M3 T; n#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 b' P3 ] t9 }5 R
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# Y, p; a- }# o0 @0 ^4 t* v; v
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 L' R, y$ _3 ]" Q" _7 D& X) u
- A E; s( S% b0 `' k ~/* assign the tl som board LED-GPIOs*/
/ x" g8 Y+ e9 J; ~5 cstatic const short da850_evm_tl_user_led_pins[] = {" J: A) c' v; ]4 c& Z* q# D5 n% T
/* These pins are definition at <mach/mux.h> file */
& t1 _0 j& |6 N o( e/ u2 M1 G/ _/ ? DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ B s+ N# d8 \; |. p+ a -1
) O; A4 R1 b% I' O4 b* Z};' I& X9 ^9 w6 g9 r$ A
; }- D' D3 L0 @9 t
static struct gpio_led da850_evm_tl_leds[] = {: N/ m4 _: I+ y U
{
7 Q; x% ^1 }6 n( j .active_low = 0,
) {7 z# g& m% m/ k& {1 Y .gpio = DA850_USER_LED0,
! W, F, i* Z; Z .name = "user_led0",
7 }( w( c, p, P/ W7 a2 l9 X$ L* I .default_trigger = "default-on",
$ [& _6 q. Y& E% f* {1 ?& D$ c },
0 ^( S u( t' t {
6 C' `8 m( L) U .active_low = 0, n) ~( v" Q5 N* A+ n5 G Y8 S, o
.gpio = DA850_USER_LED1,: j; P9 O& E3 C1 l/ i0 r Q
.name = "user_led1",' {$ l, L/ |' P. @. c
.default_trigger = "default-on",( T, C# F* a0 B
},
1 |0 [7 \+ l; k7 X: e2 O5 d {
& {5 [& d" {4 I+ s/ A: D9 k .active_low = 0,) m6 B. I4 S8 R( \) N
.gpio = DA850_USER_LED2,
* n3 p$ I: l! `9 G: Q .name = "user_led2",2 Z1 H% \! O; k- D/ f* V q. X
.default_trigger = "default-on",
3 [$ j, d) i8 d+ p1 P) f) b },. l$ Q! y: m3 U$ R! f" R1 Y
{
7 m, A, i. I, T, U6 x$ s .active_low = 0,
' t+ }0 T; o/ s& J5 ~0 {. |7 _. P .gpio = DA850_USER_LED3,) k$ K p: s o" m+ K$ Q. o
.name = "user_led3",! _4 K7 i( ?9 s( F3 D1 a
.default_trigger = "default-on",
% y2 h1 ~: }9 c: d4 B6 u& q' y },
# Q) h0 Z& h" P+ @9 H};
2 l; ^& {- i2 O- g! n I7 X% z, e5 c' `) e0 P F5 L
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ b1 A4 k! [& t5 O# ?# G
.leds = da850_evm_tl_leds,
! ~3 e- G& A& Y S) y o .num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ O& a7 d4 ^# Y* i( r
};
$ F- w( j" e; E+ s2 O& d
/ A" U& p. G( Rstatic void led_dev_release(struct device *dev)
0 g5 j% Z; C h) U{
5 o% ?, v& N, y/ h' \' H2 m% x$ E};
- i) O5 u" @- u" O* `4 G1 `4 k' e2 y: M$ H* d N8 q* U. a" m
static struct platform_device da850_evm_tl_leds_device = {. \4 h% S" ?# j- y Z% i! Y
.name = "leds-gpio",/ F! `) j$ Y! N
.id = 1,) L* H+ v, m1 i7 |5 @
.dev = {, H/ ?5 Z8 H2 ]/ q
.platform_data = &da850_evm_tl_leds_pdata,
; m! s/ o6 ]1 H .release = led_dev_release,' o+ w* R/ [4 k9 y4 ^6 l3 R3 s4 s
}9 n# a1 \8 E, o
};
8 s8 U0 q' y) K# S8 K) ^, z7 R: Z8 y' o& c' s9 A# T& B
static int __init led_platform_init(void)1 ~4 f: y# e7 R! p3 s9 B6 x- ?8 u
{3 R) o7 j; O9 B4 P3 A3 d
int ret;
! D+ E5 ?: g4 R3 L( w2 O: q#if 0+ h9 S I, p: C
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# H, o5 z, u+ X; E+ S7 |5 U
if (ret)
1 _/ b; L' R; d( N; o$ J9 T pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ F" ^; C5 F4 W& {
"%d\n", ret);1 N2 g/ b9 N2 l0 |3 t
#endif. c7 C M- b7 {( |
ret = platform_device_register(&da850_evm_tl_leds_device);4 V/ u# ^- u. v% W8 Z# j
if (ret)
# {& z* I4 F. ` pr_warning("Could not register som GPIO expander LEDS");4 _( K, O6 c- Q
else
1 y# E3 D5 d1 A& P9 Y) x printk(KERN_INFO "LED register sucessful!\n");
0 m/ ^( ^" S8 J7 f) U" ^* E3 C7 m
% z7 l2 y9 q3 u: {* I return ret;# y0 @/ q/ q, x8 V4 V3 N2 s
}
) X! T/ l5 w# ?6 W' Y( g' c9 ^& i B$ G0 o- W6 } H
static void __exit led_platform_exit(void)
# b, @! z$ W. L6 k! p{
* p1 Y6 S8 w( D( N7 | platform_device_unregister(&da850_evm_tl_leds_device);/ f& m7 ?' O/ z
O- e& d7 s! @/ v
printk(KERN_INFO "LED unregister!\n");
! Z3 p) r1 n) {6 ~} Q, G- n% U3 {# b8 ~
& k9 I" U& l8 _+ O
module_init(led_platform_init);
3 A9 I) B5 J& R# P# E" Mmodule_exit(led_platform_exit);
1 N# L9 O; `/ t& a5 W
/ D8 ]2 ~8 G+ R" ~" s! UMODULE_DESCRIPTION("Led platform driver");
0 ~' h2 l% S8 o+ }, y1 LMODULE_AUTHOR("Tronlong");
2 j1 w5 a, L" p) o* oMODULE_LICENSE("GPL");" C/ e9 r# p' [
0 c# L# {( j' G! X- f1 r |
|