|
|
求大神给下面的程序做注解,请稍详细些,谢谢。' X, K# r) R: [- `$ k$ H# b9 s" i
#include <linux/init.h>
7 f0 G1 j1 R$ I+ Y* d! E#include <linux/module.h>: ?* S- q" T! n. c! s: I
#include <linux/kernel.h>
7 s! g- y: J' e: @% [#include <linux/types.h>. I q" F- u; m3 ^/ U3 w7 [
#include <linux/gpio.h>) T. g* X9 v/ n" R ]( e) F' a
#include <linux/leds.h>& a4 P& G) q/ _! @. q k
#include <linux/platform_device.h>
# z: z7 O3 j0 ? V- v# E/ G4 G: ^
- X! k; x( }, {7 \( I#include <asm/mach-types.h>3 u) ^- B+ C0 k* ?+ s4 H/ I: R3 K
#include <asm/mach/arch.h>
* r/ S/ r& r9 i/ ?; y% I. ]#include <mach/da8xx.h>
. P: G" F- l$ R1 Z4 ?( z, C#include <mach/mux.h>4 n1 `7 Y6 E s: H
" @5 z; @, ~, V& z#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ m( Q1 `+ D# Y* w#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
/ K s# b- M) f( l/ c( j#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
9 L6 j2 t0 u# N8 k9 s#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% E; }/ r, Y, M4 K
! U# s8 ` M, l7 |' T4 B& L/* assign the tl som board LED-GPIOs*/
9 ?% E, G. P8 p& O+ w' H1 Mstatic const short da850_evm_tl_user_led_pins[] = {
( T4 ^, M( @; w% Z+ B /* These pins are definition at <mach/mux.h> file */ W: n$ {! x- c* G- {3 m# d( w
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* v1 @ m- S! G1 U8 V, j
-1. B5 ^$ J% g4 ~. H' _
}; k* T1 E! p3 K, P" |$ Q
+ g: R3 B4 y6 O6 z% W; @static struct gpio_led da850_evm_tl_leds[] = {
& Q- _8 p4 b* ^$ N/ o {
2 \/ w- y% q# c# C6 O+ \, f .active_low = 0,
+ [0 F5 S) A4 b9 z- W; T1 l .gpio = DA850_USER_LED0,
K1 Q- A+ \1 }7 o .name = "user_led0",
# u; T' R7 M. m7 j' W1 s .default_trigger = "default-on",8 C- i# ^0 W1 a. S# [
},
) L, E9 b$ r' A {
8 `5 k: z% o k9 w2 U .active_low = 0,8 _5 Q9 p7 ^0 R5 C
.gpio = DA850_USER_LED1,+ {9 z, A" d& W' c. o5 W
.name = "user_led1",* }; p/ D0 D& {- b' N; i4 L
.default_trigger = "default-on",
" ?8 t! \* J+ E4 | },- C$ B9 g: Z4 ?, `7 M; S) b/ r
{6 i/ R. U1 t8 \0 f
.active_low = 0,
; Z: z' @# C" s$ {5 B& V .gpio = DA850_USER_LED2,- G3 |$ v0 m$ L: e2 L) S
.name = "user_led2",$ g1 s- V H# v* S
.default_trigger = "default-on",
. T- k6 M: R$ ~ },
# {5 d/ W8 q. m3 S {
1 h, |* i; j0 _: w' @5 e% e .active_low = 0,
! g) t- v* O; z .gpio = DA850_USER_LED3,1 c$ R8 M4 n R$ X# |; I" z, e, _' p
.name = "user_led3",3 N( ^ b& j- f- ]2 U
.default_trigger = "default-on",( s" e+ {, x' ^' Z( T
},/ X) [( M0 r0 m+ J( G
};- v: L/ N) r8 \: p- q; p9 j7 V d
2 t t0 X; A% N O# w
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 `% o8 f- x1 e! d .leds = da850_evm_tl_leds,
/ E2 q$ y' J" E/ s .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
b! O- Y; O* C* c I* O! B};! k: M) v3 P+ h6 s7 _ H! D
2 _% G3 x P) h& K/ S8 S8 @4 ^static void led_dev_release(struct device *dev)) i/ X5 P, T T5 Z, \1 Z. Y# ^
{% u$ L4 M1 B8 z* x- x$ e- G6 `6 ?; {0 X
};
/ `% C) z" ]7 r& N) Y, S1 G$ ]+ `' Y* G
static struct platform_device da850_evm_tl_leds_device = {8 d. P5 e6 f9 f" ]1 }4 s' ^
.name = "leds-gpio",
4 Z9 V* u# C t3 D3 |9 A& I .id = 1,
9 ?2 ]" w: A. F .dev = {
* ^! _2 m& T$ l! h .platform_data = &da850_evm_tl_leds_pdata,1 `, ?0 H4 D- N4 E, A
.release = led_dev_release,6 j' V$ E' d2 ~+ A4 _1 a+ n1 u
}
* X8 C8 E; ]: T1 A" E0 ^) r1 S' |};
( m' X4 k7 t# `% ^' b( ?( V" k
. h6 p! f1 L: o; q' b/ \% istatic int __init led_platform_init(void)' p' a5 H& D, A: _
{$ r% F/ V9 {6 j1 X4 C6 Q
int ret;' f" B' l, Q% M' o
#if 02 a6 P+ o$ D" [; R, G& I4 O
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);8 J% ^4 i! Q, x; W3 l: d3 J7 _
if (ret) q' U `' X$ l8 [, P8 q
pr_warning("da850_evm_tl_leds_init : User LED mux failed :". i Q% l( ?! a% f- I6 R% ?
"%d\n", ret);4 O% Q5 M: K' P; F: ?! i- y5 J! _
#endif
8 ^, g+ @( w! E1 O* S ret = platform_device_register(&da850_evm_tl_leds_device);
. x2 Z) G" ^0 I7 ` if (ret)7 W( e8 E3 y1 {+ q+ U1 ?
pr_warning("Could not register som GPIO expander LEDS");
/ B6 V* N+ B2 x% @% P else
# C" O6 w/ l n printk(KERN_INFO "LED register sucessful!\n");
: Q# H' e) V% q! X" z( w8 M/ Z! `. G' z# y
return ret;
, ]$ \" K) a' g3 q) c}$ `% B! @0 @' Z
( n9 x$ g( q6 V9 l3 Ostatic void __exit led_platform_exit(void)' g6 Y; ~- K0 _
{
, }0 V5 L& W& W/ t8 G w platform_device_unregister(&da850_evm_tl_leds_device);3 O" N" v0 N4 D _8 F
1 t& N( {; G3 v
printk(KERN_INFO "LED unregister!\n");) O7 T5 h: f/ @( X
}
) F2 @( M6 B9 q' z- X0 [
: Y( C6 m5 M) @5 z2 m5 ~0 dmodule_init(led_platform_init);
R4 s( `$ B D, O2 t5 |module_exit(led_platform_exit);
5 R" n& h8 }7 J7 s" A- ?1 _- F1 j5 q: o& P5 v* o& t; F# I/ F
MODULE_DESCRIPTION("Led platform driver");: c; S& d8 K( [" Y- C D
MODULE_AUTHOR("Tronlong");4 H- M9 Z% b1 {9 k* a
MODULE_LICENSE("GPL");/ M9 v; f, T5 e9 _' V7 g
. j, k- ]7 x9 W: l1 g |
|