|
求大神给下面的程序做注解,请稍详细些,谢谢。
' Z% i" s- A' ~0 i/ \+ v#include <linux/init.h>' B# L% ~/ k# m7 }" \9 @/ H
#include <linux/module.h>9 j" p5 k% W* I6 C7 r6 e
#include <linux/kernel.h>
$ F0 T' T, q, r0 o" a% h#include <linux/types.h>% e0 Y. L# `7 W* k
#include <linux/gpio.h># ]" e7 F9 x6 L1 O3 M
#include <linux/leds.h>) `; Z$ i4 v6 v. b M# q, ^
#include <linux/platform_device.h>3 M# h3 M! J3 Y! R- E5 e4 L6 F
# i( T5 {5 e9 a9 R: @#include <asm/mach-types.h>, m" D# E+ ~, p1 B; o6 h
#include <asm/mach/arch.h>" N* o. y1 |- G" h( T
#include <mach/da8xx.h>
& z# Y8 i2 `; `, e#include <mach/mux.h>$ C, Y, m/ d% {" |& G* g
$ E5 I' n8 j: z' S
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0), r: [: |: H/ j- D& ?0 M2 I
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
! J8 R* x# `9 J2 }/ F( k#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
0 I1 ^. |% Q, c u/ w* C# }#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)& ~9 [6 t" h e6 L
) I' S1 O" A" G' h! O) i& d8 M8 [. X/* assign the tl som board LED-GPIOs*/; ~: l5 a/ U3 B7 N/ Z: q
static const short da850_evm_tl_user_led_pins[] = {2 n& e! s: a1 I2 V
/* These pins are definition at <mach/mux.h> file */1 g6 l2 w$ p) T( a+ ~! b
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. L4 f* t: N5 N$ Z, y! T* |# n -1
4 E2 R. X0 Z1 o, C& o+ A/ ]' H};0 q* K$ K# c; g- S+ Q
, S" K R6 O) o4 ^% h7 c
static struct gpio_led da850_evm_tl_leds[] = {6 i7 z# v& k. t
{
! O5 Q5 l1 Y2 J .active_low = 0,0 I, X: u2 y% \- K8 @0 u4 m
.gpio = DA850_USER_LED0,
, I* m3 n) O5 X$ _/ w A) w5 j .name = "user_led0",
9 j2 T6 U e% M5 k* M+ [ .default_trigger = "default-on",( b/ i7 m+ y2 O0 U* {
},
) G* ^$ J- t& v: z: k! J0 Q2 P) _ {
$ J7 z/ x5 `7 A* l$ r4 x6 `; b .active_low = 0,9 _- \' m. I* u* {
.gpio = DA850_USER_LED1,
7 P; D& A u _8 S8 D .name = "user_led1",$ H# X# w" Z' D! m
.default_trigger = "default-on",
$ R! @! e/ i5 T. T },+ L" |6 f$ E/ Q
{
, o3 `0 q g' | .active_low = 0,
; D$ E) a1 B0 [/ X* r, b7 u .gpio = DA850_USER_LED2,
! c" f2 B3 w2 ?4 `1 ?/ g .name = "user_led2",9 G' j: k$ Z1 x% I4 h
.default_trigger = "default-on",0 y3 C% }5 f6 b
},' J, \( V1 q2 j4 @4 }
{/ L% q9 p# A2 l* j; l
.active_low = 0,. a: @' X9 z+ W/ q
.gpio = DA850_USER_LED3,0 Y1 _3 N) B1 X5 @
.name = "user_led3",7 R3 B9 R5 A; e8 ~# l
.default_trigger = "default-on",! \& M6 _* x8 _9 ]
},
. Z9 x! B; K" G};2 o! @/ c) F% T4 `) V' f
! ]0 Z4 t; Z3 T
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. Z: H/ J* s! Z .leds = da850_evm_tl_leds,
( B% W2 z( y: C9 a$ o6 D* l .num_leds = ARRAY_SIZE(da850_evm_tl_leds),+ g3 P: N. t( O! P! D0 c. d0 O
};" b1 L5 ]! s. f, k* k
# K7 g& a% t# z* Xstatic void led_dev_release(struct device *dev)
0 {6 ?# Z$ L, P7 C" V1 P{) P4 k( J% x U
};
- ^- s- c+ |8 F2 Y8 N7 \
/ z' x. @5 k3 ]1 P1 j4 D3 Fstatic struct platform_device da850_evm_tl_leds_device = {
2 O6 R$ I/ s n+ d( O .name = "leds-gpio",
# |# X" `$ {3 }5 y+ v; M1 I# Y( y4 r .id = 1,
8 l; e3 R# q9 p y- ^ .dev = {
" a. X) E6 t6 c% V. e5 S, M3 ? .platform_data = &da850_evm_tl_leds_pdata,1 @( e+ \5 h7 G/ _% Y! K5 j
.release = led_dev_release,
/ k. W6 I: ]0 P7 X2 K& Z1 }6 A }. E: D4 F" Z* |! L
};
3 f7 Y* V4 E/ X9 @! d- J! w' O. f; ^1 D5 ]$ J( i" e {* { L
static int __init led_platform_init(void)
; |+ e2 j3 ], Z{
+ K5 N; R3 a! r% X6 v$ v int ret;
! N- b/ k+ P0 R1 U& z( \7 h#if 0! w0 {, p' H! k, g
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& i/ `! p2 j' I" h( U
if (ret)! @* l$ \4 S/ p+ z/ m y" C2 m* K. U
pr_warning("da850_evm_tl_leds_init : User LED mux failed :") Z- I3 z% w6 B0 ]- b7 t
"%d\n", ret);0 n& Y3 o7 f( H6 N, D2 S
#endif
. w2 K) l# b) K ?: d, Q. F/ V: N ret = platform_device_register(&da850_evm_tl_leds_device);, h3 I4 o: n+ H. ?
if (ret)
1 _7 Y, Q/ X f: H5 s pr_warning("Could not register som GPIO expander LEDS");
; G' s5 ^1 s8 q. {& c else' P' X4 z( v" S' U" l
printk(KERN_INFO "LED register sucessful!\n");
# v5 Y9 O1 X& g/ u! q. C4 ]8 ?; S# E- X2 D
return ret;5 K. T& I) p a( G' l
} N" ?# J# ~3 T% E3 g
1 T. T8 ^/ g3 N/ A) ? pstatic void __exit led_platform_exit(void)& X. [9 D# p# Q- f. \& J: Z4 g+ L
{+ r" ?, ]) \- i! V+ @& O
platform_device_unregister(&da850_evm_tl_leds_device);
8 I+ J7 a2 p" z) X+ m+ u. U' L- |+ h& X$ F2 |' C# f
printk(KERN_INFO "LED unregister!\n");
/ v8 \, f+ s# y1 m- a) j; ?: @}
: t; y4 e. W" X& Z* h2 @4 P
- x3 K- Z$ N7 o4 ^5 t- imodule_init(led_platform_init);4 L0 _) h- P: T% @+ K) z
module_exit(led_platform_exit);$ p) J2 f# X) a. g. {* m' _4 m
1 M: A# J% q( F/ I. b3 D- @MODULE_DESCRIPTION("Led platform driver");% ?# ^7 \% D3 ?' _/ d' d: ]% K* R
MODULE_AUTHOR("Tronlong");+ o3 x, H- e- J6 O
MODULE_LICENSE("GPL");0 O& P3 h/ _+ n3 X. J( E1 Z
* O. w$ l+ Z, Z
|
|