|
|
求大神给下面的程序做注解,请稍详细些,谢谢。5 ]2 b; ?8 E4 p! w1 A, z
#include <linux/init.h>
6 T: t" i9 C6 S4 I#include <linux/module.h>( G: k$ T/ x) K* H% u
#include <linux/kernel.h>
. [6 D# K9 a7 E1 B. G, z3 W7 P#include <linux/types.h>0 y8 I" U$ E# H$ B( O
#include <linux/gpio.h>: q! l1 n+ p/ i n; K) d
#include <linux/leds.h>
9 \1 ]: q8 f- l. S1 k; F#include <linux/platform_device.h>
1 r' S: R" Z! ^5 U# W' a' T- V5 ^
- H3 J0 L4 j4 M( E, Q. v2 C#include <asm/mach-types.h>
8 {0 p& L0 o4 _: j9 @#include <asm/mach/arch.h>8 f$ H7 y+ R: c% \1 B& Z* C7 }6 u
#include <mach/da8xx.h>
- s$ F' k, ~' I o& s3 D# Z#include <mach/mux.h>
0 i5 ]: H# P9 U5 l s# {' M6 h$ O# v$ F% f m: _# H6 t- n4 d& _
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ o! O! B+ c) {0 x2 |4 J5 f#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( j4 \) r- C6 k9 I* B
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)7 J. F* {0 E! I/ Z. \4 U) v% H
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
! I& W0 |" d+ B. [6 Q+ _2 z% d# p' h2 U6 j0 ^0 `2 m
/* assign the tl som board LED-GPIOs*/- M' Y, b( k. \
static const short da850_evm_tl_user_led_pins[] = {- g- K- n- k+ G! V- i
/* These pins are definition at <mach/mux.h> file */
7 V5 R* U. R: Z# Z( e" M, ]% N+ g DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,5 x6 q {5 y1 Y6 J! f5 }. M
-19 ^% R9 D* t) Z7 z0 D+ V
};
; v( ]8 V" w7 t+ Z' e. k
+ K( i0 F) U) U: q2 m' u W8 ?static struct gpio_led da850_evm_tl_leds[] = {- I: z% z9 w* d5 {( V4 {
{% q, o" y+ q( C9 M7 a H5 D
.active_low = 0,
1 k2 ]2 R2 u F/ T3 L# K .gpio = DA850_USER_LED0,: ]/ t6 A" z! v
.name = "user_led0",
( p4 y% t5 l1 E .default_trigger = "default-on",
L7 c' ?& E$ R- n/ H5 t9 d },
+ R, W5 a' {/ A5 I {
( M- S; L; v7 b7 k2 m .active_low = 0,7 @1 X, A- Q* D% A5 k
.gpio = DA850_USER_LED1,0 f9 p ?- w" E s, @6 n
.name = "user_led1",
7 h% d5 R2 `/ f+ R T' j .default_trigger = "default-on",7 F! w7 |0 M7 ~) s5 g2 b# I
},; L7 u( s+ s# B/ J% \" v) }* H
{: k* `/ o# z: w" D1 P% m
.active_low = 0,
9 ` }( D0 u0 f( d1 D! U' ? .gpio = DA850_USER_LED2,
2 N5 ~ n% Q8 B, Y .name = "user_led2",/ }" V0 l0 j5 I3 X
.default_trigger = "default-on",
8 K/ K- f& m% z" H# \4 t },
* z5 u4 Y6 f m7 V" d# o {8 `5 _7 q" ^: {) x# j" a
.active_low = 0," w$ W( _, U F5 _8 N- ~& j0 {
.gpio = DA850_USER_LED3,; d( ~6 H& _& f
.name = "user_led3",
) w% I Z; i9 U( p2 [( F .default_trigger = "default-on",
2 z) Q6 W. j, C },9 W# p6 z$ q' i3 F
};
6 q% y9 I" G0 h- M; L* x1 t# E7 R0 O7 ^" B" h+ A
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 x: v& F1 l6 }/ Y# F
.leds = da850_evm_tl_leds,
) h, r3 |1 y! |8 h: |% k* P .num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ w5 K4 x$ k. d5 V2 ]7 n
};
* m( A8 Z/ L# x; ^; K* b8 _
1 D& w: _- `+ C& m3 K7 Rstatic void led_dev_release(struct device *dev)
! N, ?3 ?4 `7 _ m" f. e& J$ _9 e{! h( e. Q+ |* q
};
. k. f% w% f7 |
8 ~ V( {2 G! W$ l) ? ?+ ` pstatic struct platform_device da850_evm_tl_leds_device = {0 p2 r6 j+ g8 K9 V* j( v4 C$ O1 F
.name = "leds-gpio",
' }/ Q+ A% u" J .id = 1,
( K! `! ^, z) J .dev = {1 S0 I: l3 `7 X0 |, W/ a0 F. i4 n
.platform_data = &da850_evm_tl_leds_pdata,% U0 ^" Z! x6 }: U5 H! K
.release = led_dev_release,
1 o3 t5 E* ]$ B }% r7 c& X h. @
};
* r( a1 B3 S4 f6 p6 I, m' [8 |
2 B8 F3 W- n+ Q2 Z$ Z6 s, k# fstatic int __init led_platform_init(void)
) c. T% J6 w4 [8 A{' @% a/ z- ~1 J, |" o# [! Q4 K
int ret;# m7 N9 a, Q- _3 V7 X3 v
#if 0
o; ]+ A+ R7 L! \( Y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" B5 C) A* {& j- \
if (ret)7 G! [$ Q/ R8 p3 S& f T2 P
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 H0 {( {6 y: K/ ?* R& F m
"%d\n", ret);9 }" r$ v$ T% Y: o; \
#endif
8 j8 r% K1 T5 @( B+ M2 h/ F ret = platform_device_register(&da850_evm_tl_leds_device);# Q* c5 y+ E& ]5 e; g7 E
if (ret)
) |; r% A/ D- { pr_warning("Could not register som GPIO expander LEDS");- a# F! Q1 }6 C) s6 R& d. e2 ~
else& @$ M2 S( R' z J0 x
printk(KERN_INFO "LED register sucessful!\n");
1 k; j$ h& _$ U: D9 f2 P+ j. \* z( s" e9 e; w4 i K7 f+ v3 _" x
return ret;( }' C0 t) _! b4 v3 v. Z* T* Q J! i0 m
}& S' x' K+ ^+ _4 ^' T9 c2 z
( J# [$ @! X# i5 v, `static void __exit led_platform_exit(void) q* ^# S# H/ X0 ^
{* `: x$ b7 p- ~7 n& b, I
platform_device_unregister(&da850_evm_tl_leds_device);- L4 [' s8 A* n; j1 Y
! v3 b$ m$ G4 P8 U2 y) k printk(KERN_INFO "LED unregister!\n");
6 x) V* ?7 w; l- U- z M" w}. y# H- Q; x: c5 f5 E- H3 X: x( G, |( w
& E E6 f+ W; L! d+ d G% Amodule_init(led_platform_init);
8 o% G" N0 L; g5 @0 E3 vmodule_exit(led_platform_exit);
@, A& Z8 b4 I9 }: d
; Y; V3 _7 ]1 h& B& ~6 KMODULE_DESCRIPTION("Led platform driver");
; ?; _! @: O; F& A/ GMODULE_AUTHOR("Tronlong");
2 m! ^, u- t8 e& |. H6 xMODULE_LICENSE("GPL");& C, k) Y6 s. p% |6 O
+ [8 z+ f7 P6 J$ |( B |
|