|
|
求大神给下面的程序做注解,请稍详细些,谢谢。) K# P4 X$ D' S3 b/ ~
#include <linux/init.h>! `+ t/ N/ G& e# Z6 N1 A/ }
#include <linux/module.h>, N+ D: F( l# s, L
#include <linux/kernel.h>6 }$ Y" `1 o8 u
#include <linux/types.h>: `8 v$ i8 B1 e6 _( o
#include <linux/gpio.h>7 l3 q4 R3 X2 v A& ]! X1 P3 h5 p2 C7 b* p
#include <linux/leds.h>
0 n3 U) p+ {9 b- U6 [8 [#include <linux/platform_device.h>8 j" ?6 J% h! |7 Z
1 j9 V% P' w' L2 n
#include <asm/mach-types.h>
' e6 `' h2 F3 q4 d: ?! `#include <asm/mach/arch.h>- a; w4 X5 a3 K' Y
#include <mach/da8xx.h>0 K- x/ \7 x9 c1 O! ]0 P5 C
#include <mach/mux.h>" s) \6 e# r0 r8 G
, @9 m8 {0 A1 y: T/ E
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)8 z! \/ S6 g7 }& f' Y. P
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 M& X! g# M1 J& D$ m. ]
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" q4 A& F! q. Y& X2 o1 f9 Y F |
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, \' l# w S/ C# F, N7 ^/ ^7 g/ { v2 Q4 A
/* assign the tl som board LED-GPIOs*/
$ A; q3 `9 R& Y6 U* _static const short da850_evm_tl_user_led_pins[] = {1 s- s% s; _% H- N; i# C
/* These pins are definition at <mach/mux.h> file */ K1 f$ ]' |% j' y) s
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, v( R0 n( D/ V! u5 d* z, k -15 @& x$ x( ?$ t4 N4 Y- g/ L
};! D5 c3 l6 x' B3 Z2 w+ a
; L3 ]' |3 x2 M( kstatic struct gpio_led da850_evm_tl_leds[] = {5 c. J2 Q& d) E$ c% J
{
/ a c+ X, j# G+ \ .active_low = 0,2 O3 g' K! P$ `9 e
.gpio = DA850_USER_LED0,
$ U" Y: l3 e2 c1 h* v .name = "user_led0",6 h+ t6 o) V+ ~
.default_trigger = "default-on",, o6 s0 ^, a, l
},
$ E, k) o# _3 v8 z2 Y {
' i% m7 u: m0 [$ R .active_low = 0,
$ C8 ~+ g2 E; _& ]8 Z0 R9 v0 h .gpio = DA850_USER_LED1,/ e2 E9 d6 F4 Z+ m. f0 E# ?
.name = "user_led1",
: D9 I, I5 ]; ] .default_trigger = "default-on",$ I1 z8 O: [* E$ A3 r) I% `
},& A' b' I# \1 m- w
{6 g, N- S3 ?4 A' e( G& l$ p) n9 ^
.active_low = 0,7 k( y7 K! {% A" v
.gpio = DA850_USER_LED2,% U# A5 e p5 q( T* B/ c) J
.name = "user_led2",$ B0 L1 S% l; S
.default_trigger = "default-on",
d7 S! V1 X: D b, ] },, e3 s+ B/ Z" L+ W) L
{
8 {6 V! d' h2 a/ ~# S# s$ o1 F .active_low = 0,7 P$ P4 a/ |/ k$ ^* @7 b/ O
.gpio = DA850_USER_LED3,6 c/ u0 b7 P5 C* q& D
.name = "user_led3",
4 C7 S# J% D9 L7 p' D6 Q7 g .default_trigger = "default-on",
' ^6 t5 a! M7 a7 |. q6 T* b },
8 s1 u9 D1 A! o};
* n; w, z3 C$ b1 q+ D7 q# H- I' `; D
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {. x8 e/ u: T; _" b' t
.leds = da850_evm_tl_leds,
( l( ~0 d$ k; U' V3 A( S& l2 h5 A: | .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 ?9 R2 S2 E, }8 _};! i" _- A0 f3 Z, z6 G7 }/ v% O. i9 i
1 J6 M; x5 \9 n& tstatic void led_dev_release(struct device *dev); R5 c% f; V8 O$ f
{
q$ x. p, W( O};0 y6 d+ `( r6 N. ^/ x" g
' g3 K2 w1 d9 E! C2 V8 @6 v3 ~ P4 Rstatic struct platform_device da850_evm_tl_leds_device = {
- _8 i" N8 m5 Y& \3 T6 ^ .name = "leds-gpio",
) H$ B0 A& O+ E0 N% x+ n5 I .id = 1,
m9 N9 f% W4 {* \; p- E .dev = {4 K0 b8 W0 R$ W; U7 [' c
.platform_data = &da850_evm_tl_leds_pdata,
. o% a0 @/ ?; D, A* N .release = led_dev_release,
- F- [$ _3 Q$ [ }) J7 e; t: g) B
};! u3 _! s' F! P( c6 s
! W5 R% x6 N6 kstatic int __init led_platform_init(void)9 H ]. y6 }) \ ]5 m
{
4 b" U: n, f$ t% V+ w& m# t! s int ret;
. L2 L. M O# z7 b5 f9 ~& l" p# m2 i#if 0
! e2 T e6 [/ c8 s8 ^/ T ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);+ K4 `9 P/ O4 L( X
if (ret)4 R4 L2 q( j* M2 o3 i5 \
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 _7 x3 ^5 S5 n, q+ \& l
"%d\n", ret);
! a) H* M1 q* C4 E#endif* }# y9 q6 J" R0 I
ret = platform_device_register(&da850_evm_tl_leds_device);
$ \# z3 U" Z3 {! [ if (ret)! V/ M4 L. T8 z d. Q% \3 [0 h
pr_warning("Could not register som GPIO expander LEDS");! n+ e- R5 b8 s
else9 K& k9 M1 z0 q* h
printk(KERN_INFO "LED register sucessful!\n");7 Q8 ]2 ]! H# h0 \
% K7 d8 w3 }8 B& ^+ B
return ret;
# I$ U' u& D+ n! i; P}
: b5 n1 _5 V5 L1 t1 g2 K. }3 e
& H/ _. B. v2 \9 Wstatic void __exit led_platform_exit(void): @+ E6 H, B% z' ?3 {2 W
{6 E0 Z3 X N+ r6 b
platform_device_unregister(&da850_evm_tl_leds_device);1 l' l8 G' _4 f4 Y) U8 q6 _/ M
; B/ i4 E) f1 P% H3 A, U
printk(KERN_INFO "LED unregister!\n");
% t) x% C7 Y1 J2 F6 _$ p}
% s, `/ Q9 ] B! `# e$ V1 c! {+ q2 ^8 |7 J8 I9 A
module_init(led_platform_init);
/ N' X& P& |/ m6 O6 \; \8 [6 R% wmodule_exit(led_platform_exit);! X7 ]. j; S% ?3 M2 L9 F. _
p& f3 Z' P( z6 {MODULE_DESCRIPTION("Led platform driver");! {6 R% r( U, |7 S$ M4 E- y
MODULE_AUTHOR("Tronlong");3 A- x3 F+ `% {5 L
MODULE_LICENSE("GPL");5 l% {( v+ o. p2 S8 |. O
r0 y7 R; D( m$ o" y1 Q |
|