|
|
求大神给下面的程序做注解,请稍详细些,谢谢。: A3 B$ N) A5 z) S( M, y0 l o) J
#include <linux/init.h>9 N0 d7 [3 d x$ f( a3 j) L
#include <linux/module.h>( F! O$ g0 L4 @$ u! U9 Q
#include <linux/kernel.h>
' [3 L# j. ` r4 n( r* @#include <linux/types.h>
& f. q! q( }; Z#include <linux/gpio.h>/ H' l6 p( x* K
#include <linux/leds.h>
" q' \: |* a7 d& R# q#include <linux/platform_device.h>6 `8 G2 K% J8 `' m8 m0 F# x8 Q( ^
" O7 @: _" c, @ y
#include <asm/mach-types.h>
. C3 A! G6 X9 X2 v- a4 T2 l/ e% |#include <asm/mach/arch.h>' ]$ y3 S Z ?+ c, n$ |) F: @
#include <mach/da8xx.h>
+ O" Q7 o2 c/ R2 H( q F+ X: ~#include <mach/mux.h>
$ Q( j8 t1 c4 j1 n, k- g# B# Y# r9 n4 ?
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ E+ C \% U, H& _3 Y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)& S: r* L0 r U2 |; z$ s8 t& l6 S
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 n7 [8 b' V7 @& Z7 t' O# I! p
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). ?3 U) C# t ^. y; P" X
3 @+ e* L: ? }7 N A# _/ E% q
/* assign the tl som board LED-GPIOs*/, t+ @7 q5 X* {
static const short da850_evm_tl_user_led_pins[] = {% j% D* W7 G$ Z V+ b- @
/* These pins are definition at <mach/mux.h> file */
. P2 j4 ?; {; U0 J DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,6 v; o* Z2 [ n
-15 v4 @9 ] [ C" I& ~" I
};( `' `% p, [3 `1 Y7 Z; j6 w
" t, u" h# }" j8 Z* x- x: Lstatic struct gpio_led da850_evm_tl_leds[] = {3 i* g! C' }5 Q# h- i: a
{
1 r6 A# N7 e+ R" m .active_low = 0,
4 V: r' `* i7 N8 t .gpio = DA850_USER_LED0,' s- e$ ` K6 t. K0 I
.name = "user_led0",) Z- X8 I7 y) [6 ^( I# M
.default_trigger = "default-on",- ]$ M* y- \* Y2 P8 v
},
q0 i" I2 g) G. I1 q1 Q& \ {- c! J# I. T" f# G8 I
.active_low = 0," E1 S0 G* g7 I: @
.gpio = DA850_USER_LED1,, i/ _% F' F. W) q/ A! U5 f9 O
.name = "user_led1",
- a0 X3 H4 |6 A1 Z$ T+ V- \! n .default_trigger = "default-on",5 }: f* \9 O1 a( A1 _
},
+ q2 s( i& g" K4 W" s {
2 Q5 l/ m; u$ k' b4 r" x .active_low = 0,
. |& z/ C% t7 s. H: q7 G; H, {/ N$ Z .gpio = DA850_USER_LED2,9 q. n- F \- {! Z, z E9 m
.name = "user_led2",
( U7 f- G( D. @+ Y5 W .default_trigger = "default-on",. Z% R6 [# o$ f8 A3 M
},( S3 L6 w; x' I# m; j
{0 ~8 p$ A0 a4 W) F
.active_low = 0,
- B* ?, R- n% L, [9 T, d0 a7 d .gpio = DA850_USER_LED3,/ n3 s1 Q& {% f# R& }
.name = "user_led3", t+ Z( A9 Q$ `
.default_trigger = "default-on",. B# e6 B2 P, R5 C
},. i- }# ~ c# X
};' b3 M& g( t" ^0 v. \# C
; ^ h- {7 u" _4 z4 y7 nstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 M" t0 g" v& `- T4 a0 t
.leds = da850_evm_tl_leds,
9 K! n9 F$ d& b3 n3 I .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% u; r E; K# J+ _0 C9 b};
, W2 A7 \' f1 ~4 X0 o0 L0 E. B: E* r, G4 e) t; L. b3 |1 _) q
static void led_dev_release(struct device *dev)
6 t2 I* F! d# j{
, H: q3 s& f- }. X, R `5 [- m9 H};
4 r" m2 t& ~. M) I& m; x
, `1 c- f a4 _' u, qstatic struct platform_device da850_evm_tl_leds_device = {
! Z# z# D7 s( U9 v4 B D& z, v0 f .name = "leds-gpio",$ Z1 j( q8 q6 N5 Q+ \
.id = 1,
) @" b1 i/ o% ]# Z1 ?8 ?' z .dev = {% B% [+ a- C. f0 P; E' H
.platform_data = &da850_evm_tl_leds_pdata,
) `2 ]9 X2 [0 H* `3 @ .release = led_dev_release,
/ v" [: O: A* \$ U9 b% | }0 c1 z: C7 `- |" H* X5 r. D
};
& x o- @+ ?$ I% s+ t; P. A" V
& i+ m' ~1 l8 T9 Xstatic int __init led_platform_init(void)4 S0 H! X/ U! E6 ?( n. O N
{0 p4 U h! X N1 O
int ret;* ~* U5 S. }! V& N5 L5 m+ x) }5 o
#if 0, m+ {2 L% h! q a2 g% n5 O
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
0 H" E9 z& _4 t# Y6 q% I0 } if (ret)
2 q5 f0 n( ]4 S% E) x; U pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 _7 |: I2 n! C/ v& x* {# r "%d\n", ret);
o0 ]; v' o* M#endif
9 Z+ j e( R, r# \6 [2 O ret = platform_device_register(&da850_evm_tl_leds_device);- l( T+ Z# W4 g. p! K3 }
if (ret)
5 W$ r& f) f& V6 ^1 r) }, A8 ? pr_warning("Could not register som GPIO expander LEDS");& T6 `0 V3 s& Y# h) ^
else
: f/ h/ X3 m( s3 C printk(KERN_INFO "LED register sucessful!\n");
: _3 r& V* h2 r! U6 \
; O$ D7 A; v! W( }3 D return ret;( A- [ M9 W7 B6 L
}) L7 D' K3 z) c' v$ Z) a3 o
& a- q' D9 }1 M9 [ C* Y
static void __exit led_platform_exit(void)
: K ?+ o+ F6 k% X( F{& N! M" _" f4 a* \6 ]4 N1 t
platform_device_unregister(&da850_evm_tl_leds_device);5 y# m6 N& F$ y, {; d5 M
% T0 _ c B0 Q, I! \$ b printk(KERN_INFO "LED unregister!\n");
3 m. _9 E2 j6 p4 n; h' ]}, b" v% v# F! {# `7 M
- ^5 u2 s. [8 S: S* D" S- B
module_init(led_platform_init);
0 l0 }) Z% d! T: M& s4 B3 U) e9 amodule_exit(led_platform_exit);
+ H5 D9 c2 ~3 [, ~3 k& O" V- k) {; `, z3 r
MODULE_DESCRIPTION("Led platform driver");' f" C, k+ h O/ G2 v) D
MODULE_AUTHOR("Tronlong");
/ T- O! W$ C7 i9 }. rMODULE_LICENSE("GPL");
# x1 o9 |8 E" w% g
4 q: n: K) J! B |
|