|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 C% F8 T% H: K# f8 l$ W6 R5 w
#include <linux/init.h>$ t. {2 `+ r8 x7 [1 a9 u2 m
#include <linux/module.h>
) k; k. B h K- q. M: k/ z#include <linux/kernel.h>* q/ o" `- h$ C$ G: I( G( W: l4 H
#include <linux/types.h>
' U l. V e+ J! i& ]/ L: u" |. l#include <linux/gpio.h>
3 t9 Q$ t ^- _* U5 d7 I#include <linux/leds.h>
- s0 v% ~: n3 r( ?#include <linux/platform_device.h>9 u4 K* ~% J' o( T
: H9 v7 T. ~2 i: p( P) [#include <asm/mach-types.h>0 j8 u2 E1 a; B
#include <asm/mach/arch.h>* f8 J/ e6 J2 k5 r1 [
#include <mach/da8xx.h>
# a2 X/ d2 o, M- p#include <mach/mux.h>
+ }( q% F0 l) I+ Y: y; B2 z+ [ N" ?* N
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) k) d. O6 ? S) F* o' m; ?1 p
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 ?- @' p- z; ~
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 G5 d' k0 A- h; S#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ d* l/ a4 H e. L, [
! ]1 [ s7 [1 k9 w
/* assign the tl som board LED-GPIOs*/
% h: M8 e3 F9 G* Tstatic const short da850_evm_tl_user_led_pins[] = {
+ @, t, U& R& [- Q+ [ /* These pins are definition at <mach/mux.h> file */
+ ~/ u* O5 |9 v3 d DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,% q. k9 l; m; N5 w: Z! F/ X- u' b _
-1) q1 A4 u4 ^/ p7 Y
};+ r, L) O) h$ V+ w6 s7 f
5 n- I# w( z" N. [* n( {7 k3 qstatic struct gpio_led da850_evm_tl_leds[] = {5 z4 {: h0 B* L4 r! ~8 ^
{
0 T) l/ a/ A# Q; P .active_low = 0,& F5 _) {! r' ^7 D; G. u# L: w; W
.gpio = DA850_USER_LED0,
, K3 J" C6 P; r .name = "user_led0",
+ F$ }" J s2 o, _ .default_trigger = "default-on",5 _# p: Y9 _+ l1 X
},$ m m' G' P; z3 w
{9 J7 G. E4 v) ^9 |
.active_low = 0,
$ w8 G" L2 i5 R" r D .gpio = DA850_USER_LED1,
9 I0 a8 M+ v9 g& s- M& _: r .name = "user_led1",+ b# R3 K- k. E# H. p& }0 v' i8 {
.default_trigger = "default-on",
t* j" U Q* [! G1 _4 t$ Y },
( `9 P7 f8 h' I5 t4 R {6 U( l3 V8 W3 f; C
.active_low = 0,/ B) c0 F/ p9 K0 o2 @% w
.gpio = DA850_USER_LED2,
% U7 G) H/ }; c2 a9 Z' U .name = "user_led2",/ u3 L9 a% I+ |; V% x
.default_trigger = "default-on",
% [$ z; c. b- Q# y: A/ K3 E! }2 I },
4 b" g% g; [. [3 s; e {/ y B( `$ a4 S' e' ^ u8 x, F9 d
.active_low = 0,
% {7 c! |3 m% T! M3 d; Z5 t+ V4 q .gpio = DA850_USER_LED3,
# @+ t9 c1 P c; N .name = "user_led3",/ b8 W5 a. {7 }
.default_trigger = "default-on",; @0 o; B0 y) V/ d9 L( S* U# Z! T
},/ @5 V% }3 y/ J. [ H' i4 q
};
+ r3 l2 n: k+ m2 D7 i9 i |/ n9 Z
) }4 t! n! L! p) l# Ustatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. w7 V' V* f/ Q) Z+ z0 D .leds = da850_evm_tl_leds,
0 v' V/ L+ g7 |' }1 o .num_leds = ARRAY_SIZE(da850_evm_tl_leds),5 H! K- }6 c. ~' u
};
' C% m7 [' O P5 A6 k4 z# Z6 i
, x2 Z0 j& B8 `# vstatic void led_dev_release(struct device *dev)- k, d3 Z+ h* F
{+ F6 x9 ?, M: i- z5 s
};
" Q0 f% h2 c% d. j5 D" C6 m; G& f7 t$ Y) ~1 g6 a. J
static struct platform_device da850_evm_tl_leds_device = {
* Q: H }/ u& ?9 c .name = "leds-gpio",
- u' ]7 Z5 j2 b x5 o .id = 1,
E/ T& C# b: N+ U5 K, ?. \ .dev = {# q, o$ \) O$ C! g# r5 e7 M
.platform_data = &da850_evm_tl_leds_pdata,( n& k P; P Q8 c' j& B
.release = led_dev_release,
' ^3 h+ U# K6 J6 I }
- }0 s5 c6 M% o: d u. m" V7 ~};( j4 l4 Y# N" L
* c/ s m6 K" m$ x. m( k, e+ p0 j( B! f
static int __init led_platform_init(void)8 _' E: v- n4 z' S& b
{
" L- U! `$ M* o4 n' k int ret;: R Q: ]9 V4 X* y% u) C# |
#if 0; ^; K& G! K" p; ]0 c. q3 |* x
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( |) Q" l9 Q4 N& N- [; N [' l1 N if (ret)" q# g" q2 N0 H0 h2 i) ?, B
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, G6 x! {; H1 {* @2 W/ F v6 O "%d\n", ret);8 I; Q/ i" S2 N( ?1 F
#endif
: ] g$ s, e6 G) q# s ret = platform_device_register(&da850_evm_tl_leds_device);
, c: C# S* ]9 W2 M _1 b" @ if (ret)
6 L0 Q5 N0 n: A" K% j& ?7 M pr_warning("Could not register som GPIO expander LEDS");5 _' x0 C( f9 Q# t$ Q: f
else; u9 ?$ m& j5 J" Z- P
printk(KERN_INFO "LED register sucessful!\n");
! F4 g7 J2 Q! r: i0 E0 J
: _# Y% y. Q1 n3 ?6 t* s return ret;
" \: ~! O0 N( q1 g}$ {! i( p, z- ~4 |4 P
$ {3 f h$ M4 E+ R; rstatic void __exit led_platform_exit(void)6 B9 N& M7 j; }2 W- [4 M
{& d# r y) z3 c
platform_device_unregister(&da850_evm_tl_leds_device);1 h! l. M2 F1 u' H' V
o3 o( H/ ^% k' k4 X printk(KERN_INFO "LED unregister!\n");+ @7 f7 F/ q0 M
}8 P0 M; k# R+ L6 p0 e
% {4 \" t9 |! D) t6 Q9 V4 w
module_init(led_platform_init);* H5 s, w/ c* d: H
module_exit(led_platform_exit);
/ G$ G! o7 S( t/ [1 e2 D. e8 S7 n" ?7 i {( J' C6 i) Z( \
MODULE_DESCRIPTION("Led platform driver");
5 w0 M% W; N0 f4 G7 S; }6 F" SMODULE_AUTHOR("Tronlong");# w" u, J& X, y3 y5 G5 @
MODULE_LICENSE("GPL");+ R2 R$ T; k; g w: Y! ]6 j+ c
' ?4 v$ d6 |# x# E0 J2 _, c |
|