|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 _+ G; W* {4 `#include <linux/init.h> k7 f2 M) k, W& z2 x! m
#include <linux/module.h> ^& H: U! f1 |/ o- i* j1 g; E
#include <linux/kernel.h>: x) G* v8 v' ]" B7 f
#include <linux/types.h>/ a! U' O' l F. A: J, h
#include <linux/gpio.h>* r# E( a# ?6 M1 H
#include <linux/leds.h>* b7 N8 W, }2 K5 I
#include <linux/platform_device.h> E0 y/ S- I/ }! H- {/ t3 X
9 @% |$ K# N! [9 k( t+ O& H/ d- y4 n
#include <asm/mach-types.h>
7 i( P0 ~- ~* K#include <asm/mach/arch.h>
# N& j0 t( W3 w! z) Z p8 j. z#include <mach/da8xx.h>* J! B0 o0 k E H6 c8 p
#include <mach/mux.h>( m6 K. Q' t2 [
4 q* }( K4 j4 t#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
' G( h: g5 i/ @. c8 ?, a9 l- S#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' v J' [/ ~5 P7 o#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) I; V7 Q3 N1 X
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2): y B. `2 O x8 u" h) u2 @9 x
5 O7 {3 v y' k2 W$ W {/* assign the tl som board LED-GPIOs*/2 a& Y u. G5 q6 h/ G! `
static const short da850_evm_tl_user_led_pins[] = {
( { H/ B1 X! G3 G /* These pins are definition at <mach/mux.h> file */
2 y9 m; d T) n: d DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, h2 h$ z( Y2 e$ c2 L+ ~; i -1
( F* y- q# M5 g};: e" Y5 X$ [+ J* d& S( c- z
# L @4 Y- N; x. N' xstatic struct gpio_led da850_evm_tl_leds[] = {
+ |6 a! x$ R; M1 C! G" H {4 P- U$ }. U& y, U) B8 A& ~
.active_low = 0,
" h; n% ^$ U7 R9 h( l .gpio = DA850_USER_LED0,
8 A! r/ Y G) Z1 l+ L; S- K# |: n .name = "user_led0",
4 p# G0 i+ T( q9 U0 b( P5 y; A .default_trigger = "default-on",) T1 ?8 q, g; I* O' L: @+ _
},
7 J2 @) S8 m# K- D" G5 g {! }8 @% F& m- ]9 C6 x
.active_low = 0,
* I" z+ O7 l# w5 c5 _2 V .gpio = DA850_USER_LED1,
. B& F! i* {* n" b( s8 n .name = "user_led1",
; }4 p% c1 ]+ y2 ]7 b2 q+ h8 q .default_trigger = "default-on",4 r! s: o2 N4 o# X) {# \8 Q
},' X7 Z' F! S" V9 X0 Y
{, p9 I. ? X9 e8 o3 ?+ d) L
.active_low = 0,! X& E* r0 O. ^' p& f
.gpio = DA850_USER_LED2,# a( H2 e) A; t
.name = "user_led2",
4 y9 X% A* {2 q0 R .default_trigger = "default-on",
K/ F, o* L) V+ P. v4 Z },
* p/ R( P3 t# {; J {
% P; H- W* M# |! w4 ~+ j .active_low = 0,( @# `3 o1 o- n+ ^5 {$ ^2 e- l4 y: i
.gpio = DA850_USER_LED3,( I# p- q' N8 s1 A, F
.name = "user_led3",9 h& |) \" }2 T$ K: n- h$ {' t7 Z
.default_trigger = "default-on",& d! E6 \" h0 g9 [) d, p4 P
},% V$ d6 ?# j0 x8 J
};
% I3 g6 H% }/ e( ~
2 h! a; Z( n& J) F; k& }static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 V2 c( D1 V' v, S
.leds = da850_evm_tl_leds,
. N6 r% X- k! X .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 u1 _* ^, A9 |) W% ?; |9 p};% h4 d6 U+ } i! E& w. m
5 p J0 t+ e8 \/ g8 d5 W( P
static void led_dev_release(struct device *dev)# N+ D7 o9 u9 k& X) O( Y. G8 U f
{- u/ ] @! s. I( c) v7 V" u$ o! b
};
% H/ U9 d5 o2 A6 i- s O/ Z% q8 t; n$ |6 v7 J! W
static struct platform_device da850_evm_tl_leds_device = {9 o. \$ B4 s0 H2 h' E# V2 P# m
.name = "leds-gpio",
" ^1 s+ @. j( l .id = 1, @" J0 w X! P6 U/ |$ R
.dev = {
, E; W9 A( E+ n .platform_data = &da850_evm_tl_leds_pdata,0 a |7 o2 _' F/ d! _
.release = led_dev_release,
( e0 G& o3 z+ F. w, O }4 J$ w& \6 d( F6 o! H4 g% B
};% e0 o- V/ M, [* {3 a) B8 ]
) Y: p& g6 b1 x5 [* s
static int __init led_platform_init(void)) e7 [4 U, y. v( E2 {* ?
{. h% ?8 M1 h& H1 M, ]3 ^
int ret;& }( |8 }9 E0 _) n! l
#if 0( T# J0 i1 o4 b; k, t
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ d3 W/ F7 F# M" R5 R6 R/ B if (ret)
: F/ B3 ]! u7 A, }3 R+ W pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 e& {1 r6 k# Z3 o "%d\n", ret);
3 T3 H. s( t; {: V) g#endif' M# s. V9 P% G+ C! ?
ret = platform_device_register(&da850_evm_tl_leds_device);# n/ S4 A6 B$ ^: i+ o
if (ret)
: d) p' B" m% F; N pr_warning("Could not register som GPIO expander LEDS");
; J* ]- H# e( } else- ~7 D# b; W* F A( _: a
printk(KERN_INFO "LED register sucessful!\n"); V- k- h' H) H' T" `5 p+ D7 e& x8 J
+ h3 G+ V" z) a) Q+ Q8 v) \/ G, |1 ` return ret;
0 i* Q2 ?& \0 ^/ W" T}
; @- N% \# \& }% j4 y# n, i/ a W) v p1 j4 S
static void __exit led_platform_exit(void)& _. z, N5 `/ j; c+ v
{
" t8 \9 O7 M4 N% J/ h7 A platform_device_unregister(&da850_evm_tl_leds_device);9 q9 H( i, O1 u( W/ E! ]
- i, V2 ]% g$ E/ i; h7 N
printk(KERN_INFO "LED unregister!\n");
, m, P* G( ^% n: k}0 R- t# e+ p1 x% K) X
3 M3 ?0 m: `6 v
module_init(led_platform_init);
$ f- \8 P$ }* J. m1 S! e( R' M4 qmodule_exit(led_platform_exit);* t% K$ m/ n+ P! h; k/ Z
, D6 T! u1 N( i! O5 ?MODULE_DESCRIPTION("Led platform driver");) X6 \+ ~2 e/ I$ z
MODULE_AUTHOR("Tronlong");5 g( _) w' ^( M# ^. F: E! ~
MODULE_LICENSE("GPL");
0 Q1 Z4 ]+ E4 v# q$ [$ I6 j, L7 w$ @. C! \3 @
|
|