|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
l- z# b: v9 B @' J% f7 q9 G w0 _8 C#include <linux/init.h>
% x" t' C0 I: k) e. m#include <linux/module.h>
7 k1 s( G8 S" a: E6 ~#include <linux/kernel.h>
3 e' G6 a2 i& T { d5 Z#include <linux/types.h>
% Q r1 b2 ?7 B& \* t#include <linux/gpio.h>5 ]4 C0 E+ U. k. ?$ z
#include <linux/leds.h>- ~6 y' f5 U" j4 L8 b7 E) |( @
#include <linux/platform_device.h>
) \, G* q. X5 g" S! I3 j @
- ?2 u* Z* i, a8 I, d7 i#include <asm/mach-types.h>
4 y a; N: G8 F2 Y* Z! K#include <asm/mach/arch.h>8 L3 ^& ]% p o6 d6 g- O
#include <mach/da8xx.h>
8 m0 a. w) |' g, X5 ~. y6 N+ y#include <mach/mux.h>. ~8 O$ h. L* t. a; U$ T
7 w; a8 d; P6 R7 _6 y6 m
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
, O/ g4 [% f0 s# O" Y#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 y4 ]3 s, N. m' \) ^; U9 ^
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; U! l+ }5 @' j. P9 ^; {( v- u) u#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ R) z9 E5 d+ z& x+ F' D0 [
' f8 L0 N* d1 c( {6 Q+ g" k) |
/* assign the tl som board LED-GPIOs*/
) f V+ D% u0 ]3 s3 t; hstatic const short da850_evm_tl_user_led_pins[] = {
% C5 r* [ }4 S+ g( N* W2 P /* These pins are definition at <mach/mux.h> file */
% O8 e5 z. C1 k; Y DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! G# H) R' S$ h# N& F: C; I
-11 F" ], R) ?, V" Z1 V
};
) D' H1 B+ X8 o$ C) j2 f3 C/ I1 z5 ~+ P9 j
static struct gpio_led da850_evm_tl_leds[] = {
. r1 @5 W& Q/ F p# p o: y {5 d" B0 G5 C. L( @+ ?' z; v
.active_low = 0,
; A- U* g3 c! f% u .gpio = DA850_USER_LED0,
7 _6 x" h' T4 h$ n. E o( X .name = "user_led0",
6 O& T+ X8 l3 Z2 w, S .default_trigger = "default-on",$ _. \ B, `& L( U! H+ i" l, v
},
- {6 e' r9 N% M {
9 x8 {0 U" I. {! L, T0 Z .active_low = 0,
x, l9 D/ L7 E$ `( \0 l* \ .gpio = DA850_USER_LED1," l: ^4 D3 w: c: d$ j- _' h3 `* n+ b+ Z
.name = "user_led1",
5 O' u4 V0 B( R' W .default_trigger = "default-on",
9 ^1 X" O: T& Y; u% c },
. l; ?4 W* e! i9 @$ E4 n" Y {) |* u1 e, Y; u$ D
.active_low = 0,
5 _1 z4 [# h. d( [! [5 u .gpio = DA850_USER_LED2,
+ M0 X; k5 m8 H9 O3 h* E! D6 V .name = "user_led2",
9 C% u2 Z4 p% d. v$ a4 ^" T .default_trigger = "default-on",4 d, A0 g& E. D% w
},6 {! X; `$ s/ Q) V
{4 c7 J$ b8 C3 _9 X r$ S) x
.active_low = 0,% o( Q( Z% C, ]5 ]# }
.gpio = DA850_USER_LED3,
2 ^- K# h, u" a, v* @% f/ h0 [# P .name = "user_led3",
* Y/ ^* b; ^6 R .default_trigger = "default-on",% d9 {1 B1 Y$ c; v; R
},
v2 u! \, A) m0 V0 @};; e1 z% l, R Y, |! T
( Q" ?9 Y8 u) v7 T* n$ a, v. y% [static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' q& o9 Y1 B1 M% S9 c .leds = da850_evm_tl_leds,
\: a3 ~3 w4 B .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
' ]9 q0 N' _9 A Y1 B/ H};$ f) A+ M, C* l0 @: z
# U7 |' @) V7 K7 J5 @
static void led_dev_release(struct device *dev)! D9 }$ g: o& T- Q9 Y, U! `
{8 D9 u; D# E) n1 m$ e6 ~( P% K" `1 J E6 u
};
6 ^ A i- [3 k* B, k3 S5 J+ ]7 ?9 O9 x. u" V2 l
static struct platform_device da850_evm_tl_leds_device = {3 e5 O$ t7 g" `/ R( C
.name = "leds-gpio",' ~$ K+ l6 [& }5 `9 X. k
.id = 1,
$ \, N2 L# g8 S& h9 V .dev = {0 V! p8 i1 A% v& i" X. J
.platform_data = &da850_evm_tl_leds_pdata,/ L8 w, R5 g. i7 ]( H4 C; n& b
.release = led_dev_release,
9 z" n: C2 |3 v6 g) } }" `, w0 S9 ?( n' I% S9 {" Y: K
};/ s9 w5 h& l- q) E+ o9 O1 y! f
6 u5 F& x2 G4 H6 B- J& k$ [" dstatic int __init led_platform_init(void): j* B- G0 l7 H) e
{0 K- x1 _5 @' b6 Y2 O
int ret;
, ], q+ t9 [2 Z1 R#if 0
8 F6 |6 s: q( \+ A+ [4 m ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" u( ~& d$ z9 r$ ^6 {
if (ret)' T: j6 X0 ]' H
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& B5 R, {0 \" } ^ "%d\n", ret);
( q& t. d; \ W7 S; `3 e/ ^#endif
. h5 x/ b! N/ r ret = platform_device_register(&da850_evm_tl_leds_device);
* ~, y) F; U; [+ b' f' {( s+ Y if (ret)$ _; x- A# e; g R
pr_warning("Could not register som GPIO expander LEDS");
/ m R5 e4 n! ]3 ^% ^. L else% a0 K1 L, I' M9 z
printk(KERN_INFO "LED register sucessful!\n");
/ l# ?4 {) ~1 m/ R; [) o7 k
% P0 L* _0 a. d return ret;% s$ x0 b0 _" Q, }) G$ q2 q
}
" B2 O* w+ R) A; y& E5 I
8 q9 l/ W6 i; }9 Bstatic void __exit led_platform_exit(void)% T5 |! r# N Q7 o
{
* k" {( ~8 g8 J j- [2 [ platform_device_unregister(&da850_evm_tl_leds_device);
) ~- t( Z" i* ?" k M' t2 q. E: |3 y" \& U
printk(KERN_INFO "LED unregister!\n");
! r2 M9 C. {8 i2 f; H0 I}* @" d; s" e) Z; ?5 Q% ^
+ T7 f- G* C0 K% M' qmodule_init(led_platform_init);
0 S0 r) V$ V7 H: W( omodule_exit(led_platform_exit);
: }+ \; C1 @9 P$ ~; e; ]; I- D5 ?& {- }' q. Z. l+ g6 p
MODULE_DESCRIPTION("Led platform driver");5 N5 b g5 U0 p& D' h0 F% q- a
MODULE_AUTHOR("Tronlong");
* U) d1 m! e L9 [2 G2 x2 jMODULE_LICENSE("GPL");8 r9 \; c3 T4 K) V) ]' b9 Y
+ A* J7 \ `7 M* {
|
|