|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ s0 j. w0 c) b#include <linux/init.h>
5 g7 k" }2 V' w6 O#include <linux/module.h>
& W% C% g; x" U9 F8 U0 j! P#include <linux/kernel.h>( N. y( ^: L+ u3 ^1 S8 N0 K
#include <linux/types.h>1 x, O% J! e) H j# o1 T
#include <linux/gpio.h>' [& }. |- Z7 E/ Z/ {# H# ?# G
#include <linux/leds.h>- z! B2 ]8 A4 j8 P- p; f. v
#include <linux/platform_device.h>
& V# G8 q7 T% H' F p; O8 R% o8 T+ \0 u# z/ q+ O L0 s
#include <asm/mach-types.h>& P& k) v+ g8 k
#include <asm/mach/arch.h>5 H' b( K. X* i1 w& v
#include <mach/da8xx.h>
5 J6 z9 a! M6 d, p; }! D/ Y#include <mach/mux.h>! n+ f0 G. r* v
2 T' |- H6 l" [6 i# { k
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- u3 N6 m5 m1 b! `
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! M3 f' Q; ~8 A/ c+ {
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& }, ^ ]" W4 `
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ E( c) U" F0 f2 _/ R
: n+ z i+ n1 ^* r1 f
/* assign the tl som board LED-GPIOs*/
. `% L/ b8 Q' gstatic const short da850_evm_tl_user_led_pins[] = {* W9 o: O& U0 K& y1 W V
/* These pins are definition at <mach/mux.h> file */& l7 {" T) N6 E* ^3 I& h* _* o
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
; W) U& z4 [0 J$ @/ m; K, C -1
7 v9 \& n3 }/ {; U: k" ?. v3 M};! h" ^$ ?' @0 c$ S
: N+ ]1 u! _9 H/ r# Wstatic struct gpio_led da850_evm_tl_leds[] = {4 Q$ Q4 }5 i" f/ D
{
5 C' w3 q; Q/ x .active_low = 0,
9 W0 u' X+ c8 R$ ~9 L .gpio = DA850_USER_LED0,
- v) d. e8 u% k9 s .name = "user_led0",
: e& E0 q7 m) M1 A .default_trigger = "default-on",4 p8 W, x- B7 t: u! F' L) n; s4 n
},
3 Y. `4 { Z' h8 E+ W, @- j9 p {
/ a& s# X9 W. H* [* e0 V .active_low = 0,
7 o; w" t% H/ V .gpio = DA850_USER_LED1,( q; v8 U' s" a0 i
.name = "user_led1",
' B, b$ j9 r) k$ v9 Q8 v .default_trigger = "default-on",
3 z( p# S) x" [4 r7 v5 }6 l* ` },
3 [% J T: d4 [. A {
, D) }& p" c, B# q$ |! c .active_low = 0,4 B8 v1 y' W# }! h2 U- Z- p7 z
.gpio = DA850_USER_LED2,) W K p, N' S: V" S- I& t
.name = "user_led2",
3 \) i8 q* M8 c .default_trigger = "default-on", i' k" N, O! P, ~( H
},3 g3 t9 B4 D+ O# l' h6 C- r9 l% {
{
6 e* ^8 e4 q" k% |. |/ R) e .active_low = 0,* |% K& i6 y% H! W& N9 o' l5 G
.gpio = DA850_USER_LED3,, l; W( }( p4 t& p0 d2 S
.name = "user_led3",
# k9 }( F# y7 E, g .default_trigger = "default-on",2 ]2 y& h7 ?) d& E
},$ M C+ q" P' ~+ ^5 p) n
};+ V j1 e) Q5 Z. V% m6 x$ r4 d; J/ [1 q
" P8 _) e5 W- P, H, d- K3 x; I
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {! A8 w+ e6 P! e
.leds = da850_evm_tl_leds,
+ Y8 x2 r- j. q Q9 I# x4 S3 V& D .num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 h9 a9 r: u: t2 k
};4 h2 H9 q0 a z: Y& i. b: x0 r9 W
2 n& h# l( r1 V& ?! z2 a. \static void led_dev_release(struct device *dev)
' Y' [( u9 U. M) \) j a{
8 c' p1 V+ {& H$ O G" y( l};( P S' H) E8 a' k# K, ^: J
' a+ K9 Y7 x/ u! c0 T0 t/ c
static struct platform_device da850_evm_tl_leds_device = {# B! C' b; _9 k; F
.name = "leds-gpio",
, r5 V, V2 f6 f. H0 k .id = 1,
: q5 `; _% a# ^9 H% B% u& ~ .dev = {
' b3 E8 T% J5 k0 r) L1 V .platform_data = &da850_evm_tl_leds_pdata,% d, S+ R& p* t0 E3 H+ F& R
.release = led_dev_release,* n+ ? {7 m4 M: i f0 Q$ `6 Z
}* u) G! V) Y! {0 r/ x
};
; h. c0 U' j4 X; g, t4 K+ M f1 ~" i$ [
static int __init led_platform_init(void)( b) J$ y9 G. q$ @( F8 O
{
1 t1 H/ u4 i% i; ^ P% F; @* e: a int ret;- Z- {* R. Y+ c
#if 04 @/ Z% B5 H! g0 E" m
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
5 P( w7 @% x- e9 E) J' \+ L7 z% l if (ret)3 @, \, Y) S! d0 h9 A
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# x2 N+ p2 O6 R4 C
"%d\n", ret);; n. W# O7 o% Z/ C9 S/ `/ u
#endif) x/ s8 k3 `* c' G
ret = platform_device_register(&da850_evm_tl_leds_device);7 ?. S5 \% I" A
if (ret)! @- c- L. Q; ~# Z' I1 p; e
pr_warning("Could not register som GPIO expander LEDS");
" B; k5 I! y% [9 F3 Z& P/ A# \ else. y. s: P; Y7 N$ q
printk(KERN_INFO "LED register sucessful!\n");$ p/ {6 b( }& [, K1 {, Y! k
( N. k1 x" t& W1 q return ret;1 }5 B0 |" t5 }8 e
}' `. [# h7 I# Z/ u
6 V) X# U: q* ^! O. } N( Tstatic void __exit led_platform_exit(void)
- R* d0 \% ^0 j4 u+ W{
* E/ a0 K+ \% E2 a- N platform_device_unregister(&da850_evm_tl_leds_device);
7 c9 d- d2 e# u/ n2 A$ C! z1 a( C1 O' g9 E3 G0 i
printk(KERN_INFO "LED unregister!\n"); P3 K8 w: L% U7 b& S
}* W, Y( ]; \* z- | i! p8 P3 b7 ?6 ]
9 N! k2 b' Q" @, B* t, l$ @# }
module_init(led_platform_init);; H8 T ?4 C6 R, m- ~# D, m
module_exit(led_platform_exit);( w# ~* i7 @" I0 `
4 W% j! L4 n7 ]7 {1 w& a) e4 Z
MODULE_DESCRIPTION("Led platform driver");
1 A7 I5 J* _9 S7 n; xMODULE_AUTHOR("Tronlong");
, |# l, d J, r% c" vMODULE_LICENSE("GPL");
+ l/ T% Z& l' e' {( p* }
! y# }/ E# _! K% l( I& H |
|