|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 t9 ?' p% X. X8 d4 {1 v4 I: Q6 ^& l#include <linux/init.h>
5 D0 @( R" t9 W! _& b% W#include <linux/module.h>
% C" F. i. \9 N, f. Q#include <linux/kernel.h>" ], t) h- Z! b7 A. U
#include <linux/types.h>
$ L5 y; O* B6 O) t#include <linux/gpio.h>/ g8 F4 u: J" j/ n! F% D
#include <linux/leds.h>
' c* H$ W6 C. s/ M" P2 C [#include <linux/platform_device.h>/ m; b5 V c( @6 Z3 u
^5 h" R6 h; f* F& D F/ D2 [#include <asm/mach-types.h>5 _ n& M# B) v6 _
#include <asm/mach/arch.h>
+ z8 {& J1 K- z) e#include <mach/da8xx.h>/ | Q0 q) C8 L" B
#include <mach/mux.h>! i: A3 W! F# |4 O! V% }. a
- I% [7 c3 }1 o#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)4 V Y& l" J( v& i
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
4 t* T8 c+ y/ Z#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" }/ m/ Q& V- W3 \ a
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)0 w7 l% X& V$ C6 S
5 E1 Y* d" G! w2 Q! u& j/* assign the tl som board LED-GPIOs*/8 N6 d4 t6 c3 y9 P! K; ~
static const short da850_evm_tl_user_led_pins[] = {/ g$ @) S+ w% m5 M! p- |2 @8 A
/* These pins are definition at <mach/mux.h> file */
3 a. w: q4 Z: J5 Z, H DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- a. p) v0 f: I' r1 l l
-17 M, o" ?; o9 T5 m4 R% v; ^& M
};3 c) e( ~# u; v$ q
' i; c) X7 N5 b+ D; c6 z# astatic struct gpio_led da850_evm_tl_leds[] = {6 }' B% I0 d$ f8 D. `; ?& s
{
; M5 s. v5 Y" v6 L- w .active_low = 0,/ [4 z% {9 r$ O4 ?( v* n5 V1 C: v
.gpio = DA850_USER_LED0,7 k2 f" F- c4 v2 g- C: K4 _' k2 k
.name = "user_led0",
" s J$ M' x$ E& x! U8 g .default_trigger = "default-on",+ U5 \. G4 `+ G7 W/ f
},; o" N( T4 X' e' r# v
{" a% s7 N+ |7 g7 s6 ?- h C
.active_low = 0,1 \8 y& o2 n: y% |
.gpio = DA850_USER_LED1,
3 ?8 r/ F; U2 t2 k' {. D .name = "user_led1",
+ G k a# V8 p8 i% b S .default_trigger = "default-on",
) {, D4 j0 Z1 B& q },# j% A4 g% g; Q0 V
{
% p" l ~& m& I0 I7 _ .active_low = 0,9 N& I5 f4 U% @
.gpio = DA850_USER_LED2,) n; P+ D. l% O- [1 i
.name = "user_led2",
" t8 ^6 \1 l+ U Y- Z .default_trigger = "default-on",- ^: ^% S* e) C& E" ^
},# B( e9 ~9 ?9 p' {: v. F
{
" j7 h6 u3 \5 ^: Z9 E .active_low = 0,: u$ U# G: I# p! d' j
.gpio = DA850_USER_LED3,
9 _8 `: J& o! \, @3 ? .name = "user_led3",# a8 e# R' L; O% v
.default_trigger = "default-on",
7 _+ M; N: _7 H" F/ I. } },5 O3 d1 J% n- T9 R# h0 R/ R
};' E; I# x S B( P, u0 T4 n6 h
8 N# U( `: S3 |" n; n9 Y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ @- ]* p& B) V3 N% h! H5 a
.leds = da850_evm_tl_leds,1 N8 X L: T+ w" N8 f6 L
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
. D5 a: B/ i; ^& h' @4 n};$ L+ [2 {& W. i3 V; @$ A% E4 [% b
5 A: h% W# f3 U3 H7 y0 z! Q, N
static void led_dev_release(struct device *dev)
8 g) z+ s# y6 {9 O2 e8 e: |8 B! d8 N# {6 Q{! W: R- G3 n& L y
};- _) T* p: u; k4 c3 k
+ k; [# ]% e$ X* z; g+ Ustatic struct platform_device da850_evm_tl_leds_device = {5 o& v n* n& v# R
.name = "leds-gpio",$ B( e" I% y! L/ k5 m3 G: _
.id = 1,
, `4 u" H) r. V Y) Y1 P6 | .dev = {" A- L3 G! p0 _, M+ \/ u0 t
.platform_data = &da850_evm_tl_leds_pdata,
6 Z4 J2 j* D; n. g .release = led_dev_release,* ~+ k8 S$ |: O3 a& f
}
' J | G4 r1 F0 K6 ?/ t! W};2 O; D! x# I6 Y7 v" w
+ A7 m: r; L9 h9 o+ C# C
static int __init led_platform_init(void)
1 H6 v( M& A' _ z{. I. G% L' b6 u3 B" |# x$ K7 X
int ret;3 [! \5 Z+ x' c% |3 a L# j% n, b' B
#if 09 d# R4 ^% _7 D8 m
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);; j+ ~7 t" y8 \$ {1 u
if (ret)
" B% x0 U* z/ L+ {" b3 k! k8 k pr_warning("da850_evm_tl_leds_init : User LED mux failed :"$ B: Y5 Y, c' _1 B: v( g+ g+ Q" D# M
"%d\n", ret);2 f: k* @. N7 a `$ }2 U
#endif
4 t8 `7 \) A, k! f- ^6 q1 s; V* L ret = platform_device_register(&da850_evm_tl_leds_device);( M2 ~8 _) ?& d# b; K
if (ret); W+ l) W9 R; T+ _& O
pr_warning("Could not register som GPIO expander LEDS");
( a* y& |$ X2 C) h else: F' n% v8 s9 j5 n
printk(KERN_INFO "LED register sucessful!\n");
* J; w$ W3 L- x- I6 A
) n2 i$ l9 z: }" V5 G8 `2 Z return ret;3 L# }: k. J2 ~6 ?
}; K+ D7 K- j' l6 ~
7 S3 J, M e0 ]7 C9 r, M3 n* J1 X6 ^static void __exit led_platform_exit(void)2 J8 ~8 {5 [9 z7 [
{; I+ \& ?$ t2 \2 A
platform_device_unregister(&da850_evm_tl_leds_device);. P; ~' ~ M: `6 J
. S9 v! L* O: K5 H printk(KERN_INFO "LED unregister!\n");
! U$ U0 h& D' X. q4 d7 h}
* I. z: c0 {1 [& A; O& D q
% K" w1 E$ B1 J5 P3 Tmodule_init(led_platform_init);5 E. s) R! b* S6 V& w
module_exit(led_platform_exit);
. ~4 A f" S+ G% [ d1 u; G. Q% Q7 C+ u
MODULE_DESCRIPTION("Led platform driver");
. R( V& B1 e& B/ f' e' Y6 { P. jMODULE_AUTHOR("Tronlong");
- \( o7 q1 b0 i, l9 vMODULE_LICENSE("GPL");6 _5 F, Z% J2 i+ b
) Y" `' |; n0 b* ]+ z |
|