|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
* ?5 }3 _) M5 @: f; T. E+ s#include <linux/init.h>) k& |9 v0 F9 n, \
#include <linux/module.h>
9 p' ^0 t2 }! G. J5 N% S#include <linux/kernel.h>. |: ^! Q, y* n; n: J7 h9 H) c5 C
#include <linux/types.h>
% T' ?* `! B% s; M# U6 c/ O#include <linux/gpio.h>
2 k- v# F6 {. I% p. ^/ r2 }' n4 z#include <linux/leds.h>
* M5 P/ s7 Z' P, U/ u#include <linux/platform_device.h>/ f& \; m; t( A/ ?& D; v8 n' E& s
9 ~6 P' R1 T y: N9 r5 N7 K% Q8 l9 F/ C
#include <asm/mach-types.h>
9 n5 q* R; h9 M# a9 H0 f#include <asm/mach/arch.h>) S2 l7 x+ c6 W. I' ]4 F c
#include <mach/da8xx.h>
) q. {/ L+ B6 l#include <mach/mux.h>! _; Y5 y2 e' N
; _" _; u7 @$ L1 w1 ?! F8 y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ Q6 n4 K6 m% K: l/ y# A. C* i5 ^
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- ~) K6 g# L( r' H! B1 h#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
/ G; c0 I$ y1 G1 M# s/ A8 N1 a#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
1 l$ ?! u6 i1 J- ~( j1 O/ ]0 Y$ G
/* assign the tl som board LED-GPIOs*/4 f: w! p; D I( }3 s; C0 i1 l5 {0 ]" s
static const short da850_evm_tl_user_led_pins[] = {! C$ i6 E; x" e
/* These pins are definition at <mach/mux.h> file */
$ t: N4 q( L! L) E5 t DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 B( x/ Y p5 Z0 i- b% u ]
-1
& ]5 t1 X7 f3 X};' A0 Z0 v; {' Z$ h, o$ S. b
% d; B& ]) r) {; i5 ]0 `static struct gpio_led da850_evm_tl_leds[] = {% d8 k; B9 f r7 i* \) h
{
9 ^+ ?( [3 U+ i$ w" v .active_low = 0,) C1 X4 v, l- A' e; Z
.gpio = DA850_USER_LED0,
0 k1 O) E9 ?" ? N5 U .name = "user_led0",- J3 Q8 J, I2 H6 |8 B; L6 i: V
.default_trigger = "default-on",
) R0 w8 f& i, }! q9 U },
# W4 S. z; y, F# Z' [+ | {' K, R! X5 Y% [
.active_low = 0,
$ Z2 L- N5 f6 G6 e4 V, f$ E! S* G- ~ .gpio = DA850_USER_LED1,
6 I3 A: d% @9 ^ .name = "user_led1",( f6 o% S0 @( B
.default_trigger = "default-on",
+ q5 ^9 ~- u9 k- D+ ] },9 q% M9 \4 r/ c, h7 n
{
9 Y3 e% H3 S# [2 n .active_low = 0,
' M2 I/ O$ @6 @8 { .gpio = DA850_USER_LED2,
0 O% Q4 z# n# k .name = "user_led2",4 |6 ?4 n7 h8 c" \! f
.default_trigger = "default-on",. R5 X; u. j0 C2 P7 M+ B
},+ [" O$ {, _* ]/ ]. J8 `0 \
{) ]- d1 R! [7 T" Z
.active_low = 0, y! w. B! P# P. m0 N# T' k
.gpio = DA850_USER_LED3,
, w: q% j* P+ k. f5 `5 ` .name = "user_led3",( S# M' V: Z Z
.default_trigger = "default-on",
1 ^& J; \+ w4 z9 P. u },
# ?8 E3 Y+ k" O% w};6 @9 z6 A" p( w6 [( Q6 ]
) C+ E3 V. ]0 y, `+ k( o
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( v9 \* J8 t. B6 E% } .leds = da850_evm_tl_leds,
: ?! k/ g9 V, r9 U- G. x2 C .num_leds = ARRAY_SIZE(da850_evm_tl_leds),* K' _! B* f% Z
};
) B3 f% W. U) f- N6 V
+ D3 S; C' N# f5 estatic void led_dev_release(struct device *dev)
8 C0 C' l6 @' Y* m/ x{" k5 r9 {1 N7 }1 t7 Z7 F
};
! p# m3 Y" ?' P X. Z0 I5 Y' k9 J3 K0 v$ A0 r8 h
static struct platform_device da850_evm_tl_leds_device = {+ b+ c, O! j, m2 T3 a
.name = "leds-gpio",
$ T! r+ K, h% p .id = 1,
& h" M$ m6 \* [6 [. y* m+ V .dev = {* C6 m2 u: y: {( ]1 y- M
.platform_data = &da850_evm_tl_leds_pdata,
4 u( r# l% ? j! |. P0 ~6 X .release = led_dev_release,
- b/ p( F3 U; S/ n2 S }
5 e% p4 S6 [+ @! P};$ J% ?* J" m( a) g! d% e( g/ Y
4 u/ K0 S+ i8 T5 }8 v
static int __init led_platform_init(void)
2 }* H/ C0 a |1 ]3 f0 R{* | N, [9 P& [2 _4 Y6 v
int ret;5 K; l( U5 W! C# h# ^
#if 0
+ |6 J; k; x% `/ Q& { ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);% o4 @+ p. I% f# s7 L6 o
if (ret)
6 \5 L5 r: g6 [8 ` pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ J1 U# m) u D% @3 R
"%d\n", ret);; i3 N5 @! y& f/ s- z+ f
#endif( A* C. r6 }5 ~% Z8 x
ret = platform_device_register(&da850_evm_tl_leds_device);/ q7 @4 r/ o. A0 K
if (ret)
" T) m; G2 g6 c: ^6 y; ~ pr_warning("Could not register som GPIO expander LEDS");
) ` c( m: t4 v, ` else5 f: D# F) r' W- E2 w+ c. y' s, L% v
printk(KERN_INFO "LED register sucessful!\n");& |- Z- t. H5 w' W
& \' G) t' i8 X2 C( v! m+ ?2 F1 a
return ret;
; M/ {, ^! d7 y; { R3 {}7 d7 S% R! Q: l$ ^6 k
$ N, J) w& J4 P0 ~) Astatic void __exit led_platform_exit(void)
% I# U1 U7 x) q/ [{, ~9 k( W7 A5 r/ s/ p( }( X) s
platform_device_unregister(&da850_evm_tl_leds_device);
' h9 d" C) N# E" v0 H: z+ b
/ c: w8 t( C; e3 f8 X8 u printk(KERN_INFO "LED unregister!\n");/ k7 x; `# _" j
}8 @. s, u v: @- S
- p0 o9 H) v( A# F- ]module_init(led_platform_init);
4 a) \( @# y2 y1 {' Pmodule_exit(led_platform_exit);3 S+ z$ j1 U/ l- {
/ J+ @* i4 G; A" e. a* Q
MODULE_DESCRIPTION("Led platform driver");
( Q( \$ |" G/ x& }, b9 m4 G% \MODULE_AUTHOR("Tronlong");
4 m& W3 x' G& T% V9 S7 NMODULE_LICENSE("GPL");& p- N- P9 C' _$ u3 N- O& I9 x3 r
2 k V6 r% Z. t
|
|