|
|
求大神给下面的程序做注解,请稍详细些,谢谢。% M/ a# L& O# v
#include <linux/init.h>* y. u& D9 `7 R4 u* D9 `3 W- U: ~
#include <linux/module.h>( k I, J# c# x
#include <linux/kernel.h>
; z% {0 c8 `, H ~$ N0 F3 v! x#include <linux/types.h>
- k v% E a! L$ {" ^#include <linux/gpio.h>
1 W/ ]3 ?: t* `9 F9 i5 o#include <linux/leds.h>0 Z/ ^& [8 O# M% V9 A8 m! @
#include <linux/platform_device.h>
% r2 `) @" ~, M; Z- N4 c" Z% M1 H- t) [+ E1 B9 F+ a
#include <asm/mach-types.h>
7 d6 J* p0 Q: ?#include <asm/mach/arch.h>
2 D* \& w- o7 ]- I& [' Y/ S#include <mach/da8xx.h>
: V5 u! e) K$ M! H. n#include <mach/mux.h>( s5 W, ]2 T0 r4 ^( d6 D" m: L
4 [- G$ C, ~( m% t! b: i5 V1 a
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); K% F5 l/ D; v5 p
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)' x$ |# Q ^8 e `: C4 P7 X/ s
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
) |% t, {& |5 A" h) t#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* e& E7 x w8 D4 p' C/ K; ^
7 l( }! a8 Q6 R) J# f& l8 p* `) o/* assign the tl som board LED-GPIOs*/
: v& s5 d b. }0 T0 `3 Vstatic const short da850_evm_tl_user_led_pins[] = {/ w- L2 i O/ J, _: i( u/ z' n* o! Z" m
/* These pins are definition at <mach/mux.h> file */
, t" ]- A" `9 W" h: o" e! y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,# p; [7 ^& y2 A; r
-1% ^% |% o, C# A1 y) H4 m
};6 |$ e! Z! M% v% S
9 ~: a9 q4 j3 }static struct gpio_led da850_evm_tl_leds[] = {
# {7 N: I0 y3 D& m {
- D' C) n8 C5 V .active_low = 0,1 s; {7 S4 d; [
.gpio = DA850_USER_LED0,- [. \( D9 L- J5 Z
.name = "user_led0",( y4 }" x9 C D: h
.default_trigger = "default-on",- D$ ] {) E4 p6 P9 [
},% _) J7 X9 h! p( v' D* U: Y6 t
{
" Y# z! t: U- ?# @$ ]6 C .active_low = 0,9 u$ V r4 @- _' c; U- ~8 k/ g
.gpio = DA850_USER_LED1,) O4 h) \5 q3 l' W
.name = "user_led1",
]1 i+ K6 \1 U, _0 B2 q .default_trigger = "default-on",. \& P# R4 J( d
},
/ [6 V8 U3 x+ B {
H$ U% T' C v; W$ p .active_low = 0,
; ^) d5 c) {9 v .gpio = DA850_USER_LED2,
* }5 [5 o% f3 v5 M: r! E .name = "user_led2",' W& O9 {" J* D: y B0 q( I3 i3 Q: R+ ]
.default_trigger = "default-on",, @: _; B/ u2 I6 L9 ^4 `0 \
},
. Y! p9 m. F- t; f9 l s$ a' P {
' o! M9 a- n* ^* c .active_low = 0,7 e# i# A6 W% S2 t/ \/ }- F7 { u
.gpio = DA850_USER_LED3,4 Q3 A) W/ U6 `
.name = "user_led3",
5 s0 r0 a: r3 q/ x8 [* ?6 O .default_trigger = "default-on",4 o0 ]8 e& n; H9 p& D/ ]- p
},
; C- H6 y& c/ A: ]# e};
6 O# _. L" F" N# ?' ]9 e! n
, ?- K# t% N3 c4 m! M4 Astatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {6 V7 O: ^5 I4 s! O" ~
.leds = da850_evm_tl_leds,9 p G( W- V; e$ I! J% @8 |
.num_leds = ARRAY_SIZE(da850_evm_tl_leds)," l6 |% J/ _0 g* b
};& x+ R4 B% A) O5 r1 p
+ |/ W/ T! t( {1 {+ ?static void led_dev_release(struct device *dev)
& q% _- h: N- \. w. j5 Z H{
- \" R! g3 Q' \ h};: H! r& q; U5 F- ?0 L# e8 [
8 O5 o' I- y1 b$ s, Rstatic struct platform_device da850_evm_tl_leds_device = {. D! q! F: w1 G) _; W1 d; L! e
.name = "leds-gpio",
0 q5 G, ~4 W5 i5 ]1 J+ V/ j .id = 1,& S2 F' e: ~1 x! f: n! q# i1 @
.dev = {
! K3 M- p+ I1 F. g j* Y; { .platform_data = &da850_evm_tl_leds_pdata,
5 ?" l a8 E0 A" m" G9 u( ` .release = led_dev_release,
, J6 d2 F3 B2 m# N/ R" Q6 b9 G+ j }
# z) |2 Q: ~( @" q8 U( E};# t' Q8 O% c5 j7 x
& P6 x ?* h' c+ V, ?1 G) Cstatic int __init led_platform_init(void)6 X- V& ~/ `$ d) e" v$ b
{
$ ~- Z6 G, v) ]1 A6 } int ret;
, m% G6 V0 h; V#if 0+ @3 d2 M& k# k
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; Q$ a! O; `9 M) d O
if (ret)
6 m' c* J/ c/ A: q" `; M' |) F0 N pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- x6 _/ s) }# B. B0 T
"%d\n", ret);0 s3 D; m( [# u' h. h
#endif
' _2 h c$ p) T ret = platform_device_register(&da850_evm_tl_leds_device);2 T+ |% x" J- R1 l+ j" x- W
if (ret)0 j6 G3 r% ^5 t* E
pr_warning("Could not register som GPIO expander LEDS");0 ^3 U6 |( r+ w/ C- k1 V
else
4 X8 a& P) v' r/ e printk(KERN_INFO "LED register sucessful!\n");4 [/ Q c9 H) u! Q2 V) l0 I: }8 f- s
1 V R5 c r' |+ A% ? return ret;. T$ {; l7 o! I# z
}! W* b1 M$ q( X" V
; Q6 k0 e* `* tstatic void __exit led_platform_exit(void)
/ T; u: }/ Z! Q* J" w9 A{
3 G! y1 U6 S5 L E, @ platform_device_unregister(&da850_evm_tl_leds_device);
9 @1 x$ }" @ G$ D' q; J( ?. J* E% E9 c/ k% V/ C' r3 T
printk(KERN_INFO "LED unregister!\n");
- d5 M& @, V5 l( _}
! q5 I E/ i9 I/ F$ ^* @. q# |
. S2 @" A, z) j: |) e" ~module_init(led_platform_init);
7 Q5 ^5 D" } e. `! W3 ^module_exit(led_platform_exit);
* F$ m2 K% n8 `$ e% S- Q
$ v# H/ O; _$ K" a2 aMODULE_DESCRIPTION("Led platform driver");
. O! U5 R1 K6 j; M/ V- hMODULE_AUTHOR("Tronlong");
1 H2 i- @& }+ y( V5 hMODULE_LICENSE("GPL");( C4 i. R5 ]( y `
1 {7 v$ b S7 ]; c |
|