|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
, y/ W2 \; O. L+ F#include <linux/init.h>& f) M& w" N+ p: g
#include <linux/module.h>2 l5 v. }+ D$ c
#include <linux/kernel.h>
! b% v' r, \! h3 R4 n! z- R#include <linux/types.h>
% U c. d, u- X/ c k0 P/ T" A#include <linux/gpio.h>3 W2 f0 m( a: v& b
#include <linux/leds.h>
* E& P! z* g. C9 @#include <linux/platform_device.h>
2 q/ ^9 s$ s" g
1 x: p5 F* Q+ _! I#include <asm/mach-types.h>
5 j* E) ~3 r* P$ V4 {. N#include <asm/mach/arch.h>
' v" ?8 h! o, R. y' U2 B% M#include <mach/da8xx.h>, z; j2 \5 O' t1 b9 Z# g" z' M
#include <mach/mux.h>1 A3 s6 J2 I% {! v$ p
" H' D% J4 ~& c. i5 G. J% h#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)" l. ]8 G! d. j" f9 B" N# U# d
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
}2 J2 }5 A# g: l: a, ]4 T#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)! M$ j4 N j% t, T) T
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! ~8 R6 r5 T: b# S+ q5 X% Y
: {) Y/ Q+ e# X/* assign the tl som board LED-GPIOs*/
' }3 P1 X' B( J6 l$ L# sstatic const short da850_evm_tl_user_led_pins[] = {
. N2 `+ @9 C) { /* These pins are definition at <mach/mux.h> file */7 S I, [7 L* \- C q4 b2 @, L
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- n* G8 M3 g. ^8 Y
-1
% |% p. v0 ^( e- X1 A& ^- g1 n! J};+ m" }$ a0 `* t
" e6 i- f4 m7 R* S! _% S& P; i
static struct gpio_led da850_evm_tl_leds[] = {
8 |1 f b( S. a5 V# S, Q/ v: L7 k1 ~ {% T( T& q' F$ q# r) X/ z% v- T0 s
.active_low = 0,
& J0 y& s8 f- n Y8 _ .gpio = DA850_USER_LED0,( x1 ]* o7 o# {" i
.name = "user_led0",! K) M) i% \7 L) \, T! e7 h2 {
.default_trigger = "default-on",
0 ]# W9 c% [, O6 _! w2 o },
/ F/ K' {! P# l1 c {* _7 V4 \" q6 I/ a( W7 L
.active_low = 0,( ~. F' v$ E' F
.gpio = DA850_USER_LED1,
: ?# n1 ]# K. y- \) s .name = "user_led1",
~2 Z% [; [2 ?: O1 m- Y .default_trigger = "default-on",9 P( B. R/ [% ]1 i) _6 P a' Y
},
% i# f5 P8 T7 B) Z$ F {
$ B% d0 h! Z& B* z O .active_low = 0,% l( ]/ Y( u5 O" T8 v6 _
.gpio = DA850_USER_LED2,
2 O( h$ e- ?" B. E. L3 ? .name = "user_led2",
4 v2 }2 \! R* |, l; \' r .default_trigger = "default-on",
+ { u0 N6 u5 E- k },& _) _; @1 e! R b7 E$ V' g
{
9 T- I" l" ?3 I7 f% N5 W" c- Y; ^ .active_low = 0,( W: W& s, u0 \0 H! A
.gpio = DA850_USER_LED3,
& s0 N+ s: ^! U! v .name = "user_led3",
8 D8 }1 Q; M" k% S2 N .default_trigger = "default-on",
0 V; V r: k5 @! ?. C# h },
! x0 Y* O, m" g) R$ y1 F6 s};
# L" v8 _8 z q! P3 E8 t. A. j$ v2 E& P3 _. r2 o2 }
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ j [# N, G! m" b3 _
.leds = da850_evm_tl_leds," O& G$ ?9 l" n- [7 n
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),. P4 c9 z0 }& A+ f" d) N* `! W
};
- o+ \9 O- A* M' V1 D4 N e8 r4 I6 |
9 w4 u% |8 ]6 ^: k H/ t+ Ustatic void led_dev_release(struct device *dev)
p6 }5 ~( h g2 ?: B: t' y{. \' {$ q/ t' S! L- F
};
) y" f {3 `8 N' u2 b' r, _4 s4 r r2 i
static struct platform_device da850_evm_tl_leds_device = {
7 A7 m3 z; P5 C .name = "leds-gpio",
/ ]% u) T9 ?. e3 |' `; v8 | .id = 1," P6 u# n' H2 M. o8 V1 h
.dev = {0 ?- E$ k% N6 y4 e4 J% X. Q& X) q% V
.platform_data = &da850_evm_tl_leds_pdata,! e9 P! O4 C9 O* ~/ Z. G3 @
.release = led_dev_release,
2 t4 o2 }+ P' z! E- w( f$ u- {: t }
: q, i& E+ k7 ?};- s; [4 {8 L& {& Q
5 E$ C, E! m) s
static int __init led_platform_init(void), x* P* _* o: O# ^
{
9 ^" ^# N4 X5 l6 S int ret;3 p5 w. r( c8 b y3 K* {
#if 0
$ k0 M" q i" U1 S, d ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); {8 @7 h- R7 d
if (ret)
' c* O- \$ H0 C' B8 H. E$ R4 ~ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
5 W/ Q5 w& s: H+ m" b "%d\n", ret);+ f# n' `. Z7 k7 J
#endif
9 a7 j4 m% b- r% i) M" n( e- w ret = platform_device_register(&da850_evm_tl_leds_device);
( g6 p1 P* Z, f0 k4 W8 ~ if (ret)
0 Q, R% f) a( ` z& z; l pr_warning("Could not register som GPIO expander LEDS");
- s0 L- @7 w8 ] else
& n+ E$ E% J( y) m& R5 [' }5 i2 g { printk(KERN_INFO "LED register sucessful!\n");
& }: G) E! A: P" S! R5 [, o
* o$ j- R! l: `. o return ret;
9 x5 e$ c. J$ S, T. T- s! E}
( C. C0 k0 {+ q- a0 s% e( P4 X9 v) X) t: }3 ^/ e5 \9 K
static void __exit led_platform_exit(void)9 w e: d8 a& d& K5 b9 z, k, F
{" ?! P" ~9 U2 ^8 }6 O
platform_device_unregister(&da850_evm_tl_leds_device);
* S" b4 o3 _- F# V; |% M W7 \* e9 W4 Z2 H. D9 H
printk(KERN_INFO "LED unregister!\n");
5 W7 w O; Y6 v# U- c}
" X. b& Y2 p* v: _$ E2 T3 J% T+ Z: q/ f: ~! |7 P
module_init(led_platform_init);$ g2 D# }. x0 h I# D7 t
module_exit(led_platform_exit);; D2 Y* _( |* e+ u! h* P+ k1 T+ p
7 u3 ], ]" g: I# n4 \! @MODULE_DESCRIPTION("Led platform driver"); F, Y% T6 y0 d, O8 X! G6 C
MODULE_AUTHOR("Tronlong");
. a( S6 L0 ^# J+ N7 H1 xMODULE_LICENSE("GPL");
0 s& ^/ @) Y: Z) P# D4 c8 e+ M, k9 n3 h$ m, G
|
|