|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 a: U2 T3 ?" q
#include <linux/init.h>4 C2 a0 o, O5 T% T9 T! j; @3 ?
#include <linux/module.h>/ K. v" u0 o2 {
#include <linux/kernel.h>
9 T) w6 _# E! h a; @3 Q0 q: I#include <linux/types.h>$ O7 I# @( t9 p; E2 r1 Y; J
#include <linux/gpio.h>
+ I& l/ x! m7 t- h#include <linux/leds.h>, ]9 T1 A7 f7 y- v% u* L% l. Y
#include <linux/platform_device.h>
1 B3 W! s$ w% f4 c# c0 g. |% r% {7 I- A
#include <asm/mach-types.h>
; e# C7 K/ R5 S0 _2 I#include <asm/mach/arch.h>3 T- d* t3 P9 I! k0 |) o4 X3 {" V9 j
#include <mach/da8xx.h>
. ]1 b, u% {. ]& @- S0 I! B#include <mach/mux.h>
# r5 F* R o& d/ r( z$ P( g
/ l% z5 \' M& d! A#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
: r- @8 j% A7 H( A% j#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' R. a9 x+ p+ L/ A# @#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& V' d; g [6 L#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 t, m8 n& y9 F9 N; ?% ]
. ~8 `7 O- S6 k2 @/ }7 B. g/* assign the tl som board LED-GPIOs*/' N! M$ O% u: l# v- W6 \" J; d* J
static const short da850_evm_tl_user_led_pins[] = {
1 r+ Z2 D4 D4 v: o8 E3 u$ q8 b /* These pins are definition at <mach/mux.h> file */
3 Q1 c' r" \* {# K7 _% Q) R5 G/ ?/ I DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: e1 H$ \% W$ E G+ j
-1
9 @, x8 \- e% x};+ K1 P. x2 p& {& }9 N4 k( L
: s) t) B/ u/ G {
static struct gpio_led da850_evm_tl_leds[] = {/ g( |( H9 @% R6 m# J1 p
{
) y) }; a; Q$ Y, f .active_low = 0,
+ O7 t! I; l; e5 Z" u" P8 K .gpio = DA850_USER_LED0,
/ j4 k7 s- a9 |" f, P6 Z) X. e .name = "user_led0",
$ T; C8 G9 C0 O. U .default_trigger = "default-on",
( @: ^7 Z9 [4 O1 E. R },% n' p) w4 P1 \( G, l
{2 I+ k Z& _/ C% Z/ X! W t
.active_low = 0,
0 n) B( W' ]' s1 R .gpio = DA850_USER_LED1,3 j7 Q" x- Z! z
.name = "user_led1",
9 k: U' d. }, |8 d8 D .default_trigger = "default-on",
- O+ D. `$ U! z: e% G },$ D/ S0 z' h. f$ d- p
{1 m# u1 h" W+ ~# [, ~: Y2 f
.active_low = 0,& o% A6 v# o1 z' J; N; O7 K
.gpio = DA850_USER_LED2,
8 u& Y" i! N5 d2 `/ g; z+ P .name = "user_led2",
- V8 m2 o& P" s! S8 ^ .default_trigger = "default-on",
r8 L. O( X% R" E },
; K5 w6 ~1 g" B! |5 P {
0 f# A/ I5 w4 o4 V5 |2 _. P .active_low = 0,3 G. \& R9 i7 B
.gpio = DA850_USER_LED3,
1 _% B( e7 u9 x* r! _ .name = "user_led3",2 z. W1 n8 O4 c* r2 \, i
.default_trigger = "default-on",* v2 n, @/ ?4 I; m8 T" d) ]+ F
},
Z1 R: s5 P: ?+ \8 X};
/ F. s# i1 K4 T! V& t; R" @4 H5 ]; T% k
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( [& U0 \9 v* h4 r/ l .leds = da850_evm_tl_leds,
9 P7 T1 _+ T5 _$ N+ u1 D$ f, O" T .num_leds = ARRAY_SIZE(da850_evm_tl_leds),: e. u4 ~9 F' [ v5 K# Y) _8 L
};
% G# M7 E! e3 g) ]* I
. p0 F; ]5 N; v0 q- L, D( Q- Rstatic void led_dev_release(struct device *dev)
- N' V; e2 w7 U" T3 N p0 x Y{* J* v8 }0 L; D
};8 ]' q2 r6 Q- d; Y
' h6 i, v& F* L( ~1 Sstatic struct platform_device da850_evm_tl_leds_device = {4 r/ X/ n" ?3 ]7 q, v
.name = "leds-gpio"," a- A) c" a& Y6 C/ [# V
.id = 1,
+ ^* |, w3 p6 B: r8 O .dev = {, f" _$ Y. w) @ V, |7 ^% l# V: b" \
.platform_data = &da850_evm_tl_leds_pdata,
6 s* P2 V% @3 H1 ~' @ .release = led_dev_release,
$ L/ v% C) q+ r* \; b }. Y+ u( h9 o+ {: B
};
3 B) b' @. m3 x" u6 _* V; m
" \$ h K1 T' ?static int __init led_platform_init(void)
$ E8 o) y2 d7 s2 C' G0 S{
1 U! b: g7 a( Z1 m$ [+ P int ret;
8 d# N& C' Q: H, Q. ~6 t) X#if 07 f3 z- m; W1 m( |8 F& r8 H v
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 h1 @, Y7 M9 P% E" M% Y" ^ if (ret)
7 X6 l' u# l8 V) d pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
" A- U. Y; w' g- q' j7 _ x$ \ "%d\n", ret);7 U7 v7 c% w5 l, a
#endif, c; B- W2 \8 ]
ret = platform_device_register(&da850_evm_tl_leds_device);. X7 b8 t* g5 j7 E
if (ret)5 ^, B, k' O1 I1 Q4 _7 |
pr_warning("Could not register som GPIO expander LEDS");
; @" r% w& M: m2 T; X- A else
8 R( ~# T+ { z R' o! m* [8 V printk(KERN_INFO "LED register sucessful!\n");
! C% e. v1 }! z
2 r. S( Z) b: G% h return ret;) {# r' g4 M2 M6 R! e$ z0 v
}
9 B5 ?; m( Z* Z) l/ O- s! G! P* b$ x+ ]) z
static void __exit led_platform_exit(void)
`; L0 W9 z: m% F0 V0 D{% m* a' [' s# ^, V1 j, v
platform_device_unregister(&da850_evm_tl_leds_device);
9 t9 T/ K( ~$ l- S6 [: E
: g1 Y- j+ h2 \* x. K1 J printk(KERN_INFO "LED unregister!\n");
, {0 c/ _6 D7 t) Q}+ `9 O4 _: S# u: q K- w
2 B% N6 @2 R# D
module_init(led_platform_init);' r& i) l! V. n
module_exit(led_platform_exit);
( T) `! C9 g- i/ A
4 n; [" P+ {$ u( _$ RMODULE_DESCRIPTION("Led platform driver");) i' T9 f7 t2 Z# n, _ |' ~, e
MODULE_AUTHOR("Tronlong");
/ Z: {' j7 n% B3 a5 W1 ]( s; `' qMODULE_LICENSE("GPL");
7 w7 h+ F4 Z8 k) _( \; q) Z- Z) m! n! r0 A3 O7 ^4 A7 s
|
|