|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ V% p$ D" _& l0 o( N8 f+ z" ?; K#include <linux/init.h>
4 y- G$ u6 w9 F) o; r#include <linux/module.h>3 Q: h2 k* T; g% y& h/ S2 _
#include <linux/kernel.h>
1 `; }9 Q8 C- z" e7 r6 L+ @- X#include <linux/types.h>
5 e0 n/ S2 G; {: U3 F#include <linux/gpio.h>
! E u5 [7 h5 r; K#include <linux/leds.h>
8 `4 b2 u% K$ {. B6 R. E, s#include <linux/platform_device.h>
5 h5 h, i/ L$ T$ g# [; q# i- N+ }! |# J6 C {, Y4 ^$ b$ s
#include <asm/mach-types.h>0 V9 }7 [+ u4 y
#include <asm/mach/arch.h>2 \& D7 a6 e8 ]8 h% T
#include <mach/da8xx.h>
' X- C. ~! O, l" g) S#include <mach/mux.h>
; Q; K& v( d' t/ A C; ? R$ t. s- ^1 [0 ^# q. _5 a0 t
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0): D: f3 S6 B' i$ c6 D `
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* Q9 S$ _8 M T2 c- ~4 a% G5 G9 k#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)! q$ U. H, i6 [) s6 r7 c% T
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* W, z4 I* u% ~8 C+ `( |( R- x: s) W7 a- i a6 _6 ? M
/* assign the tl som board LED-GPIOs*/
$ Y6 T5 b `- q6 E3 W1 D# Sstatic const short da850_evm_tl_user_led_pins[] = {
. V4 x: S f# \ /* These pins are definition at <mach/mux.h> file */
. I7 n/ z' L: b8 J4 P DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: h) q( G& E \; P) |* J2 V& c
-1) y: b) z" M3 b
};. o7 v3 p+ b* H- d
4 i) t# D1 M! C* n
static struct gpio_led da850_evm_tl_leds[] = {# J' p0 u6 ? j7 K
{
. [( d6 O q6 F( y/ o2 y .active_low = 0,- A9 M, Z, C. r" Q n! e2 E
.gpio = DA850_USER_LED0," E/ Y; ^! z1 J) W
.name = "user_led0",
4 D, ~) ]# X# ^, S7 }0 g .default_trigger = "default-on",/ K5 A% s8 Y* J' ]; `* ]
},6 E# w F4 Q9 c# f7 y- K0 l4 C. U, R
{
) |$ W E, j) K6 j' G5 C. W .active_low = 0,
8 z! x' K( S; {3 S+ ? .gpio = DA850_USER_LED1,
8 G! d# i* Z% a6 v .name = "user_led1",
! H2 ] C% x1 Y; j .default_trigger = "default-on",5 L8 _; h9 F- W0 x4 ^
},
$ j2 A' I( M* N {* s, G) e; H- W4 n, V
.active_low = 0,7 A: o/ W; x) _
.gpio = DA850_USER_LED2,. ~# p5 ]# I6 J7 U. B7 @4 x' u
.name = "user_led2",
7 W7 Y ?6 p' ?% i" v. F .default_trigger = "default-on",
+ w. c- j4 u# S1 `' g7 Y8 v }," i, j3 m1 [ m# l% H
{
/ M1 f) i2 o/ C: Z .active_low = 0,
4 s( t' ]& U/ p, \# ] .gpio = DA850_USER_LED3,
- H$ D3 @# i8 b1 o) K- A .name = "user_led3",
4 s6 h8 [% Z' ^- L) P. g .default_trigger = "default-on",0 E( m8 X, e$ [7 Q+ \7 g& u6 R
},) C& d y, z/ h+ R. h. u+ Q
};- _2 B$ w9 Y& v) z# x
9 C. E& G6 M/ A. Wstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
2 B2 ^1 r7 N( \$ e' f: j" |) z$ T6 j .leds = da850_evm_tl_leds,8 y' \1 o0 F+ i* r. h" x, ~
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
" N5 u+ t- o" o4 O};
9 p% ]2 O: A+ f# w/ p/ U4 `. j4 G% o" v! i! U" C% v* D5 l
static void led_dev_release(struct device *dev)
: l1 e& u, \8 S{/ [9 u9 w) p9 D5 Q) v
};
0 k: @) w9 z& g3 C6 o N8 y- @/ j9 [6 y" H
static struct platform_device da850_evm_tl_leds_device = {
( e% A' j- S6 H7 A. [* A9 x- R .name = "leds-gpio",
' T1 }8 U% o4 G% O* w0 M T1 O3 ]: P .id = 1,
$ ]3 k9 I0 r0 z" c( j: V: }3 g1 M .dev = {- Q; p8 i8 u* v+ ?* i+ Y/ }
.platform_data = &da850_evm_tl_leds_pdata,
! Y2 U% ? v& T2 W8 o& R W R .release = led_dev_release,
" H# c- a( N p }% X4 Z2 a- a' Q7 X5 M' y0 S
};* h4 S+ X: F" w( f5 h4 b
M! K% a% m* \1 a5 }7 Pstatic int __init led_platform_init(void): g2 P" D! R n) ]6 U# b6 d3 \6 @
{
9 V& X0 s; K; u1 ~# O- N7 x int ret;
) X) d1 r4 y! k7 t6 N2 d#if 08 P5 D# H7 _' s! p! E
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); ~; D& t9 F/ a/ l
if (ret)' k- M Z$ G# Q @: P1 z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
( y# x2 s. w, b8 n' |' d5 w9 Q "%d\n", ret);
! U% ]# @9 r+ Y! P4 ~5 j7 S#endif
# r: O7 o+ h6 X9 v& l# @ ret = platform_device_register(&da850_evm_tl_leds_device);# W _# J. t- Q; y2 t/ t ?
if (ret)
4 C* l+ V) r/ ~8 q9 d pr_warning("Could not register som GPIO expander LEDS");2 j0 H2 M: X, C4 N1 y1 z- W6 c
else
- w' l) m1 h2 X O" c+ A4 y printk(KERN_INFO "LED register sucessful!\n");* k: O8 E: c5 e. `7 h9 e: a3 W* j
, T8 d* t! m. P
return ret;; b8 n" j7 V1 T) \ ^ c2 |
}
9 V" D% u- j6 i. Q2 b# E3 O9 R, j0 ^2 Y
static void __exit led_platform_exit(void)
) H$ W& b' p6 ]/ T. U8 ?3 l! l8 m{: K \$ @( t- z& ~
platform_device_unregister(&da850_evm_tl_leds_device);
- q0 u& p: k# ?+ R" G+ L1 T1 o; g l- ]! a1 Q2 k% n7 N& M
printk(KERN_INFO "LED unregister!\n");8 e8 e& t+ r) Y6 P
}) e H4 R7 @5 a, O* y
0 |! P4 A) P6 o" \6 ~. b2 h9 j: ? X
module_init(led_platform_init);% W6 Z7 q1 ?) i5 @3 o+ y
module_exit(led_platform_exit);
- W5 ?% A5 P, I# J* B2 [1 `. A9 U3 k- O+ k/ I1 G
MODULE_DESCRIPTION("Led platform driver");
6 u$ x7 L# x9 uMODULE_AUTHOR("Tronlong");7 i+ H, G8 ~/ ~" P+ R! M
MODULE_LICENSE("GPL");
\' O( e/ ~5 S: Q, s- m: Q) O( t8 w2 ?
|
|