|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" N. I' _0 V) Q. S# L5 D
#include <linux/init.h>" ]' A$ n/ i4 X1 i8 w( `
#include <linux/module.h>' W" i% G2 g0 d
#include <linux/kernel.h>' \/ P* V7 E: ]- F, L/ p
#include <linux/types.h>, g( N- C2 \) E' x- r
#include <linux/gpio.h>
$ N4 h8 k, [7 C9 T. z3 e#include <linux/leds.h>
7 N, z2 p0 U6 c2 z4 b#include <linux/platform_device.h>
! v, n l4 e5 z. Q
+ z# P9 u# }4 }; x! B, F" r#include <asm/mach-types.h>0 y; R) y7 ? l4 c3 o' i
#include <asm/mach/arch.h>
; x3 i, E+ S6 K#include <mach/da8xx.h>0 z5 \* p" I1 g: F, \$ J
#include <mach/mux.h>+ t: h9 w6 @7 Z. `& p5 p- [ [# ^9 E
' _ R9 M5 m; h" h. A#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ `0 K8 Y5 [ l$ q6 B w#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
1 [; ^) Y8 C5 z6 {#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 i: B4 r! q: A, k1 M, ~
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 x9 f/ ~& |% A5 r7 B) M: b0 z; P. {7 [: r# g& f O- t/ [8 X
/* assign the tl som board LED-GPIOs*/
( w+ c& [% J% j* ^* h) V9 Fstatic const short da850_evm_tl_user_led_pins[] = {3 Q% J( m" b: r& x+ O$ u
/* These pins are definition at <mach/mux.h> file */1 O4 j% C1 _9 Y' H: U
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,1 b- c% y4 M$ n( q0 f, i
-18 S; e/ D6 k8 n' Q
};1 a1 F3 _/ v2 P5 v3 l* d& q5 N
8 d1 V J9 a9 |3 s+ i' A# K
static struct gpio_led da850_evm_tl_leds[] = { n) b4 q: \2 v6 n2 }: M
{
1 d# A3 ?7 Z# `' i, O .active_low = 0,
, n, z1 \, _+ N. d. k" ^ .gpio = DA850_USER_LED0,; V0 f* f& j, l; S. g
.name = "user_led0",$ ]; r# p6 D3 @6 j
.default_trigger = "default-on",
- M1 ]/ Z! M$ ^& T# I( t },1 d. W9 L) H7 o* Q
{* ]5 W3 f+ o0 _1 V
.active_low = 0,# G" S( ? S* {2 c+ ]
.gpio = DA850_USER_LED1,
8 M' m. @; C, e/ K+ L' V7 e .name = "user_led1",
( P5 V {, N! J .default_trigger = "default-on",5 V3 |' g1 K8 C
},
+ G. L I# F; P: @; G2 z {9 K B6 n1 O! y* ^/ c
.active_low = 0,
" X! Z$ a* G$ W; ]& P .gpio = DA850_USER_LED2,
. c; Z3 Z v. m. B .name = "user_led2",1 L$ Z. X) |% w' T6 C1 V) x
.default_trigger = "default-on",
2 ]) E5 E: S1 J8 q% e },
3 W- \' A2 b) Y- S: x) u% p {
/ F1 O( g& J$ U! J, v .active_low = 0,
+ t9 L4 R. J0 F8 a' x3 x .gpio = DA850_USER_LED3,
' D7 z n% f2 ]( J( c0 J .name = "user_led3",
8 c2 R" E8 a& w" X" K .default_trigger = "default-on",
8 P2 w% u2 k( C% m0 T( a# ~ },* `8 {, H% G3 \" g
};
* M/ `. P) c6 Y. [4 s0 Y
$ @+ K# {1 b' Q0 j" ?1 Ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
) m. p( e$ [8 B/ j- ] J8 W .leds = da850_evm_tl_leds,* `& t3 U4 H0 Y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),7 k# E. ~& e* D" ]# c
};5 W- N/ t" D( J' d1 ]
7 m+ a6 G: n M3 }$ y
static void led_dev_release(struct device *dev)
; W( M1 M1 I( l) J: l{( Q7 R5 T& m' p/ S
};! c X, x0 g. S% Q
& V# c6 R5 L! m( w" j, U4 p) D3 w
static struct platform_device da850_evm_tl_leds_device = {& K3 `* z4 E* }5 A; B
.name = "leds-gpio",
, b0 e/ r5 k9 Q2 I) h# w% m .id = 1,1 R# S1 ^2 V2 N( `# _9 S [
.dev = {1 d& _. d, G( h ?+ H a& x
.platform_data = &da850_evm_tl_leds_pdata,
" }! c7 v* ^ w* p- u& f! q+ T .release = led_dev_release,* q0 O0 T: R- N: Y, W/ N* ^
}2 Y* f3 Y5 g g0 o
};2 j! m; z. b+ S7 z
6 a, k/ _4 I) R& ^* ^static int __init led_platform_init(void); P3 L4 v7 c% j: r9 \
{8 G9 m2 v# H, M) j- X7 D: Y2 ]
int ret;
. f% e: n8 K+ i; o#if 0( {/ A s: ]- O! o5 X2 v
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( E+ ^! M: d' y+ N0 H% z! N if (ret)5 N2 V, }2 Q. ~0 Y& n) E) e
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"( m7 I' {; Z( ]$ V1 v
"%d\n", ret);
; N9 f0 A( A: ~; a#endif
8 a" [* y! C u5 u ret = platform_device_register(&da850_evm_tl_leds_device);, ]3 {) N3 f" ~: G w( U, n" O- ^
if (ret)
9 d. X: e0 l1 r1 M* | pr_warning("Could not register som GPIO expander LEDS");
$ @+ H. t5 J3 Z" I+ T% Z else
5 }. p' t1 L% j3 a* q) H% g6 P" w printk(KERN_INFO "LED register sucessful!\n");
! d( ?% S S+ {+ C+ I
8 h# X5 y& W& D" ^1 ~" J' V; a return ret;/ S" ^: o' [, [4 \+ M
}0 y* O9 x% [# D# O
+ d4 ?% M" F* D& ^: V- F
static void __exit led_platform_exit(void)
! l% r7 S( \. S3 ~ h# Q# Z{ L5 |( j6 } H- V# T; U# `& j( ~7 j
platform_device_unregister(&da850_evm_tl_leds_device);2 f% J `" [5 p. C7 h% j
- ?4 z8 Q1 A% d
printk(KERN_INFO "LED unregister!\n");
3 Q7 J3 L: S) Z) \: D0 D}
8 Y4 u: g6 J2 ]8 j4 M7 V% R/ h, b2 o4 I8 N! g
module_init(led_platform_init);' V, X2 b d2 y. e
module_exit(led_platform_exit);
+ ]! F2 @! M$ h; C' ~1 b R. t
$ i" A, n; m8 [' B# M9 o) DMODULE_DESCRIPTION("Led platform driver");: v0 M. K& [. o/ {9 b) c
MODULE_AUTHOR("Tronlong");! _( @1 x6 t% ~+ ?5 _! J
MODULE_LICENSE("GPL");3 |' r$ d6 q C- T0 |
) K3 [' G p' m* T
|
|