|
|
求大神给下面的程序做注解,请稍详细些,谢谢。4 [; d T5 v0 E1 g
#include <linux/init.h>
% [) ~( d7 q5 ?( l6 e#include <linux/module.h>0 l6 y) {! o) u7 h* q- h
#include <linux/kernel.h>
( Y. u! E" d6 _# f" e5 h1 h#include <linux/types.h>
p, L( `" `# x( Z) T- ^; n+ L( C#include <linux/gpio.h>
1 b8 R5 P. x: v, p6 R* j: Z#include <linux/leds.h>
" o! T- U* G6 O3 {, O; R#include <linux/platform_device.h>
0 ]* h$ X6 U2 N1 J) t0 ^# Q5 z$ L; f# E8 D. c% J+ Z" W' c
#include <asm/mach-types.h>. i6 r& ^( f! d6 [8 W% P9 v+ X7 z
#include <asm/mach/arch.h>" k# o# a% P. a% j" g
#include <mach/da8xx.h>
0 ]4 o+ P7 x0 I! o' O2 }9 v#include <mach/mux.h>* R- J M3 `" v- Z2 ]7 S, e6 w$ n6 _! Y( L
- R# n9 i; o \#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' u' j. n2 G/ G
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)" V- @* L& Q8 F3 R
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ E d+ m0 p0 p3 ]
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% y+ Q5 @6 E2 q& M! m8 L0 R
# W7 r) Y" G+ ? h; Q' P/* assign the tl som board LED-GPIOs*/
; C# } G" B1 _# |static const short da850_evm_tl_user_led_pins[] = {
7 M9 i: x; F6 I. J7 s# R X& Q& Y+ e: x /* These pins are definition at <mach/mux.h> file */- A S3 C1 \" c x6 ~
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ y* t: ?4 b! y& `* D6 O& Y
-1
: X" C# g8 e2 }: [};
$ ]; c) r+ V. r) e: W( @% O: F( d3 b6 \9 o
static struct gpio_led da850_evm_tl_leds[] = {
# l }8 {3 r2 x0 f {( C# U7 x; {+ H: N
.active_low = 0,% J% s& }2 f0 v' K
.gpio = DA850_USER_LED0,( Y3 i; r# Z+ u1 a2 e$ @
.name = "user_led0",
! n. M3 p* t+ e$ @" V/ b b .default_trigger = "default-on"," e0 j' o6 e& \( u7 a+ j
},
$ q( g1 I, M- d2 j- j {
: E4 W3 M0 J9 `+ A) g .active_low = 0, Q# f. Q6 x/ j- x
.gpio = DA850_USER_LED1,
1 e. r/ d1 J {+ ]- S+ C .name = "user_led1",; g! ]4 b5 ]( W! A3 i7 [: g
.default_trigger = "default-on",+ | h0 o' E$ ?- t1 q
},
' C% V. u+ x- h {$ y! H* ]0 G* s; e
.active_low = 0,1 V+ L G4 |3 ~# ~5 I8 m
.gpio = DA850_USER_LED2,' T" L8 q* Y; A4 b0 L
.name = "user_led2",
5 \2 X* Q: J( G: A, y3 n .default_trigger = "default-on",) Y2 e0 h, H; }" W! L
},
8 @5 d% V. T; F! l4 i& @ {
* ?4 ]( L" [, Q- L$ j8 U .active_low = 0,
, \5 @) t+ o. |( |# E .gpio = DA850_USER_LED3,
, m8 g9 [9 A# K# H" S$ H. H .name = "user_led3",
5 r" ]. o4 q- d: z7 z& k .default_trigger = "default-on",% ?# b5 m: A" F
},
$ B* Q5 Q' T7 J. e( _* U: L};
; E. c g. x* M0 ?
$ | h, j; L- d, y2 |8 x4 Vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& E b; a: N$ \9 B* P* N0 r .leds = da850_evm_tl_leds,5 m8 v/ y; {- Z. z0 ~( ~9 J$ v
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
2 X$ C0 r& {8 b E- A0 J1 ]/ \1 l+ }};
' ~9 E+ p1 z- ?) _; J6 M
. {% z. {+ _$ M$ a/ k' \8 n8 mstatic void led_dev_release(struct device *dev)
" G. F6 q, @: K7 P. d' U{9 y h# \! V J& `7 Y0 K
};
1 @2 P7 k6 C Z" p5 c0 \/ ~9 B$ Q; a T$ {+ H8 A+ p' f- M% @0 C
static struct platform_device da850_evm_tl_leds_device = {
B: o( F, \; x( D2 k .name = "leds-gpio",
# X, P, p; H3 I .id = 1,
# Q1 {& @8 J( W, N3 h' @, ` .dev = {0 j* d4 \1 i: I2 l3 P ], J% W
.platform_data = &da850_evm_tl_leds_pdata,
& f) I0 H! w+ y9 Q# F* b0 X .release = led_dev_release,
, N/ P8 C, @. X% K' H3 i }
8 ~. P8 B4 G1 k};
2 u2 J! Z! x& c
0 {* j6 {( a/ nstatic int __init led_platform_init(void)( a$ M ?1 q" U" w0 n# x; z
{$ a" Y% ?0 Y; K- H
int ret;
. \# _" w* h2 |. Z9 k#if 05 ~. i, G! J# T2 C6 ^9 @: R% U
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);& y. P" `' w; X" v3 z3 o5 @
if (ret)' ~7 S5 R7 f$ v
pr_warning("da850_evm_tl_leds_init : User LED mux failed :") Y; P$ T# d2 C
"%d\n", ret);
: q. Y! C& H1 ~. v#endif& z: e# g2 x9 e
ret = platform_device_register(&da850_evm_tl_leds_device);1 i/ t2 }3 ?2 r4 {7 j) v( D x, ^
if (ret); I: w3 q( E9 V# X) P$ {
pr_warning("Could not register som GPIO expander LEDS");
j- C% ~' \+ D else' q9 U5 j4 ~( l8 U& C1 A& _/ h' R
printk(KERN_INFO "LED register sucessful!\n");* M+ _4 L7 ^/ O. g2 L8 O; Z! d
; u& f# t5 h) b% ^
return ret;
4 i( s1 \/ L' [( [}
& T5 C: I6 r; V" | B) B
. _- d; D& C& H1 N* S# {* [" w6 Pstatic void __exit led_platform_exit(void)
7 g Q9 [/ J% {9 A* A{2 m3 b2 n, F. }9 U( C
platform_device_unregister(&da850_evm_tl_leds_device);" Q4 F7 q0 x% ?( }2 {% N8 a J& D/ h
6 K' q+ @; d* b9 E% e" [, G
printk(KERN_INFO "LED unregister!\n");
. z. C. U& F- t1 ^. u7 @5 p6 F}
1 Y6 V3 M7 @, `. J1 w* j$ u- l/ L$ P0 x+ C3 | ?) m x8 ^
module_init(led_platform_init);
; t# @8 N6 e% ?8 }7 ?& y# x1 O8 _0 umodule_exit(led_platform_exit);
+ c8 G' ?( e/ X( _7 S- R3 u' ~ a5 \8 Z3 I, x0 ^& ?4 V
MODULE_DESCRIPTION("Led platform driver");
" g# m! H8 M7 o: u! \1 }MODULE_AUTHOR("Tronlong");$ S* |4 I. ~4 I
MODULE_LICENSE("GPL"); A4 D- U% G2 U% Y0 e7 j, D
( d8 R- A4 }! ]* Q |
|