|
|
求大神给下面的程序做注解,请稍详细些,谢谢。- m9 v, n( W! m- Z# Z( t( z# k
#include <linux/init.h>6 w. t% p# X9 g( e- ^8 w+ u8 C
#include <linux/module.h>
Y; X7 G( P( C; J" t7 F#include <linux/kernel.h>1 N" g, h0 ^! X, m* x
#include <linux/types.h>" c) |' m* d4 E
#include <linux/gpio.h>
_0 x8 e2 o5 \+ S#include <linux/leds.h>
' y8 }. S8 q |0 O! T#include <linux/platform_device.h>
4 H3 ]4 g) d/ Y: t O# x% ~9 S) x) n
#include <asm/mach-types.h>8 k" Q3 D0 h! ]
#include <asm/mach/arch.h>- w& M) }/ }1 g0 @
#include <mach/da8xx.h>8 k( Z7 \5 e' _' @; V# A& L
#include <mach/mux.h>7 [. `" R1 Y M
# I% K5 n3 v4 j' j* z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& }& k& m; [5 A. ]- R2 C, J
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)& v* h( S9 W" |8 X
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& x( F) |" m( [) T0 Q6 Q, b
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' p7 m2 `2 z0 d' o# `& v2 p8 |8 \" B
/* assign the tl som board LED-GPIOs*/
- L( r* D# d$ b- P; r1 o3 v4 wstatic const short da850_evm_tl_user_led_pins[] = {4 [: p2 t' W& U$ }& x( G
/* These pins are definition at <mach/mux.h> file */
* [3 ?! _6 Z7 n2 ]- X DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* E; Y/ E2 ]& h% X/ Y
-1# H+ _" l5 e: V' j& {
};( B L: y, Q$ W) j8 d. ?
/ E; l& N) ~9 D5 f0 h8 o
static struct gpio_led da850_evm_tl_leds[] = {8 x# L& \( j8 y4 z# o! ~/ k
{3 D# }2 z& h/ |/ Q% r, I6 R
.active_low = 0,: r8 N/ l# Y4 s1 | `7 B
.gpio = DA850_USER_LED0,
4 |! U$ Q3 G' q ~ O .name = "user_led0",
3 _( j5 O3 a5 C1 L: | .default_trigger = "default-on",
8 {9 g2 ^8 m5 U y; o) P# j! Z },
1 D% D- ^. e! @. D. J+ | {. S) \2 j+ v: j6 C% x7 v
.active_low = 0,
3 e7 Q W" G( E y' | .gpio = DA850_USER_LED1,/ q" m6 A/ A& s5 S. T- |" R
.name = "user_led1",6 h* {# h: w0 N
.default_trigger = "default-on",$ y( @& H, `, a2 S6 ?' N5 ?1 `
},
- r& K/ e/ h/ N6 Y4 }" [& W' e, I {! W6 N4 _& O7 I% {5 T0 b
.active_low = 0,
! v) j9 v7 a0 P( L .gpio = DA850_USER_LED2,5 ^; f& {3 I' D/ k
.name = "user_led2",! w! ^) H: Q7 G( O) Q M! d
.default_trigger = "default-on",
! O% ^6 ~! d: c6 i- \/ ?; _+ s. F5 B$ t },0 H+ `: N/ R3 @5 Y# i" C
{
7 d5 \! q8 p- O3 C/ X; j .active_low = 0,
`' m) x9 T$ I4 P. \3 e! E .gpio = DA850_USER_LED3,6 q$ u" C K5 a6 u' b# D
.name = "user_led3",
- s/ x3 \: z; b& b .default_trigger = "default-on",6 _& W/ K1 ^" M; a3 J) m
},2 D, m5 v3 f- y, I9 N7 Q$ ~
};" ~& S/ o9 `( g2 P' B: X
: V2 m+ P0 B) z4 r$ |1 m2 xstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 {! l! `& `: J& `
.leds = da850_evm_tl_leds,
/ a Q# O) p8 x$ p .num_leds = ARRAY_SIZE(da850_evm_tl_leds), H- d8 I) G! y! ]
};( y2 r$ b% a; W' L" }
$ s, |; ^9 I* P4 m; X- ]$ M- p
static void led_dev_release(struct device *dev)5 L/ Z' A. H e6 ~
{" z% L1 P2 {( L6 h& E+ i: C
};
2 T. F- M! s u/ @8 _1 h% ?: u& s5 }# t
static struct platform_device da850_evm_tl_leds_device = {
" R F4 b+ `7 e .name = "leds-gpio",
' k5 P- }# w2 ]) Q6 T* X .id = 1,* A# w9 r# D0 G! h5 g$ J1 y: d
.dev = {
/ g& l4 X. V! D4 _1 p8 K% V .platform_data = &da850_evm_tl_leds_pdata,( j$ Y8 M- \# ]& h3 Y" B* g
.release = led_dev_release,
9 \9 H9 u, A% P: U0 q5 }& F! E }1 N( \( N- a4 L1 {/ R$ v
};) t( v5 }/ H% b4 C" r2 a
) p9 w1 Y" U; r2 Ustatic int __init led_platform_init(void)6 ?* F4 _& ~( J$ w; f1 }4 B
{; V/ v, `. M5 y: D/ p! L. f
int ret;0 T* v( B }# Q$ Q: T {. \
#if 0
4 D% g2 ]0 s% ^4 Z% Z! W! o ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);- @' c6 V8 X$ T$ y6 I
if (ret)
9 _9 T( P- a* s( W+ c' Y pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; H8 E3 Y2 H$ O$ W "%d\n", ret);3 S( }* K p( ~4 f7 ^
#endif/ F w5 w6 d e3 P6 S# k4 u/ O
ret = platform_device_register(&da850_evm_tl_leds_device);( H e1 @+ u# a" |. U' [6 U
if (ret); v( f1 w# U: R5 k
pr_warning("Could not register som GPIO expander LEDS");* l2 b: l+ g9 g: l- F# Q# _) Z9 J2 d( l
else+ x8 y/ t3 d4 H7 ~
printk(KERN_INFO "LED register sucessful!\n");4 ]- ~4 O% |& M2 G0 y% n* u7 M
; K6 e t6 l8 O return ret;$ J( n0 l. c Q7 Y) P
}
/ G' M5 y; j: Q& m% T: h) R, b4 O- n, x$ J5 q( S4 l8 c D
static void __exit led_platform_exit(void)
- D* k5 _$ G. F: U# q6 b- I9 Q{
+ s' v$ x) q* u6 e7 q& C" ` platform_device_unregister(&da850_evm_tl_leds_device);
& H2 N7 u8 j' R4 d7 F1 ~; Y: v, j: |9 n S) a8 E B2 v
printk(KERN_INFO "LED unregister!\n");/ [( C V0 O0 d( f0 _' C5 v/ H& k
}
6 J1 o2 Y" _+ `$ h v# E* q3 q
module_init(led_platform_init);( Z+ ?& N; l. d/ C! C/ \
module_exit(led_platform_exit);
0 `6 m$ v/ {( F, U- Z
' _7 |, e5 X2 b0 ~# B7 D% YMODULE_DESCRIPTION("Led platform driver");
' ?* G7 W) t4 V: S% IMODULE_AUTHOR("Tronlong");
% a' o3 |1 l) a, |# b! k5 h( uMODULE_LICENSE("GPL");, t! Z$ f1 r* P4 ?# g0 Y, T+ r
: r; z' Z: y4 G$ n5 n0 q |
|