|
|
求大神给下面的程序做注解,请稍详细些,谢谢。* S9 p4 x+ I' z1 Y! j
#include <linux/init.h>
. g' w6 P+ n' P& ]& W E& `#include <linux/module.h>
' O; l) ]( |% z$ D8 m#include <linux/kernel.h>
. a( ^) B+ o, m! p' W#include <linux/types.h>5 j) Q2 n M6 x! }% y% b3 m
#include <linux/gpio.h>
; ?5 H' M6 W+ n3 q5 t! [#include <linux/leds.h>
+ J% A$ `5 [- I8 V' }, w#include <linux/platform_device.h>& l& g6 v& G" ~+ i O
$ U" N- ?' p% N+ p$ U9 c
#include <asm/mach-types.h>
/ i. y: Q. ^/ ]1 z#include <asm/mach/arch.h>
4 P8 y I% B& M$ P#include <mach/da8xx.h>
5 A( `* E0 M0 S9 H H% C/ u4 D#include <mach/mux.h>
' `1 u, I; K* t
# v- ]+ V& F D#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% Q2 W& G7 s8 `" S#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
0 h2 t' l& @6 r5 q- f1 ]#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
/ G/ {" u, M) Z! ?6 I#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 e, n7 w, M6 H# ]: _; D" z
8 d$ f8 g) u7 Z3 i: n7 k6 x/* assign the tl som board LED-GPIOs*/2 V/ I j7 r# F+ h9 m) V# W7 E
static const short da850_evm_tl_user_led_pins[] = {7 @6 U0 d8 B$ j- |8 w) k- U5 \2 v
/* These pins are definition at <mach/mux.h> file */0 F9 w0 p0 a* N; p m
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5," J3 W3 v& ~2 `) {3 c! F
-1
8 k7 U- `) u! k};1 q% l- y! @4 d& T% `) R
% q w! R' R- Y$ H* W0 nstatic struct gpio_led da850_evm_tl_leds[] = {) ~) h! w2 w7 _1 `! l8 q* u! H) [7 }
{: x0 ^' ~1 U" P+ }7 ?; i& y8 w
.active_low = 0,
" V9 R% v) D+ y# O! O/ L .gpio = DA850_USER_LED0, w8 D7 C2 N( N, y1 d
.name = "user_led0",
! o, G( p- t8 L7 i! \8 { .default_trigger = "default-on",
1 t6 x" P" N( I8 @; q },$ @8 z# c! F3 C0 e2 U* @
{. L! J9 h4 L4 t5 B" y( Z
.active_low = 0,
" T% d' w9 `2 x9 k1 U0 F .gpio = DA850_USER_LED1,% [/ J: D1 V& B! X7 ^3 ]' N
.name = "user_led1",; w/ B/ c2 j# [ W/ p9 I, N2 m
.default_trigger = "default-on",7 \- t w: b9 d5 I" P, ?* W# q6 V
},
. r+ _& o m( L1 Q$ n+ H( P) L2 h4 | {% c% R5 w* X) \" N+ O n
.active_low = 0,
# \6 R' T0 \! k1 j2 z+ R; G .gpio = DA850_USER_LED2,# x4 k" B' E. E
.name = "user_led2",: o3 i- f: [. H ^9 \
.default_trigger = "default-on",+ u; B5 M9 c8 I2 p, A4 L" [3 x
}," ?( L& O: v4 l. a% c4 h7 `' h6 Z
{
* k4 ~$ i0 v" g8 B* e/ ?: p1 w, L .active_low = 0,! ~5 ~' F9 P |9 O( @; b3 [
.gpio = DA850_USER_LED3,9 @: z9 |5 ~3 I& T6 T& y
.name = "user_led3",4 Z! r" c- i( h e* s( u Z
.default_trigger = "default-on",
6 k6 {- J+ @0 M" v! k },' Y p' C" u9 ~. g
};
D) v9 U4 b8 h+ Y+ q
' ~6 l. l+ a# d: W5 @4 w( Bstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
5 o1 Y9 q8 M) E* o5 h1 a .leds = da850_evm_tl_leds,! l5 N9 ]7 P5 F8 b+ M" L: ?
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 T4 ~/ S! Q2 I; G" o7 O8 [6 j Z};
9 p$ c3 T4 F- D" @6 k+ ^* l0 b* K3 B( q2 X
static void led_dev_release(struct device *dev)
$ R0 e& V% \1 o8 `{1 m% ~3 N9 v" L1 i2 |! I* w8 ]9 r
};' p" a- M/ j3 h. Z) B
) F- S6 `* m: }0 x6 F9 Lstatic struct platform_device da850_evm_tl_leds_device = {
; V: H) s; W7 h .name = "leds-gpio",9 t( T f$ J) P! Z$ I# L
.id = 1,, l9 Y$ c5 c2 L- l1 f3 M" N
.dev = {: Q) k# I& V4 p7 X+ L2 ]- B( R
.platform_data = &da850_evm_tl_leds_pdata,4 @" [2 U( [4 i: d5 r6 z; B
.release = led_dev_release,
( U: k4 ~% x ~- K! v9 V% M( o2 F' J: t }
) E: n$ q2 O9 t5 Q};
) K8 S ]' d, {4 L! I2 X$ E7 ]/ ^; o
1 y/ @) P) i/ jstatic int __init led_platform_init(void)5 @0 q0 D/ r/ c7 e. g* l
{8 ^" R6 j6 k6 s# Y# C1 _
int ret;8 a; j P! R+ c8 J8 m& V& J( l+ r& |
#if 0
* u m+ p% e# o% c$ ]8 X/ t ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# E) A3 E5 N4 V, \+ r- a: |
if (ret)+ M5 Q0 E* q3 D; l- Y! v U. s$ Z
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- A$ S, ^( v" i8 g* }7 X& L
"%d\n", ret);
* p0 o: Y' r6 k# G. `/ p#endif
4 S9 \' @% ^: O ret = platform_device_register(&da850_evm_tl_leds_device);% \6 r, |/ Y& E3 g3 m
if (ret)( C1 X) N+ D6 W# ?& B
pr_warning("Could not register som GPIO expander LEDS");& C4 B' d( F- `( l) I7 t( Z+ T
else
$ U8 a' ^" K" Y* ^( o printk(KERN_INFO "LED register sucessful!\n");8 S. h s; p8 L- l6 I
$ c& z4 I* i P& o+ k: T) G( R return ret;4 Y7 t; u4 L$ S1 d4 r; p* }0 [5 U
}, [4 k) g. w$ Q
$ R8 g4 F) A- O: T4 ]8 W- v( k' l9 o
static void __exit led_platform_exit(void)
; {2 u6 f; W; u5 ~& q{
9 d- |1 l t4 ?" B$ f platform_device_unregister(&da850_evm_tl_leds_device);- v- g4 o* U4 n: f6 _2 p6 D$ L
( b( a* \5 [! y$ H
printk(KERN_INFO "LED unregister!\n");
; V$ A/ J: q9 ~- p6 I}
& ?, k7 |+ h5 @' ]: r) [- P8 H- F; `, [! a" r
module_init(led_platform_init);% I) h5 N1 Z+ u" z5 [3 O
module_exit(led_platform_exit);* k. T4 |& V# W1 j( k4 Z% P
4 c$ f' _2 U$ U U
MODULE_DESCRIPTION("Led platform driver");* _9 l/ v! ^3 c$ e
MODULE_AUTHOR("Tronlong");
, I: U, R& _' u5 W0 \& NMODULE_LICENSE("GPL");4 \+ f `1 f! x! y4 b
( R" f' ]7 t* r* O% T+ ~9 O! v
|
|