|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 M/ X7 `4 t, P0 ^! v$ Y' @
#include <linux/init.h>4 e. `: b3 E/ ~/ X. T5 m
#include <linux/module.h>1 Z q6 V; N2 v p G+ M0 T2 ~
#include <linux/kernel.h>
# f- r& H" o! L. p. G1 x0 x#include <linux/types.h>
8 M* K; o/ X" p$ e#include <linux/gpio.h>
' @' U6 m" ]! F#include <linux/leds.h>; Y- B# A6 x$ m- o: ^) y: x/ v. g3 V7 D
#include <linux/platform_device.h>. k# |. n! e0 k7 X: }
) u! L7 k2 g! s- L# Q6 x- F#include <asm/mach-types.h>
. f. C* h4 b) v2 `#include <asm/mach/arch.h>6 r2 u& K8 l0 R
#include <mach/da8xx.h>
$ G5 ~# K9 P. @- j4 S#include <mach/mux.h>% v7 w* u, X- t! T9 Z# o
) E8 ^/ u: B0 ? y3 F#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 G! S6 i# b3 `4 q% n; b6 F$ `1 I
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)$ w- j1 F2 U& `+ X1 I, B
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
0 }, G' h5 Y3 h( H8 {8 E9 e#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: k/ P8 L% D7 H3 f. F+ {. g9 {- P8 p' l5 b" |
/* assign the tl som board LED-GPIOs*/: x7 `: p+ C8 a5 j4 S
static const short da850_evm_tl_user_led_pins[] = { G( C8 s/ X- S+ t# o6 J
/* These pins are definition at <mach/mux.h> file */% G* n0 P1 X' P: B* k
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. C( p) f0 R5 G. N, a1 U9 R
-1$ q2 h; O# x! H1 W4 B# d
};0 V8 l l7 ~$ F
3 ~) |5 A8 k3 l9 `2 z3 o( S3 Ystatic struct gpio_led da850_evm_tl_leds[] = {
5 I3 ^- ?& d' }( A0 i {
& [ F1 ^& C) {% P .active_low = 0,( }' k0 C% [3 Z6 J
.gpio = DA850_USER_LED0,9 y4 U+ G z9 k) L+ L+ p3 ], q$ N
.name = "user_led0",' G( {7 U( w) g
.default_trigger = "default-on"," i+ r! t# a+ d- r
},
3 B+ X+ ~: B5 R$ }; l0 U {5 x* _; }7 I( Z$ W8 ]$ [* b D
.active_low = 0,
& B* p( P7 h' N" q+ t( s& s+ A .gpio = DA850_USER_LED1,
0 z N5 k" k" k9 N9 C .name = "user_led1",
# _) e) P; ]- e6 y .default_trigger = "default-on", _3 ]3 s! |$ Y. u: d
},
% @0 ?: D3 [( q4 M! `4 n" x! q {
* {3 Y; K" k% D' } R/ v- g+ ] .active_low = 0,
- f# z: l" N/ ?' R3 | .gpio = DA850_USER_LED2,% U3 T( K5 h" ]& ~( E
.name = "user_led2",9 _; c0 X% |- F# G1 M
.default_trigger = "default-on",4 w$ |$ C! D( `5 M& h3 K2 ~4 c
},
5 u5 B0 p$ d, \* x V {
! W+ n8 n4 y0 _! ?4 K .active_low = 0,) T; k( j/ I" o2 O; N5 W
.gpio = DA850_USER_LED3,
/ c1 x. a" m I2 a6 c1 @ .name = "user_led3",
( @( h, C! O5 I; B1 g/ J .default_trigger = "default-on",! W* s3 ?5 Q+ H2 `
},
2 D* j8 H0 Z% A A- o/ i* @1 ?};
) u2 _/ U4 Y8 D; E3 C+ M% [! D' m& I( r
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
, A7 L. }! C3 ?. U m. o2 L .leds = da850_evm_tl_leds,5 r: V: Q" C: l; [: ^7 z
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ v4 r, [/ \5 p# q C
};5 }, a: l) l2 r9 m
& b& t0 G7 Q: \2 tstatic void led_dev_release(struct device *dev)8 O/ m7 d* d& m
{- C1 C( G( }! @& m! K
};
8 Z3 @2 Y; d$ r2 {1 P5 E/ [: G- C9 V' @) G/ p: z8 M
static struct platform_device da850_evm_tl_leds_device = {
$ g( c. Y0 l) A2 G4 _) g .name = "leds-gpio",
% P% w: B, ^5 N$ d2 y t! P: X .id = 1,, z$ x: j5 d5 v6 M6 Z) \
.dev = {0 e9 K" P9 Q2 C$ ~* a
.platform_data = &da850_evm_tl_leds_pdata,. d% {1 r1 W% m J
.release = led_dev_release,
) j+ j3 ~, `1 o- [1 \" [ }* N( M+ F( f0 {, {2 K9 f- r, D
};2 O" C! a7 K/ S/ a; w
: G6 N4 h8 w. V3 vstatic int __init led_platform_init(void)2 r5 \ u: p3 K y5 {2 d
{
4 h6 f8 X* ?1 j* T' } int ret;. o7 B2 i, V O( f
#if 08 ^, ^2 Z) s5 g2 S
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! Q: _$ Y9 ^ t* o% G if (ret)
7 m+ Y# q' B% P! b% o% B* W pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' o1 T) u5 G: t; S8 z9 p' @, F5 J
"%d\n", ret);' h+ |- d2 C& v9 p% m5 a* G0 \
#endif9 \3 T' p7 f6 W5 }2 i
ret = platform_device_register(&da850_evm_tl_leds_device);" Z; k5 v. L) q+ V2 P! P, O
if (ret); U! w, P/ |. w- y. \4 {+ J
pr_warning("Could not register som GPIO expander LEDS");% w2 g3 T1 f6 Q$ F& G
else0 J( ~ W* L9 O1 l
printk(KERN_INFO "LED register sucessful!\n");( O+ J% _ u8 d1 H5 x! Z1 y
! Q* e0 D" l- V5 f2 U return ret;1 W+ \! o3 Y* j! j/ g
}
( r& ?+ F: j- {. n
. L& h, \' I5 p2 K" A+ u- Wstatic void __exit led_platform_exit(void)4 X' F& [* P. }- q6 _
{
* K7 c- c; F5 ], Q( j# b platform_device_unregister(&da850_evm_tl_leds_device);$ E4 m, [ T0 |& G
( e$ ~# ]/ h0 t* Y! r2 }* C2 ~ printk(KERN_INFO "LED unregister!\n");
( w4 Q0 X* y; Z9 A# j& e' Q}
7 f1 z( O6 }4 N5 U0 k3 T: z/ J' Y) f) I& z6 z
module_init(led_platform_init);
1 P6 u1 \- H B4 Umodule_exit(led_platform_exit);# Q6 c. o! H# D
0 _1 t, \7 `" E& R. _ n0 ZMODULE_DESCRIPTION("Led platform driver");. F* o7 j$ h: }% ?# s( T( _
MODULE_AUTHOR("Tronlong");
* }# C6 N9 t+ W$ p4 v, MMODULE_LICENSE("GPL");5 S1 S3 T5 u- j9 C; s
( C. m/ ^ R# d' k- N! Y |
|