|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) Q/ s5 ?; y( d4 ]5 b9 G4 k
#include <linux/init.h>
4 s# u9 O `1 o* U#include <linux/module.h>
1 O# d: ^& e0 Y0 `/ x1 h- c a#include <linux/kernel.h>+ ^' m6 C0 y6 V# U) ]
#include <linux/types.h>
' F. o. C# Z) l0 H#include <linux/gpio.h>/ h& W5 ^) b2 B, g Z& T! P
#include <linux/leds.h>
- H9 q. |" L+ L8 w' F#include <linux/platform_device.h>' x B. }- p* ]: r- R, O$ g
9 a" N$ h# i, s( B5 C4 E) y#include <asm/mach-types.h>, i4 e6 }6 f/ q- m3 h/ m P
#include <asm/mach/arch.h>
& U+ E+ |' k& h( F- o#include <mach/da8xx.h>
5 ^; @# q3 l8 i8 c, `#include <mach/mux.h>+ T- }, Q. v, @2 Q2 m
; w! u7 v9 S) X- z; h6 [# f
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
* v0 N4 z8 b6 t0 ~, S#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 q! k2 X h# Y
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)2 C+ ^. w" S5 \. R) t# b" C
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 a l n7 ~- e' M
3 D6 I {% ?2 S4 l2 [* s
/* assign the tl som board LED-GPIOs*/
/ U% Q" `5 O# p$ ?6 Xstatic const short da850_evm_tl_user_led_pins[] = {
Z }* y0 N9 }' C8 G0 P' B2 y# s# [ /* These pins are definition at <mach/mux.h> file */, Y' T, ?5 i" ]% m8 x' O5 A: { ]7 ^
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 i9 I c! v( I W' e1 i
-1
5 \# B! b. v, s" M) \+ J1 g6 I};, P/ @: |+ l5 j: F) M# R9 l
/ m! T, R" u; |
static struct gpio_led da850_evm_tl_leds[] = {7 g% m3 W+ g* {+ ^
{4 r4 u" O, ~9 B3 b
.active_low = 0,
# \% u% Q. Y2 @) A .gpio = DA850_USER_LED0,
& ^ } n6 k7 s2 o5 J .name = "user_led0",
$ H4 B! w8 U$ W1 k .default_trigger = "default-on",
9 @& K3 z1 W4 q! f },! o, x) x R* r: w1 A2 q1 H- J) P
{! C" D8 M* | A8 M) z# o
.active_low = 0," v u6 v: _$ q5 ]7 h+ N0 {6 g
.gpio = DA850_USER_LED1,
9 M8 q1 L7 A( o1 f6 o" j# D .name = "user_led1",
% ` S2 G2 H& |5 Y5 ~+ ^# o) s# G .default_trigger = "default-on",. h' Y3 C7 o7 q6 S- n" g
},' h4 w; {4 P3 A; ?' i5 ]7 L
{
9 X; t- _9 |$ I .active_low = 0,
2 P! e, |0 M$ ^9 F/ o$ P .gpio = DA850_USER_LED2,4 n$ X+ Z0 l# ?6 w( M
.name = "user_led2",
q* `7 F' G, u .default_trigger = "default-on",
2 E& E r! v) @# g+ M },
. }+ P: P' M+ l/ t {
! H. |, u ~% x- }0 d8 ? .active_low = 0,1 x- t* U1 J4 N% A8 C
.gpio = DA850_USER_LED3," \4 C' _& P& n: g
.name = "user_led3",( K8 ?6 k w. @2 A' V3 R9 c9 O
.default_trigger = "default-on",& N5 c7 R: o3 r1 a P
},) {" @3 N# n1 }, p
};
6 m' }, c: x2 P" `& A2 j; W/ h9 l* \, I7 @2 e7 y4 V" w6 A
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 d6 d3 F5 Y' ]* Z .leds = da850_evm_tl_leds,
$ Y6 N* H$ E( C1 { .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
! M5 O& g- ]4 i- {, Z; A: @};0 `- N, [. T( I. R
# l" ]9 ^7 U: c! u
static void led_dev_release(struct device *dev)5 F: G+ C# h( {: y" v
{8 F" s( B. u X' |+ c0 E8 @
};* C6 y0 c; c% l+ L5 H0 y7 n1 ]
$ \/ p, y! b* k3 v2 Y xstatic struct platform_device da850_evm_tl_leds_device = {
* U8 q `! S; ~% t1 A .name = "leds-gpio",
Q: ^$ o3 G5 m$ ]! B0 y& e .id = 1,7 y: |. h- R% E7 E6 E
.dev = {4 n* Y! g& [/ ~" x2 e0 w) `& s
.platform_data = &da850_evm_tl_leds_pdata,/ i' d( X" |& ^3 J- f+ a
.release = led_dev_release,; Q5 t( K: W) s9 Z
}
- ]4 a' e; x% l. z& e};
" T' S! ?* F6 i) Q+ J6 s4 t R% f, |: `$ T3 e+ ^" F) {# K
static int __init led_platform_init(void)* _# H+ u7 C; |
{
. Z" g8 M. _3 Y7 l6 s! T int ret;
% S) L; {2 y* P8 _5 D$ b; j#if 0
: D8 c4 |$ W% |- y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( ^* w+ u x3 s if (ret)
c5 a8 ^8 \4 \4 B( A# A/ i pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 l5 ~% W ]) k
"%d\n", ret);% n* F% J! L; e0 o1 b: ^. ^
#endif' y* \ A* o7 P% ?
ret = platform_device_register(&da850_evm_tl_leds_device);( s" |% a6 ]. Q
if (ret)
1 e4 x) R( I* W9 h; b- T0 E6 h pr_warning("Could not register som GPIO expander LEDS");
7 ]. z+ G! M9 w8 ~ else$ w9 A# H* J' G! h
printk(KERN_INFO "LED register sucessful!\n");
. v5 s; v, U7 y6 i" w/ \$ n" ^: G) D; K' \
return ret;% S! e: T$ s+ V
}
, q; X: `# V" ^0 M% |8 j! y5 G
static void __exit led_platform_exit(void)
6 `7 U9 K) v) ~" l{
% {3 f9 d4 x. R) a2 H: S platform_device_unregister(&da850_evm_tl_leds_device);
# k5 A6 u$ E, h7 q" M# ?* m
, B0 r ]' C1 l6 S0 g printk(KERN_INFO "LED unregister!\n");8 `- v* B" L ~7 C7 }. b) p2 G B4 n
}
" J6 `# I. k1 P+ s% R# g3 a
+ _! H, D: @" [module_init(led_platform_init);
( d, C' E0 a4 }% zmodule_exit(led_platform_exit);
0 f4 k4 b. ~, B2 b# |1 }4 b5 T6 {4 l( [3 D
MODULE_DESCRIPTION("Led platform driver");8 r# n; N' a( B1 X
MODULE_AUTHOR("Tronlong");$ T+ t: \% M0 z+ H
MODULE_LICENSE("GPL");. m0 f# k. a L' H- Q
& I' j# l- h" x; m4 p- X& w7 X
|
|