|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 O: S* Z5 z- ?4 c8 u8 U#include <linux/init.h># Z5 R7 X/ n& H6 q+ b+ H; R6 o; k
#include <linux/module.h>
5 Q9 h+ W+ L6 k$ r' z/ `# W# y#include <linux/kernel.h>* f( w( g( E" u) r% q; q5 v; ?' P
#include <linux/types.h>4 C( Y+ v. {+ K* f
#include <linux/gpio.h># J. v: }7 L; A7 T f2 U% q, x
#include <linux/leds.h>4 R( I( \0 |1 Q* \ h+ u
#include <linux/platform_device.h>
2 T6 h: s3 y' w3 {
3 i2 K: s9 J% i9 m3 e2 O' X& I2 Y9 z#include <asm/mach-types.h>
% I5 ?6 U0 h) W& A0 L#include <asm/mach/arch.h># S5 L: m5 E' B8 s1 x% l. y
#include <mach/da8xx.h>5 `6 Z4 I7 w/ M$ K- l4 N
#include <mach/mux.h>
. N* M, M5 W8 D4 j: E
/ }* Y) y3 _' y* f y) E) q#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% b: Y, e$ ^$ G6 N2 Q* D! f#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
* G, B) y) n) z, N#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. T7 v7 o4 P- a+ I#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
$ `4 W' c. B; r! ?* n9 b- A# ?0 { g9 o7 a( K0 x. a
/* assign the tl som board LED-GPIOs*/8 |$ [( d9 I6 L( k
static const short da850_evm_tl_user_led_pins[] = {/ e5 U4 i9 m* v0 ~' |" n
/* These pins are definition at <mach/mux.h> file */
* { V) W( I2 t) S4 V DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* B' @) } ^3 @$ q$ T -1 B# T- N8 V5 g( X V5 e8 z
};
; A- m) O: ]- E8 G0 ]! k" ?0 {4 B
) y2 U6 c, q) u/ j) Q+ l, M- i# kstatic struct gpio_led da850_evm_tl_leds[] = {
+ r. g% A% q, L0 n% Y {& _8 l( f2 v- S; |# `" T
.active_low = 0,7 B, G% ^ x7 D5 h% a+ v# h9 g
.gpio = DA850_USER_LED0,: P4 G# v' [# t- ~2 e
.name = "user_led0",
G* F* Q1 l7 W' d* `& \ .default_trigger = "default-on",
1 P* J" Z k" Q& W- s, f# _ },
) f4 T9 V5 B8 W/ {" M F" ]2 _ {3 q6 A; S: a# L. \
.active_low = 0,' h5 C3 ]9 ?. O L% L
.gpio = DA850_USER_LED1,
6 B( v* b+ N- D v7 q0 z .name = "user_led1",; W- t" q2 }8 v& {' b: {
.default_trigger = "default-on",
& S. a1 Q4 L4 i },
; `* B+ c8 S6 t9 E* U {
5 s; t$ S/ Z7 c .active_low = 0,- Z# H8 @% L( L
.gpio = DA850_USER_LED2,9 @( s I. c4 R
.name = "user_led2",. k- h# ~4 K+ u, t
.default_trigger = "default-on",5 { C+ [7 a+ |, j! e2 W9 P
},
+ o* F( l0 E- U {
0 g) T C# l$ e .active_low = 0,
; K9 }: y6 W6 C7 I# { .gpio = DA850_USER_LED3,+ c% U2 u% H; Z% M% P' @5 g* s
.name = "user_led3",
4 R: ~3 e v3 D+ ]& | ^, h .default_trigger = "default-on",; I/ A7 \8 |$ w* [
},! l# b5 _' H; X% i3 S/ v0 p! E* L. \
};
% r4 o. z8 \: h7 I) M- c3 f$ s/ u3 v0 \# E$ m8 k/ I7 _
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
5 |* ~* D F8 L0 i; C3 O .leds = da850_evm_tl_leds, U4 F S7 I" m7 n0 e
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 z' |" Z' j9 z" I u+ [};
! w4 ~2 a+ Q9 P5 y+ p% e0 m
. u6 ]2 A$ K- H) X4 Vstatic void led_dev_release(struct device *dev)
/ C. G+ w. ]. k) F) ^{
6 J- p' v9 t& N1 M( D7 E4 D9 E% O};
. `, n7 F" U- r; ~
7 r2 s H- E0 ^; Cstatic struct platform_device da850_evm_tl_leds_device = {
0 T' E) Y: R: h% f, A" o .name = "leds-gpio",
- A/ G& Z5 |7 h; {9 X' \ .id = 1," }1 y! e `8 m
.dev = {
$ A7 e, X$ @% @8 y7 d* D6 }# n .platform_data = &da850_evm_tl_leds_pdata,
2 e# }% ^! C) ]( d" K2 ?# U .release = led_dev_release,. H! F8 I" I/ G, i- c
}9 k9 O S$ s% f: e( C
};$ j' X* e7 z- F' K2 Q2 g
6 G, I5 Q! [! W' |* p4 V- p! Ystatic int __init led_platform_init(void)
: a7 c/ E# v, N6 d; m{
/ d$ N" y& p4 g int ret;1 C) i# W v7 x/ ~* r. \2 `
#if 0
; u; t/ {3 ~; i) D1 f* q ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
4 E( i; i: x0 k1 W3 _ if (ret)
& W; ?- W: y: d pr_warning("da850_evm_tl_leds_init : User LED mux failed :"; |" j3 j# f, C9 P, @, S
"%d\n", ret);
5 V. J' T4 A3 g/ k0 ?#endif5 v h: t1 z0 P+ s6 j
ret = platform_device_register(&da850_evm_tl_leds_device);: Q0 `$ g% n6 p% T
if (ret)2 Y' s9 U9 o7 u2 M0 j, M9 R
pr_warning("Could not register som GPIO expander LEDS");
; j0 s$ |. @7 ~! K else6 |9 N) d, }' `
printk(KERN_INFO "LED register sucessful!\n");! T& H& M2 R: d: k% C
, T" g' n1 e& X: p return ret;
/ Q: s& }7 X1 C$ ~; E. w/ \}
, g/ a& H. f/ T' t
) }* M3 \3 x) c' hstatic void __exit led_platform_exit(void)- ?3 [ J3 l `7 A7 r( Y0 `, A( l
{
6 l. q+ \5 s" r5 ~! k% | platform_device_unregister(&da850_evm_tl_leds_device);
% o. x. v u7 m# q
* \2 j- `# p) E Z printk(KERN_INFO "LED unregister!\n");5 n2 c y9 D; g M$ ^8 x) B; E
}
& l% F! K( ~! V$ S! p7 j! P0 [9 F+ |# _1 I% P6 W$ m, d
module_init(led_platform_init);
. X L( k: f; z9 x5 Wmodule_exit(led_platform_exit);
9 C1 ^4 K" j- S. n6 N. p/ `3 P( }6 ]3 k5 U
MODULE_DESCRIPTION("Led platform driver");
1 E# R8 [5 o4 m* y, l# l0 s4 EMODULE_AUTHOR("Tronlong");! Q% a; H; o, x% f7 A: @' Y
MODULE_LICENSE("GPL");
" o( W8 @# k. o: L3 Y" h. {$ G) r5 S: b7 U/ O
|
|