|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! G) v# k. |0 C c#include <linux/init.h>4 u0 G: t" Q! g; [5 W9 @+ F1 W) T
#include <linux/module.h>6 C! y9 ?% `4 b# g/ Y
#include <linux/kernel.h>, x8 g8 O1 A* N d9 d- a3 B4 F
#include <linux/types.h>
- W9 _: v; m9 r1 D* R% p7 T2 x#include <linux/gpio.h>' Z2 A; l- u. q+ O2 k
#include <linux/leds.h>% Z( m' X# O: [/ R# x% ^* M
#include <linux/platform_device.h>3 M& x+ ~% M: J+ F
+ _; `1 \, W" @#include <asm/mach-types.h>" h, j1 d( H& A" w9 I) g7 f8 h
#include <asm/mach/arch.h>& G. I- q2 M; O/ G3 I: T
#include <mach/da8xx.h>
9 O* F/ n/ ]7 r- v% I t#include <mach/mux.h>1 q3 P) I7 z$ ?/ m) B: A! }) Q+ ?
/ k; m) d& {- t2 X: K9 ~4 P
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)& b; M! _, |/ F1 G7 C# ~! w
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ Z1 q! P1 w8 {) g \# M
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! L |" M0 |. z, F% V#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- m" K4 c* m" I4 C% h1 U5 e# E; L0 T! x# N$ N: J8 s6 Y
/* assign the tl som board LED-GPIOs*/
& o$ j! I. K$ D1 R9 |# e3 Q. G' Cstatic const short da850_evm_tl_user_led_pins[] = {
. r2 A' H1 X2 G; D& X /* These pins are definition at <mach/mux.h> file */' U( \5 R' M1 L) D
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,7 S8 r2 z* {. z
-1
3 C, Y' k* v) s- `& U};
0 n0 n h$ X- o* w
( ]! U1 Q7 O. p" astatic struct gpio_led da850_evm_tl_leds[] = {
' [8 I: \1 O% x7 f {. r4 s+ }, G& ]( R/ a2 H
.active_low = 0,( T z) n: E9 e2 m9 e7 R" Q: j
.gpio = DA850_USER_LED0,
! V% X' c7 N6 L0 K- J& N \ .name = "user_led0",% |& _9 h5 v. j( d* z
.default_trigger = "default-on",
3 T9 p+ `; u- N& M: { },
& z' _: F1 [* e! q! q& s {2 g0 H2 S* `5 r, m0 n1 z6 r# Y" h7 T0 D
.active_low = 0," W* b9 D+ P7 q4 y6 E
.gpio = DA850_USER_LED1,
) B/ W! l. T! z; a .name = "user_led1",
! q) ]; g8 ~ D. |; a; V: ] .default_trigger = "default-on",
6 W7 H2 u: {" p) H8 P },5 W2 X, K$ E7 q' {& L1 ~; M9 ?2 A
{3 E6 f7 J1 x; l/ b
.active_low = 0,2 K7 [' Q9 R- K8 \7 H. O) Q" D
.gpio = DA850_USER_LED2,' k( n {% V6 Z0 J' n. p6 ]/ k
.name = "user_led2",6 b f e, G4 G3 n" q4 O+ j9 x
.default_trigger = "default-on",% u/ _3 O9 j0 i9 M8 e8 ?1 q' w
},
% i2 S) _/ U* \' W. \ {
( \8 t( E% Z& W- A .active_low = 0,
( r: e9 x2 Z2 J9 |5 k; t$ Z .gpio = DA850_USER_LED3,) ~# C1 L6 w; g4 |$ \/ e
.name = "user_led3",3 @' W+ Q# S. f3 Q& |% G, F
.default_trigger = "default-on",
0 q( f( W+ |+ F( Y, C },! U" Q9 G0 `" x' T/ I
};$ c1 K3 {2 t3 }7 c
+ W5 b P U9 O: c# Z4 Vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: V, z, c& A1 i: q* n .leds = da850_evm_tl_leds,: x7 Y4 A9 P& V0 [* i
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 }5 i2 [- F8 q" \
};4 }+ t7 W: v m
& ^" x0 j' J1 a% @
static void led_dev_release(struct device *dev)
|1 J1 ?8 K9 I9 p8 y3 c0 Q{ ^2 M9 E, b7 B
};% f6 f* Q; {) ]/ z
& s% E; T' T% _% P
static struct platform_device da850_evm_tl_leds_device = {
3 t% T9 y7 D( h& I .name = "leds-gpio",
@8 H' n- c0 s, O+ T$ d .id = 1,
; d _( h/ W6 A .dev = {
- T4 m9 k( N' m .platform_data = &da850_evm_tl_leds_pdata,8 P2 d6 ^( R% |* c
.release = led_dev_release,
3 X q" ^. V N9 o" b b) Y3 F; P }( z* n2 ]% K$ h
};+ ~5 v9 t: `" \$ I
+ b" k/ X: o& W9 o
static int __init led_platform_init(void)
5 D9 g# } ]" s% S9 _$ p{' \' U# R6 K a
int ret;
. D( O0 o E( r#if 0, I1 ?6 {" Z# o% {- N2 U7 }
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);( I9 p, ]* b/ o" p u) x4 W
if (ret)% R. H2 b9 [ O! Y. n, u
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
" s! |5 d9 a; ? "%d\n", ret);
8 T3 M; r% W( H! |9 F/ R0 A% H4 N#endif2 z) U2 G" i. X- B$ L
ret = platform_device_register(&da850_evm_tl_leds_device);& A/ y+ n0 `7 e9 f( m# h
if (ret)
0 ]; z5 `" |+ u3 Y pr_warning("Could not register som GPIO expander LEDS");
- u0 E& n3 n) ]+ u4 F else! f: c' h* E4 N
printk(KERN_INFO "LED register sucessful!\n");# h( i( I0 ]& k2 w( Y' r& t
' I; k% I. L- I5 v return ret;2 W q$ V( P( T" Q' |% i2 o
}! }' [: q$ k8 C3 Z
# f( d8 S& c6 C ]) Q( @
static void __exit led_platform_exit(void)
4 v( u, t. T) O{
; |, f' h% n6 T platform_device_unregister(&da850_evm_tl_leds_device);
: n& ?8 i5 V) M0 r5 y% a
5 V; v0 J( t1 N0 l* ~1 i) [2 F printk(KERN_INFO "LED unregister!\n");, k5 n- @' J7 L0 l4 p9 C5 n5 v
}
: k1 `" a1 E% R( r |( U9 `7 U6 M f" X' J* S, D3 N
module_init(led_platform_init);, N# _% W, k: v/ r2 [* [1 Z3 f
module_exit(led_platform_exit);
; ^+ h% x" x/ J. ?) }6 b; O" f- g# c5 ?4 b( z
MODULE_DESCRIPTION("Led platform driver");
+ t/ m5 @+ d3 f8 `5 N; S, ?MODULE_AUTHOR("Tronlong");
* [5 g6 O5 F! A; n3 tMODULE_LICENSE("GPL");
5 i- x* A6 V" a* o( T) V" q( Z$ g/ i4 c2 r: o/ q. J9 S
|
|