|
|
求大神给下面的程序做注解,请稍详细些,谢谢。( y- J2 D$ O/ o
#include <linux/init.h>
% D, Y9 L. }- i#include <linux/module.h>' S3 E; X6 p/ ^
#include <linux/kernel.h>" v* P( b9 _. [7 K4 V
#include <linux/types.h>0 _! P* D P- _; O" @
#include <linux/gpio.h>
7 P" @$ k" x/ Q% L D! f( L#include <linux/leds.h>& C C3 H( G( N$ @
#include <linux/platform_device.h>
1 x# r3 V% Y- c' u9 i* Q' F/ Q6 Z& Z" @2 H7 Z/ e
#include <asm/mach-types.h>
7 k; B! E9 u1 s: @) n! ]#include <asm/mach/arch.h>. J! K( T# L9 r4 C% v$ t4 B1 y
#include <mach/da8xx.h>+ A- l7 b% A* L) `/ _" C6 a
#include <mach/mux.h>0 r/ q" d" F5 R. c
1 }" _- S Z# A#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
b6 G) m/ B, m: X6 v( R. T( E2 g#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ I# L. C/ d8 X+ v. E
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) A4 l# @: p/ I0 B" [* W/ S) C
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). n0 S& |6 h8 c( r9 e" E
5 t1 U: t t1 } u: c7 M
/* assign the tl som board LED-GPIOs*/
2 U0 D0 |2 T( k6 Y2 Rstatic const short da850_evm_tl_user_led_pins[] = {' \% ^+ q! p6 M) e& ~
/* These pins are definition at <mach/mux.h> file */$ n8 B* L9 L1 r6 V
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
- p6 u" a" V. O2 M -1
6 X/ _; o. L: g) B% ^/ ]};
& A9 w! S W9 l8 b$ \! K6 a7 t+ o; W# {% k
static struct gpio_led da850_evm_tl_leds[] = {0 r3 C. X9 I+ ?9 X' U" m) D
{
/ w$ i1 a' S, @! { R. R5 q .active_low = 0,
& ~% f* m n% O1 `: D7 h! [- g .gpio = DA850_USER_LED0,
; A) i2 e! m# }$ j .name = "user_led0",9 G R) e% |; s6 r) v8 P1 k
.default_trigger = "default-on",) y: I Y: n, g
},2 d: \, I- n/ g8 |# S! t* p# ^- d1 [
{
0 D, j' Q1 C6 ?3 j: F# Q .active_low = 0,2 F1 D1 [0 s/ q p: g
.gpio = DA850_USER_LED1,( _7 B& Y/ C- }3 d6 Y( ]
.name = "user_led1",
; R7 |2 g- t: U% q .default_trigger = "default-on",
8 G& T8 j6 ?+ f1 b- [/ Y3 s# w },! i( U+ L! O9 s9 p _
{
- E/ A& b6 P( F: d3 L .active_low = 0,: c" t0 Z5 A6 N- }$ k; P
.gpio = DA850_USER_LED2,
# `# T( B* t# c% b9 y0 |4 v/ @ .name = "user_led2",
! V+ X7 H5 }5 Q .default_trigger = "default-on",
# h$ K7 }" o0 _8 Q* N },6 z% |: H& l0 r. y( t3 E
{8 Z4 ]- n: | K# F
.active_low = 0,
1 g: r! R# U* c, H$ z .gpio = DA850_USER_LED3,5 i. T8 Q P0 f% T" R: b
.name = "user_led3",
+ t+ g/ }5 S+ m! R2 `- @ .default_trigger = "default-on",
7 P# j8 e- F' [. l: ] },
' a% h+ l* j' I1 b/ V};! @- Z6 J v4 s- f% m3 S% V
1 y8 S, V" }) k/ i5 K0 D5 D" S
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
3 J% O% n# F- S m5 Z .leds = da850_evm_tl_leds,2 i5 E# r6 d$ ]% S+ C/ ^& G# S
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ i: H R: H5 k) `& |9 J+ {
};( B" [- v3 f7 q- Z, p
# m# j6 J) c. ~/ [" r
static void led_dev_release(struct device *dev)7 n3 o7 f+ e) }9 E4 I
{" F3 T$ U! D, d* Q9 U
}; z! Y: ~# m' @9 Z- I2 v
o- T# z+ y; e9 z2 f" B9 estatic struct platform_device da850_evm_tl_leds_device = {$ |+ ^3 r8 o& ^, R. N$ k7 |# k
.name = "leds-gpio",
5 _ a# u& _- [3 `0 D .id = 1,
( b* {' R. c: i .dev = {6 g% z$ K4 Z" |) b
.platform_data = &da850_evm_tl_leds_pdata,+ j s. a1 T) s' v
.release = led_dev_release,9 U' h( `1 \9 S, x3 f
}" e/ e) p) z- ~
};
! e" L+ L/ R$ R! Z8 x$ x- P9 T/ f6 e& Z7 |/ B, T% ^8 L
static int __init led_platform_init(void)$ P# o6 I5 \# H# k3 |8 g
{" _9 { V. Z; j; u+ ~- P0 f3 v3 C
int ret;9 T0 S W& V i- t
#if 0
. g1 @. G6 b6 X& f$ z ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; z# ?8 Q9 [3 w# g( a. ]( r. ]
if (ret)1 \9 L, _7 ^$ Q) _- [8 {. J- ~. b
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' m" b5 x8 z" p; J+ o6 D3 @4 O
"%d\n", ret);/ ^ u$ m# s) Q) O/ Z' ^8 S+ e
#endif) T: F' i% }( |% _4 G' U6 z8 u8 |. Q
ret = platform_device_register(&da850_evm_tl_leds_device);1 L) X, Z* g( @! G& K
if (ret)
7 d7 } y7 I' r6 I$ o pr_warning("Could not register som GPIO expander LEDS"); e- U0 @! E. }: j4 I
else
( f c+ o! I% w printk(KERN_INFO "LED register sucessful!\n");
% [1 @- E0 z- U8 x4 p0 s9 p3 ^ |+ K3 L4 f1 w
return ret;
/ d' e5 x: ]% D q& v' N- u}
5 N$ L) Q# D5 T. z$ ~ P
7 U$ w8 t; b4 _6 z5 tstatic void __exit led_platform_exit(void)
5 e C7 q7 H$ O' T{
$ m4 l4 S: u W; U3 T platform_device_unregister(&da850_evm_tl_leds_device);
2 j! X9 U! C% b0 L$ X1 |3 B0 z" F5 J% p/ q
printk(KERN_INFO "LED unregister!\n");
) ^" Y7 y! u$ X% P4 t" ?}
+ T" x9 s3 N$ l) O K4 e/ T0 e& f& l& x4 `8 [ X; b
module_init(led_platform_init);5 c. i, w, w; b3 s& E' K2 f
module_exit(led_platform_exit);
/ u! A6 X1 [1 V! y; V
3 ?1 e2 M# j! {5 s I3 \MODULE_DESCRIPTION("Led platform driver");8 P" ], ]0 X& `
MODULE_AUTHOR("Tronlong"); ]* }4 B: C0 N" P" A
MODULE_LICENSE("GPL");
1 f) A. F1 |- l- l8 Y) F/ _$ k- u4 J! f' Y9 \- u# n
|
|