|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 u8 ]- p& `6 d# h#include <linux/init.h>
! O3 Y+ m% v8 |#include <linux/module.h>
# g, z" k0 u$ N3 K! ~* s7 @#include <linux/kernel.h>
* D$ J$ E; P, k+ t) @+ ^, t$ |#include <linux/types.h>
0 {3 k, u5 b* r' G" B' n#include <linux/gpio.h>, S g; D: W0 ]8 a! Z
#include <linux/leds.h>
2 s7 t6 z* Z. u/ G- t4 G#include <linux/platform_device.h>7 s: a1 J5 X8 u/ o5 a0 F
5 P1 Z: ~) \6 {$ c( L$ `) v#include <asm/mach-types.h>
* }4 t6 D' ~3 m3 ?0 S#include <asm/mach/arch.h>
/ W5 X( Z& J+ ]5 F* b& Z3 q' F* a#include <mach/da8xx.h>
/ W- J) N0 P- l) L#include <mach/mux.h>
" q- z# k, {8 |- {( x3 U8 g* S' k8 U7 i$ M0 W
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
' M# M7 M+ Q$ A O! t#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
: ]* |. u: i! S0 F#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
+ p: W3 E5 X3 `#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). L. f0 [; k Y
' h2 d2 F0 F. }
/* assign the tl som board LED-GPIOs*/- {( z% S6 C' u% Q' |6 O; [
static const short da850_evm_tl_user_led_pins[] = {$ |" e* \) x$ e& ]3 X; x% Q
/* These pins are definition at <mach/mux.h> file */
) D4 B5 a5 V* ~6 y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 ^9 p g# y* Y5 q2 \ -1
9 \. D4 j$ y% Q" y* I1 d; L3 Y};) W) A$ ~6 @# e! |% ~" ~' Q0 n
: b8 q5 {& i& B6 t& v0 J0 Q9 X
static struct gpio_led da850_evm_tl_leds[] = {
8 J, u9 O4 j% s! ^ {
' h( {: w0 \( G1 L0 d .active_low = 0,
# Q. q4 Q- m5 [& D) I. W0 j5 b- j .gpio = DA850_USER_LED0,
6 I& `: }# }3 z; X0 D .name = "user_led0",
* N+ ]% X0 ~/ @9 T4 ^* m .default_trigger = "default-on",* C( K' x4 j8 _ k1 s# F: c
},
1 R! a( ?' j2 ^. S, h" D- Q {
# `0 d/ z1 `: I z& S' _ .active_low = 0,
J& g. ?( T) A% T' j q+ F& ] .gpio = DA850_USER_LED1,( Q' F6 z/ u3 B
.name = "user_led1",, e! ^% W0 h* L; v; u
.default_trigger = "default-on",1 [+ r1 R: _7 `1 u2 t
},
' g- X3 H# I9 o6 z# S( y {
4 n: p+ q* G8 R4 P .active_low = 0,( h- c* ^ Z- q% L# f4 Q# i. F, e
.gpio = DA850_USER_LED2,
; B' _" A1 _ [) r .name = "user_led2",9 I" c7 x* ?$ y- M+ h# ~
.default_trigger = "default-on",
% \/ d8 A$ T; _/ p' ? },7 m6 T0 P* Q( ]0 ^ f5 K+ Y
{
# d- x" ^1 q [8 z0 F .active_low = 0, }3 M5 ]' J6 `/ w" |
.gpio = DA850_USER_LED3,
; f0 X# r6 }" F) @- L( S! U3 E .name = "user_led3",& I) E; o1 g1 M. Q
.default_trigger = "default-on",
8 J8 G; `8 p2 l4 }, {9 d# H7 f" N! y },3 k$ j3 n6 @1 ]' C+ Q/ w
};1 R7 I5 P3 `) r) K/ Z8 u" K4 U
% H" M1 E. ~ z' {0 k# l( c& ~6 S
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
1 X" ?3 X9 X! m2 W; S! ^; { .leds = da850_evm_tl_leds,
5 z# d7 ~ k. `7 K7 m) W; P, J .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
: n( d4 X! w* {};) X2 }9 O8 o( Z4 t% o R+ z7 B
8 _5 j( E6 @* Vstatic void led_dev_release(struct device *dev). r7 y/ C2 q/ Z% d; t- | t& B4 l
{( y% t& M0 A0 Z
};8 x/ @' V7 w1 R
: n, _ r Q u9 L: U: v' Y, Y0 ~static struct platform_device da850_evm_tl_leds_device = {
: i7 U6 z+ y1 Y' }5 G1 |7 @9 D .name = "leds-gpio",( E X% ~8 J8 @7 x. J
.id = 1,( t- @4 Z( f, ]7 p8 d
.dev = {& R3 o+ O' m# F% b. Z4 G
.platform_data = &da850_evm_tl_leds_pdata,
% s1 p! Y" Q1 z' z# ` .release = led_dev_release,
@4 W, y( b, e+ @0 t. [ }
2 e, k7 D! f1 ] u}; y1 m* }8 H6 x3 p
5 ?7 ]( p: y! O" w0 F
static int __init led_platform_init(void)
+ F G7 U3 I/ [# x3 I) p) s( }{
3 z" [- L( `! m/ p int ret;
B( Y* s: h2 {( y7 `#if 0
: u/ l! K. `# O: ?/ O9 }* ? ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ R% {+ X$ i, N) N( M2 z4 j if (ret)
) D4 ~0 _* l" o+ u s pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 C- O4 f$ C3 T) l- {$ r
"%d\n", ret);# M$ {8 v0 ]2 N2 `% h* d
#endif
7 Q- y4 F/ k, v2 D7 h' K% d7 e ret = platform_device_register(&da850_evm_tl_leds_device);
% H; ?4 t2 a/ ?! p if (ret)
# ?0 }8 y* v7 z& w( O pr_warning("Could not register som GPIO expander LEDS");
* q+ R4 x, x- Z- w else
% t2 r8 \3 B& G' x printk(KERN_INFO "LED register sucessful!\n");
2 x. d; d; K7 ?8 C, ~. a( Y, {9 n& K
return ret;# ?* H% Y, k* U; `4 k' ~
}8 C+ O+ {( A4 O" U# J2 F
3 [) s; O4 B9 W; o) H& Mstatic void __exit led_platform_exit(void)1 o% @. G3 y! {
{
) J" v, E1 T, s, | platform_device_unregister(&da850_evm_tl_leds_device);
( [# \# Y2 S7 y, T' F: k+ o. u0 K2 [" M) B
printk(KERN_INFO "LED unregister!\n");
) z3 g# I/ v2 w* l" ]: Q}/ v" x2 N( N8 L8 [
, @' l Z1 ? i, v
module_init(led_platform_init);
3 B4 E/ D: h' v8 }4 Vmodule_exit(led_platform_exit);# g" \2 p4 B. z' D9 ~7 V
: ]% H' v5 \! P5 P5 ZMODULE_DESCRIPTION("Led platform driver");
8 M' v4 V1 b: oMODULE_AUTHOR("Tronlong");, L m4 F2 E' f
MODULE_LICENSE("GPL");+ ]8 A! L% U z& {
/ |- h2 E7 _! C( Q |
|