|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 r' j5 ^7 L% P8 u& Q& R1 x#include <linux/init.h>. Y# [* C9 i9 {7 ?9 q' o" k
#include <linux/module.h>& f" V3 x# g' z/ t: d) t$ S
#include <linux/kernel.h>
$ w6 K- Y2 n9 a% x) y7 v#include <linux/types.h>0 p1 P6 n5 Z: C9 Q! \: a
#include <linux/gpio.h>
D7 n y6 t$ i! \5 e7 A#include <linux/leds.h>
$ I1 B9 L- y0 q# X9 y1 K#include <linux/platform_device.h>
6 }4 S/ Y5 c1 [% h; o+ O
7 [% X0 r: i6 i5 s' s. _2 M* S#include <asm/mach-types.h>
9 S; i6 f' w Y+ O0 v; B! r#include <asm/mach/arch.h>
% Z4 W" V9 T: i4 x# H, |#include <mach/da8xx.h>
7 i% S: ]8 T5 @6 p/ t, B2 }#include <mach/mux.h>! ]2 A" y7 }9 D! b( ?
6 _- c5 u7 N5 }0 o7 s( Z1 x# Z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 e7 }4 w) _' N' V
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 A& _1 N' |& w2 V& [4 @8 H#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
- M! G4 W$ M3 m) d! R#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# ?0 I% ^% O/ O
% v5 C: o0 [$ N/ D+ E* f
/* assign the tl som board LED-GPIOs*/7 R. I9 `" e; T# y
static const short da850_evm_tl_user_led_pins[] = {. r* v, N. P0 S) ?
/* These pins are definition at <mach/mux.h> file */
- Q6 y, `- t' k- F7 \+ k DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
( Y6 e# s2 v5 C -1* \8 Z0 K+ g6 H3 j) D
};
6 p; z2 e" y1 i+ X7 S
' F) R) N" n! ~& ystatic struct gpio_led da850_evm_tl_leds[] = {
# L$ L0 O% M1 b) C1 S' E7 x: C5 r {
5 J5 p G) {9 y$ P- a: _ .active_low = 0,
3 j$ D1 M# A- h) L( t' V' z* |- F .gpio = DA850_USER_LED0, d8 D6 D9 n( f# E! |
.name = "user_led0",
1 W# i) u* n s1 B9 W! {: {" W .default_trigger = "default-on",, h t! ^, f* _- I. x' k
},# n% S3 q5 ?4 x4 G- e# A
{
, g- q' K! e( g1 W1 ` .active_low = 0,
, b. C+ C# O2 n+ O! J .gpio = DA850_USER_LED1,
1 T, z! ^# j0 ?4 j# X1 P3 S .name = "user_led1"," ?* f" }, E) N" N& `- V3 M6 |. M
.default_trigger = "default-on",
, g) W( o/ P: C* Q },/ a2 [ f/ S) y* Y0 r
{. S) o& @+ o c
.active_low = 0,
( n ?4 t/ H" Z' R9 ~* ~8 @0 x6 T .gpio = DA850_USER_LED2,
+ B9 V7 }7 ~, o& b- f" M0 R* n .name = "user_led2",
6 [" Z% \( x& {7 y" F .default_trigger = "default-on",3 T# ^ W& B D: p% D4 q! I
},
- [" l9 p3 T9 V/ m8 c' H {3 b$ ^% U7 K; N& L0 z' S
.active_low = 0,0 X8 d+ b; \( t4 k; _6 i( n
.gpio = DA850_USER_LED3,
4 x: x+ Z& _; V& X% y .name = "user_led3",
$ c1 G7 N* J% I8 m+ c }4 ?: i .default_trigger = "default-on",0 F! p+ E$ ?$ `
},
3 h' [9 D3 y7 e/ a ?4 Y};
. x! C* s6 V" Q3 } L: M& \& W1 _8 v5 E4 o2 G1 g
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) O, ~* r+ n# D6 n
.leds = da850_evm_tl_leds,
7 |- L& T j/ @+ E K% \ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& j* Y) C# T6 `) D4 E$ D};
7 C% z/ O! {" {# H
4 j- N8 [* X3 u; O/ I% Dstatic void led_dev_release(struct device *dev): |+ K" e! l8 h- H8 A8 O% n+ P
{/ c; t+ c, @, Y6 ^) l
};* E- C7 |" a0 c2 V3 t& B
, G! S& J+ f! A5 S
static struct platform_device da850_evm_tl_leds_device = {
2 S! l- t S; q .name = "leds-gpio",
/ G# E: W) U6 |9 i7 I7 \6 t .id = 1,
, z1 b) K9 ~8 X5 [ .dev = {1 Y3 b9 _# M! y4 [
.platform_data = &da850_evm_tl_leds_pdata,: x9 f+ Y9 C. V, w* H
.release = led_dev_release,
0 E" B6 j# e5 i3 r5 e }: s' M, j7 q) F" N/ \
};) S% }* p* R, x- S/ i5 L
2 e# F! H3 w/ Q: I$ y6 Qstatic int __init led_platform_init(void)+ h" k! O+ V" f) L: q
{
, F1 D" K8 Z% Y# s int ret;
+ }4 |1 A2 e" \; y% c#if 0
) l: h( g" i5 f* D0 o ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) n& L$ ^$ E/ ^/ P ~
if (ret)% j: b4 X$ d) f( Z/ d
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
# P* G$ `2 S* U! j% V% s "%d\n", ret);
9 L. o% E6 K0 w#endif
9 J* g7 d$ w% j: f" x ret = platform_device_register(&da850_evm_tl_leds_device);
5 \" q$ L2 `1 U% m) g% J3 W if (ret)
9 G y6 v8 [1 I1 x pr_warning("Could not register som GPIO expander LEDS");
7 I3 ] ~2 w; l& U4 D else
# n* N) r' K% U" D# ?! z% c6 A+ r printk(KERN_INFO "LED register sucessful!\n");- z, @, S, R5 T. z! R
( z9 O }1 g- ]
return ret;" t; L4 }1 T8 k7 p6 T
}
4 u* `( k4 F( j# a" I
. T6 p- [: z4 V$ T! w1 Sstatic void __exit led_platform_exit(void)* u0 x+ O7 m7 C; o
{' \8 v4 j9 ^7 L
platform_device_unregister(&da850_evm_tl_leds_device);
; i& P9 D9 O, c( w" M5 }7 H! b( y3 a; L6 c; t, c6 a$ Z) X! k
printk(KERN_INFO "LED unregister!\n");
. r$ a4 Z/ V. c6 E2 S}
1 |$ V% A" B2 A( k. ]( m& K. U; T4 u6 T% c+ ]9 a% f7 r6 B9 F" {
module_init(led_platform_init);8 X) E# \5 l; C% q" {7 m8 U
module_exit(led_platform_exit);2 C" ^1 | k7 T6 s. G. T
* T: C9 a; a' k) k- O5 k8 [) ^
MODULE_DESCRIPTION("Led platform driver");
/ v$ w. |; }6 d% [- |) nMODULE_AUTHOR("Tronlong");1 x5 P$ |) m6 u* U! r
MODULE_LICENSE("GPL");9 }, o4 N" r0 Y p6 Y
# A% p! ` D" L% {& h! ]
|
|