|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 `% |( f Q8 |# V- z0 V#include <linux/init.h>
% M5 }& r3 I, _' g! ?: v8 C#include <linux/module.h>
8 o% Y/ B7 Y4 ^#include <linux/kernel.h>$ X) p' t: {6 W
#include <linux/types.h>
+ d, A& q( a8 J) A" ]0 P# @#include <linux/gpio.h>
, \6 ~ ?# Q# I2 J: |#include <linux/leds.h>
( W$ D, y4 Y, {, `$ B( q#include <linux/platform_device.h>/ |! g3 k+ i& d* M4 L" l1 |
" f" @4 {( y! J% t6 r6 U) {#include <asm/mach-types.h>
' _" }, D K0 K#include <asm/mach/arch.h>/ @! K0 }) e& C9 M* t6 K, d4 [1 }
#include <mach/da8xx.h>: |! P* a# w3 r. C& g- B
#include <mach/mux.h>
\1 r9 a% P! ?, o( H/ n, U: G B8 K3 w
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 w, w( C. |& T( _0 ]6 e( S3 l#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)" V$ Z9 b. D+ y9 H. O3 y" k
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
/ Z, `" l8 U' O5 f7 X#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)' X. Y7 ? ]; I) j8 A" H0 {& `
6 G; [5 r# k2 L, j) Y0 f
/* assign the tl som board LED-GPIOs*/: {7 ~6 R7 c, V& O2 g; ^8 ^5 q
static const short da850_evm_tl_user_led_pins[] = {
# D/ ?# |. q' B7 e5 S /* These pins are definition at <mach/mux.h> file */
* w" C" _; s$ I/ ?; r! V8 B U6 a) a DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, G3 M/ D; O, _/ o
-1$ ]# u$ ^ h- m' S9 _: A
};
( @; X" [# Y+ m6 s
' P$ T2 a! @* F+ u8 Lstatic struct gpio_led da850_evm_tl_leds[] = {3 S% `5 R2 Q) o( _# D* i
{- O% u; C* K N4 l @( k; ]
.active_low = 0,
# q6 X7 p g4 k& a2 d .gpio = DA850_USER_LED0,
8 S* {; S4 i" q3 s4 `; A2 M% g: \ .name = "user_led0",% h5 A" z0 C c, ^$ V# s4 X9 k: R! s
.default_trigger = "default-on",& L* C% P( Q4 Y9 b3 D# m. T
},- c- Q+ C% Y2 U+ I
{
U% @* I+ { g7 @ .active_low = 0,
0 i! I& x G3 K/ V) @8 { .gpio = DA850_USER_LED1,: k% a7 Y* B: n* E8 Z, o5 R
.name = "user_led1",7 U v5 X+ j+ e6 R: e* K% _( K( m$ a
.default_trigger = "default-on",
) i/ F& z/ u# A4 R% W* w },
6 ?0 B. x' I7 C8 w& \ {
* n: T4 _8 K5 Z% @+ e: E .active_low = 0,
. n& ?8 ]2 P1 {5 j$ C+ I5 w .gpio = DA850_USER_LED2,
: \3 A* s% i- \" \ .name = "user_led2",
, _. C# f2 c; |+ i* x/ o) }5 E .default_trigger = "default-on",* o3 x: e4 R6 `* K8 E. K5 r
},1 C7 Q$ U+ b) T$ v2 [
{
8 p: S' L) ~& Z8 I6 T9 T .active_low = 0, v& a5 Y. M5 g, E9 M
.gpio = DA850_USER_LED3,7 t; r f: c' {0 @
.name = "user_led3",5 c1 b& {, K5 v- g. O4 N
.default_trigger = "default-on",
# f# @5 H( V6 b y1 r. |; q& a },; t) P3 j, @5 h& H5 S( N# H
};4 i- v q, h6 b$ F# T5 k
! d0 z5 b$ Y; J, e( Fstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: ]7 j0 y. F; a$ M0 [
.leds = da850_evm_tl_leds,
# o* @7 b# y% a% d( {' U9 u. l* P; ] .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
, p. S2 `( c3 B( T, V};
6 B& |3 R, A1 ` X: e/ h
& F' u- N+ `9 ?: w# f$ ^. |# Gstatic void led_dev_release(struct device *dev)
3 m6 K: K ]; j4 O{% d7 P6 t0 S$ P4 X
};
9 i2 f- ~2 l8 B" J! u0 e; f! Z3 L; P& V! e3 F% ~6 ^. T _
static struct platform_device da850_evm_tl_leds_device = { J6 p# P/ Y9 K9 w7 L
.name = "leds-gpio",* p1 V/ M3 L# d
.id = 1,
, p' _5 W/ a, C- h' S+ a .dev = {+ ~/ S" x0 Q9 K0 f
.platform_data = &da850_evm_tl_leds_pdata,
$ d& [. O2 z. C# H5 W) S .release = led_dev_release,, p# a0 m+ R6 Z
}
7 N# H: ~0 X* [. I2 E};
( U1 d+ h) E% b7 X6 F
& S L2 k' K1 p& Dstatic int __init led_platform_init(void)
, Q8 s0 ^* Y' p# E+ F1 [' @{' L8 H6 e! k C- o" v" Z
int ret;
, g* a/ i/ f. ^+ g, \#if 0
/ P& ?9 Q9 V/ X- Q* Q. i ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
+ ^ ^2 J0 Z& E) R7 `$ W& I if (ret)1 N5 B) U% ~) i( s9 Z& h, t0 c
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 @. Z9 e) m0 I/ [) R; R "%d\n", ret);1 r4 R" \8 x8 }$ ?
#endif8 P( K- z- z6 v% h. s
ret = platform_device_register(&da850_evm_tl_leds_device);
7 J1 {: f" s% F% g! E4 i if (ret)9 Y% ~6 t- B$ K: l1 P6 B# d
pr_warning("Could not register som GPIO expander LEDS");6 c' E" B( b/ C8 e2 a8 \
else2 N, C5 d! H9 F( P' u0 }
printk(KERN_INFO "LED register sucessful!\n");5 @( X& s3 y$ Y* y5 _2 v
+ y9 m+ K* w5 [# K3 t- q return ret;4 m. \6 i' |1 ]
}+ y. } U/ \6 a [: }
7 @9 F2 h* O# u& X4 L( F
static void __exit led_platform_exit(void)
3 L4 Z) n3 P; G" F{- B2 a) L$ P# g* l
platform_device_unregister(&da850_evm_tl_leds_device);
( t0 Z% j8 {) ^8 T" Q7 E% \
7 {' l1 [/ |1 w+ ^2 ]& R printk(KERN_INFO "LED unregister!\n");
7 R3 I5 F' v5 Q7 H}
- p3 L% M1 C1 ]& r1 r' I- r
4 v" C2 M1 x& w+ D/ \, B/ Hmodule_init(led_platform_init);7 {% W, A" Q7 ~7 F8 S1 `% l8 k
module_exit(led_platform_exit);
- H' V" V9 I3 C
; ^6 e! Y" W# ~: ZMODULE_DESCRIPTION("Led platform driver");' P/ P" }5 ]' X- `6 z. e" V
MODULE_AUTHOR("Tronlong");
T4 S7 @. c" L2 b4 lMODULE_LICENSE("GPL");5 G7 x8 \& h; l- G4 j9 {2 p) M$ ^4 ?
4 J7 X) V* F: h& |% O) S |
|