|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ O7 Y6 u: _& A7 Y6 e# {: j* q
#include <linux/init.h>
+ N: I" N' W" ?2 q#include <linux/module.h>
4 t2 |& z. ~# L#include <linux/kernel.h>+ a1 u, f$ k- L5 T# [* T$ l
#include <linux/types.h>
' _8 n; {( p% b2 Y) G#include <linux/gpio.h>
; |; G' ~' W# O D. j1 Z8 r3 J/ S#include <linux/leds.h>
1 S0 w. T/ o& V, E. A* m#include <linux/platform_device.h>
8 m2 u" M7 p' f) z6 F' m- g2 p( @3 Q, L1 ^4 ~4 U+ \
#include <asm/mach-types.h>& I6 k4 c6 l5 e
#include <asm/mach/arch.h>. d3 E4 m4 j8 |3 R- _
#include <mach/da8xx.h>8 `+ a+ [1 L: U
#include <mach/mux.h>
* M' p' e4 N' u! x4 ?# {% ?1 @
5 I5 n$ o6 f; Y- G% `3 }5 Y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 p) [: v+ }) _1 J
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' o4 A9 v* L! v& Y- F2 P#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" ~, z$ A* \1 h9 d
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 R5 ]6 m4 y6 M5 U3 p5 F* M T" D+ A1 b2 B8 g4 i6 d1 _* }5 Q
/* assign the tl som board LED-GPIOs*/% W0 b9 M& P( Y' s- h4 r# a3 [
static const short da850_evm_tl_user_led_pins[] = {
' O7 b2 P) Y4 n7 J l8 f /* These pins are definition at <mach/mux.h> file */
/ G% L$ @( c |- ]! L$ T DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* q9 b# H3 r: Z0 _# ^# q; O& }) X
-1
) w7 V B9 h0 A+ R, L, X& G" u};4 z/ P! ^4 z. `5 r
- B( Z3 a0 f6 ~( h/ \& g% Lstatic struct gpio_led da850_evm_tl_leds[] = {
% k( d. ]& x0 L# B4 G: ` {$ p+ U* ?% e O! V
.active_low = 0,4 o; o( v5 m& w/ z) @
.gpio = DA850_USER_LED0,
6 h- M1 R3 ~3 Q3 N' G9 [+ \ .name = "user_led0",
( v. t6 {' z% U$ @( y .default_trigger = "default-on",. h8 @/ R( {9 n' f2 B J9 d7 D
},9 R2 r: O$ ?4 r6 Z C C, G
{& j9 X! g; K: |" V' Q! p
.active_low = 0,
( I7 }* j+ S2 q: M& q .gpio = DA850_USER_LED1,
" e; | W# l6 b6 R. O .name = "user_led1",6 K, ]5 s% P. z* w4 C% m% M- q
.default_trigger = "default-on",4 Q+ j: J7 D) l9 H7 K) b; j/ T. c
},* ], V- |9 ^+ H
{
5 L& p; m3 [7 b/ u6 B$ v1 @7 z/ r .active_low = 0,5 |! S: x3 _; z: x
.gpio = DA850_USER_LED2,5 S* q! W$ A$ O9 ^6 m
.name = "user_led2",
U! V0 f0 U1 u0 \0 O, B .default_trigger = "default-on",
; |. s3 f* s. d4 B& @; t }, g6 F% ^* w, F- f/ C
{/ s/ G" [% E0 [6 {# O
.active_low = 0,
9 P ^, c" }& e* f+ X) b6 l' ^ .gpio = DA850_USER_LED3,
# @# T. x: i$ i e! V& h7 ` .name = "user_led3",3 P4 F, w: h4 _" T4 M
.default_trigger = "default-on",# n0 x0 ~9 s% \) b( l: Q6 l6 }
}, u3 a( J: b% P" P
};) c8 O6 f$ J5 @% D! G/ s4 x
8 B- v7 L+ A4 B
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, ~2 H1 _0 v5 _# U .leds = da850_evm_tl_leds,
$ _$ {7 [( X- U) z% G) ` n .num_leds = ARRAY_SIZE(da850_evm_tl_leds),- v* J ]" f+ I) X) }4 }
};6 F2 r- [8 @+ c5 ^9 V
n9 |# e4 @/ r! k, x6 S t% H. e
static void led_dev_release(struct device *dev)7 f Z+ I6 Q) f% d
{2 C% D1 y* a5 f
};: D! r1 j; s. d! m
& ~4 }' h. {* i9 ]9 D( k7 bstatic struct platform_device da850_evm_tl_leds_device = {
. E9 I* k: V1 {# a' Y2 E0 u; h$ W .name = "leds-gpio",% ?: z- j+ L" o$ P+ P
.id = 1,( h$ T% m1 q+ Y) n
.dev = {& J- K! }9 G( u$ X5 E; k g/ T5 y
.platform_data = &da850_evm_tl_leds_pdata,
) D- v& C' M9 t- M .release = led_dev_release,
# d/ K% g' Q/ g, y }7 a4 ~& a% s# i6 X4 f
};
' \) d: h& ^. ]$ ]. l; B S1 l7 C7 _' b
static int __init led_platform_init(void)
8 P" {7 X" b' k. b% o" D{6 J& r2 X! f3 g: Z9 X# @% O
int ret;
# b6 X" T/ C$ W7 y2 c" M9 A#if 0
9 u0 F, H& i& q6 @ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) L. M9 u4 M. f* j' x if (ret)5 h9 P0 Z- k% @+ {' V+ x- z" i1 S
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* D- B# l5 x+ v! Z* d/ S$ c1 J
"%d\n", ret);( j* y/ q5 o3 f
#endif
/ ~ J) S" b& C0 F3 {* M h ret = platform_device_register(&da850_evm_tl_leds_device);* w% R3 D8 y' M5 j# A% l
if (ret)& t) r9 O- G' I; i; l/ Y7 M i
pr_warning("Could not register som GPIO expander LEDS");7 ]# v) @) O. F1 } _
else
4 t+ @# c0 \ j* y printk(KERN_INFO "LED register sucessful!\n");1 D! V" y0 I7 h
# i# s0 G# @" x. |4 v/ k
return ret;! X- Z' |8 F4 p' C: ]3 ?+ p
}
: _- v3 i4 M9 ^) ]0 A# p. X) M0 Q5 Q/ _
static void __exit led_platform_exit(void)1 N& |* Y$ k! N2 x5 L. @. G, ^' X
{
r9 H9 L8 |+ t% P* ]1 o5 { platform_device_unregister(&da850_evm_tl_leds_device);- Y2 X4 f* z) l# [/ l" W
# [- f4 @) j8 N0 n4 |' b3 j
printk(KERN_INFO "LED unregister!\n");( _/ o' b9 o1 q* m
}
e. I1 T3 a% B: n" }. p3 H, a1 |3 H' u
module_init(led_platform_init);. D% r$ h$ r- o6 |, q: w
module_exit(led_platform_exit);
' |+ q% R9 v8 c5 H, f7 m# l! W
2 S: q4 b) O# h( ~! @MODULE_DESCRIPTION("Led platform driver");
4 O) @* L- e! t2 |3 ]MODULE_AUTHOR("Tronlong");0 P' w$ U& u2 ^
MODULE_LICENSE("GPL");
~3 C; q- e+ D2 N3 [9 [4 v: p% r4 C$ ^" U. C( o
|
|