|
|
求大神给下面的程序做注解,请稍详细些,谢谢。6 m" e: a9 x" X" W6 T6 R) e
#include <linux/init.h>4 T1 T5 O5 Y# k( I! g
#include <linux/module.h>5 Z6 u5 U, C2 ~2 ]8 V
#include <linux/kernel.h>8 w" a$ W$ m5 t+ A( i" [# g
#include <linux/types.h>
9 q' R* W5 k" N) `% p/ t% {# F#include <linux/gpio.h>
4 d8 @& {; G( A0 }& e% i#include <linux/leds.h>
# }7 W( ?- q& n# a1 p$ n w#include <linux/platform_device.h>
6 p( \* r: ^* \5 H. ?$ D3 f5 T( c* m" f6 V# u* B0 |$ @8 U
#include <asm/mach-types.h>6 Q& V; N6 I& l* a6 E: \3 f
#include <asm/mach/arch.h>5 A4 c( T7 ]3 i7 r( t
#include <mach/da8xx.h>
, e/ G- x& C- y3 I#include <mach/mux.h>
1 s& I. h* g# b7 K! X2 g" F3 i' a6 O% H
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ y4 [- r( L5 i( P" ^; R
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
3 p' B! m2 q! y4 m0 L2 Q) d#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), b' R) x6 p0 g) R
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# x \' p4 I E6 Z8 ~2 Y: u
+ _. Y3 c$ K+ T- v, e# u) V8 x/* assign the tl som board LED-GPIOs*/' n* M3 c1 b' k0 D) q
static const short da850_evm_tl_user_led_pins[] = {
* A$ Q) ]! ]7 O7 ?8 X" f /* These pins are definition at <mach/mux.h> file */
! l7 v3 B& w. g DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,9 t" @6 {5 O- i( L) x0 u4 J
-1
( C- y; _6 N. f* e};; p+ v: C# L4 V" J
( n! _4 c n& D1 n; [; A) }static struct gpio_led da850_evm_tl_leds[] = {
X( n7 c4 r% f! H {
+ f9 i! m N+ A% z# U! ? .active_low = 0,
1 {4 E- R* A H- P .gpio = DA850_USER_LED0,# o( c0 Q+ v) U# V1 {" \6 \
.name = "user_led0",+ w4 s( I6 n; ]
.default_trigger = "default-on",
0 J T: m! |/ _. p },6 U1 \7 W1 T8 K
{0 Z6 B0 F3 B5 U- o4 E9 H
.active_low = 0,
: E6 O1 C. T1 i; O) v* x .gpio = DA850_USER_LED1,
- Y. m6 g x H( s: k .name = "user_led1",2 E# H. s1 C2 J7 o C8 O
.default_trigger = "default-on",* ?. n: `; N7 B2 t/ U
},* r& `$ R' E$ q" z
{
' ^7 \- f# e1 L% {& d! i .active_low = 0,' I g" D S1 K6 t: w3 |
.gpio = DA850_USER_LED2,
0 S# i% }% j) s$ W, u6 [ .name = "user_led2",7 C) J5 y g. E! x" G
.default_trigger = "default-on",
?. T/ K* H: I7 z$ p },
; e( F! O; i- p: g N6 Q& \0 K {6 m* p" Y: w* u7 R8 C7 Y2 H
.active_low = 0,
. a0 q4 i, y0 b3 `- @& F7 X .gpio = DA850_USER_LED3,
6 ^ ~% L a q2 |( m2 p .name = "user_led3",
1 U4 q. \$ u6 s5 z2 `9 b .default_trigger = "default-on",
9 M7 r J+ j" ~ },
s; o$ _" `8 G, N" u8 s6 v};
( ]) S+ K5 M& A$ i
0 ^. x. H/ w" m6 T3 ? istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {7 A' v) W3 r0 f# Q; u3 s9 v; l
.leds = da850_evm_tl_leds,# [+ A1 }5 j2 y# _# z3 b, C
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 y) s" C, C. j ?0 a};6 l3 {3 h# W, s! A. q$ \
/ G( r8 ?9 a. t1 n- tstatic void led_dev_release(struct device *dev); a# h9 k/ ~3 }' J
{8 q \+ e: I" y# b }: c$ p V
};$ a+ C! }$ `- T6 ^$ F
1 A) a$ `. N5 ~. X1 L
static struct platform_device da850_evm_tl_leds_device = {
* q5 U: v. [' d+ U! S% h .name = "leds-gpio",
8 B' c- Q6 Z8 ]% h8 s: o .id = 1,
' T8 E1 ~! O+ o& N. [0 P# V .dev = {. [4 ^9 D+ @4 D5 E! t9 ?6 c% R3 Z
.platform_data = &da850_evm_tl_leds_pdata,
C6 z5 ^3 G h X# { .release = led_dev_release,
! i g. u% A, }8 c q }
6 f3 O. h, f+ d! R. N};9 V/ S9 x# m* j, a8 i
7 I5 L: i6 A" G) {3 y' Istatic int __init led_platform_init(void)
6 f1 N" d/ ?) g+ u! w. A{
7 S0 Y& [: Y( ?$ b' e. m* P; ~ int ret;9 e: L& X9 ?- W* S& o
#if 0
5 y! c( p2 a n* e* S( E0 E ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' v: @" j8 J" @2 v9 r7 M+ h
if (ret), N6 Z: q4 p% [6 m) x4 w+ u
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 q" X4 }3 A5 d# |7 b "%d\n", ret);
9 n4 I- N% u0 D( j' B' r( N& b#endif
& r. I' {! Y. w ret = platform_device_register(&da850_evm_tl_leds_device);3 J4 Y% B" d$ }, Z% I, c- V
if (ret)5 ?9 C7 }1 n6 M8 D3 R
pr_warning("Could not register som GPIO expander LEDS");* W( N8 J5 {# k7 m
else8 ?- f8 I" d) e, F7 A& c
printk(KERN_INFO "LED register sucessful!\n");4 D2 Z( l5 q# n6 E0 V G- k
& z( s- U5 B9 q return ret;/ ~# `6 ?/ l5 q& ~$ e. m' p
}
5 i; F" W) B. R9 y% G3 w( K
0 i5 i4 I$ V1 J; A9 y9 \; Xstatic void __exit led_platform_exit(void)
7 r$ r; k. R r% ]% c8 i9 B9 E- [{2 _1 _/ L8 I4 \2 ^2 q% C
platform_device_unregister(&da850_evm_tl_leds_device);0 I1 B' E- N& [" {, o) e; {
( Z3 G6 j% y0 M2 U0 O" s printk(KERN_INFO "LED unregister!\n");9 j" }' P" N) d) T. F* l% q
}0 |$ N' t2 E: D; l5 S# ~
0 l1 F5 C5 S% h' ~7 b; B; ~
module_init(led_platform_init);4 {' H9 g8 X8 b/ C$ }
module_exit(led_platform_exit);
2 [8 h/ b0 D" X! G- u
) h _' X( R' k0 c0 Q! \ @MODULE_DESCRIPTION("Led platform driver");
! a* F( k; s1 z6 ]1 n# J# tMODULE_AUTHOR("Tronlong");6 @6 |& ~+ @/ k( ^# u
MODULE_LICENSE("GPL");
& P# I8 t* R& c9 K$ S1 w1 Z! w5 N- t, q+ P' [
|
|