|
|
求大神给下面的程序做注解,请稍详细些,谢谢。8 b2 `$ L- S6 E4 O5 |0 z
#include <linux/init.h>
+ }& O- k4 [. B6 N#include <linux/module.h>
$ S8 ^5 d: J/ b) c#include <linux/kernel.h>
' S8 p6 X4 M/ J2 E9 ]* O+ H1 {+ ?#include <linux/types.h>
; I! V5 g2 R- W. M) e9 W#include <linux/gpio.h>
- o" P( ~* `9 I! I% B; r#include <linux/leds.h>
( u" c3 G; x& f/ i0 T- U#include <linux/platform_device.h>6 k8 I1 \" _3 I" A2 H' G$ x
# {* ?8 G* v# ~0 j
#include <asm/mach-types.h>
8 t7 k" K H; H8 l6 V* |* c3 D$ u' h#include <asm/mach/arch.h>6 i0 Z6 O+ b- o+ d6 P
#include <mach/da8xx.h>& ]- S: o4 g; ^' L: a6 s0 a7 @
#include <mach/mux.h>
% V2 y3 x0 P" G. Z) e% ]4 H# O. |# q! J
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 |0 D+ H% B) c7 q& f/ P6 [+ i
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)0 q! y$ ~, @7 ^- Z/ [( {: O
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 ~" }( D, [" r3 y* h/ F, y5 ^& r#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- i8 e1 j1 m$ E$ r0 z' L9 s% K( d0 X" {1 u* r" R" O
/* assign the tl som board LED-GPIOs*/5 E& t" y$ I( k: @$ L( B, e
static const short da850_evm_tl_user_led_pins[] = {
, k, |4 l$ G0 B5 d3 k /* These pins are definition at <mach/mux.h> file */+ G" ?$ [1 v* E: f ?& o& t
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. J( L7 ~, P+ n9 e' M- r -1" V( l: S. n/ d: V, P; k: p! D
}; f6 r! D% H. g: Q( `: V' [
6 v0 h0 @2 Q8 x8 p, Y' T
static struct gpio_led da850_evm_tl_leds[] = {( }: B! F$ j3 w6 D
{4 _: ~5 r1 G3 b, |: j
.active_low = 0,$ P1 ]! ?' T, n) i& c7 x( c
.gpio = DA850_USER_LED0,
( y# \/ _' j. [! \) X! p. T: f .name = "user_led0",
$ U! R# ^) c& U* o) d6 \3 ~ .default_trigger = "default-on",
% v" w0 G, y9 A },6 W: I+ L6 }$ B) b
{, q- x/ n' E. Z0 @9 z
.active_low = 0,
% q( |7 [) S' B' M" l .gpio = DA850_USER_LED1,
) W. Q/ ?/ g# k3 z .name = "user_led1",4 L% t8 _" h) G
.default_trigger = "default-on",
' A" a( s o0 G, i$ G2 a: V* A },5 s6 K A8 Z! F5 ~ g; @" y
{
/ [& N6 t: `+ y" F$ w* } .active_low = 0,7 s. e7 W8 Q1 f' u' G
.gpio = DA850_USER_LED2,0 B0 @& b, }' a
.name = "user_led2",
2 S+ e) m. E' d$ Y4 f .default_trigger = "default-on",& R T) c7 N! c
},
& l( r: Y# r; x, _4 K+ @ {$ g5 ~1 I5 w" X
.active_low = 0,* ^) f8 I: A8 }8 G8 Z( a
.gpio = DA850_USER_LED3,# [ G8 s4 n) l/ j2 ]- u# q
.name = "user_led3",
% _" o: }& T1 c2 @! l5 s .default_trigger = "default-on",( s: `" _* q+ G x
},) S; E2 y9 _& h5 G |+ w
};
& E0 D! j3 C5 ?! l, \. U8 Q# g7 h' ^% p8 G0 _5 L" O! }/ w
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 O% z0 N4 }0 l$ Z2 q
.leds = da850_evm_tl_leds,6 L M! i. r& R* ?5 n" M O" p
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),/ q& v* D! \& P7 r0 i
};+ Q5 G1 }( |! S# \7 ]+ ?: f; h
+ X/ u1 k) D: x0 d8 j/ l
static void led_dev_release(struct device *dev)4 h; b( j4 {+ t: M5 S
{
# E5 @' O4 B* P/ ?: N- z# I};5 B+ b, e; j* u2 J S) |1 @% n2 [
`, m* J) F& p3 G* c1 O/ [# fstatic struct platform_device da850_evm_tl_leds_device = {
+ B* }2 v6 l9 `6 U) o .name = "leds-gpio"," Z6 N/ n0 t, h% x% G
.id = 1,+ X. S4 l9 s' e" _- i9 D
.dev = {
6 P9 N8 f* e4 d( d4 b .platform_data = &da850_evm_tl_leds_pdata,
5 S5 i0 }7 S0 o% i/ X9 n) Z .release = led_dev_release,% U5 Q1 {2 Y- E( F+ h
}& S- n/ N! N$ ?
};6 n0 q# O7 y; d% U0 g: p
# S, T: O; S1 p, b+ G2 @: Sstatic int __init led_platform_init(void)
6 ^/ z! m$ R+ t1 c{; l! ?) l3 U# N- c
int ret;
+ F3 G; u8 p2 y) V" M#if 0
9 x6 V5 R0 W" `) E$ ? ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% c. u& n' r- [5 A
if (ret)
5 }5 `. S5 I b& D- u pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
7 i$ H( Z$ R+ G) C, N "%d\n", ret);1 i7 }0 s( o ]7 l$ o9 g8 L
#endif, `3 F' H' O+ v- k7 y" {
ret = platform_device_register(&da850_evm_tl_leds_device);
3 P: {# z* F9 C3 T! ] if (ret)
& N4 S5 p: Q0 u pr_warning("Could not register som GPIO expander LEDS");
c9 G* D8 ^& `5 W( ^4 I* c8 p else1 l- `: ^ q5 c" q: a
printk(KERN_INFO "LED register sucessful!\n");* i3 g% T9 `' j4 \8 P; b3 B
$ ^/ @! F6 W* }/ u" H/ A
return ret;
; D& b. L) G: R i1 Y" v}9 o) Y0 U/ P4 i4 [$ F
, S, e0 Y; W* j2 Dstatic void __exit led_platform_exit(void)
: }9 y% F( o- @; m$ H, h{4 u% K0 \7 m# c: \1 v. L
platform_device_unregister(&da850_evm_tl_leds_device);# Q7 K4 y- w( D8 y
; b( g) I1 q- q4 h printk(KERN_INFO "LED unregister!\n");
1 y9 o6 r& R K}8 @9 h( J' d2 G+ o1 S4 X6 I; @, U
( l7 ^0 B& D- T& K. A4 Amodule_init(led_platform_init);' F9 P7 ?! M" ]2 d" F" `" w0 l. O
module_exit(led_platform_exit);8 b9 A+ T) s' }8 D
- r! Q+ f1 R+ A" X# v. D# d
MODULE_DESCRIPTION("Led platform driver");" k. p* x4 I: e
MODULE_AUTHOR("Tronlong");
7 Z- x5 f( U! l) |3 |5 r* vMODULE_LICENSE("GPL");
6 O8 c! ^- E" U& v
" b$ ~7 u0 R! C) V* \ |
|