|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 _% X- D* K, b0 A4 s
#include <linux/init.h>
. B% i) y* v' i+ O2 f; v#include <linux/module.h>
+ r G+ M7 S. N. K8 C#include <linux/kernel.h>
/ n- M' r5 ^2 T) B#include <linux/types.h>
8 J- A: i# p; c#include <linux/gpio.h>6 `, u: m7 \2 G6 e$ x
#include <linux/leds.h>
3 Q3 |% E$ a, T#include <linux/platform_device.h>
6 T) H" o1 k1 u" u8 s) ~5 \( A% ^/ d. Q. T
#include <asm/mach-types.h>3 q8 g7 M" O9 X
#include <asm/mach/arch.h> I/ d7 P; j% A5 {( k' j3 Y; ?3 H; a
#include <mach/da8xx.h>5 D; E: s$ ]! D0 T( M J
#include <mach/mux.h>7 X! U) A- W! ~- l" f
. |1 i+ s3 R7 `( K0 q#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; j! h j. V; k" o$ S#define DA850_USER_LED1 GPIO_TO_PIN(0, 5) l3 i# q/ j- |1 I
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
; t; @" n3 G3 n" u) Y. ^! O#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% {0 o6 v( l7 k" @# `5 g$ S* J- j5 u* }- M+ W" @) n
/* assign the tl som board LED-GPIOs*/
r* n0 d1 E8 m' A( Ustatic const short da850_evm_tl_user_led_pins[] = {& O# f6 r c, U! v8 w2 a# C
/* These pins are definition at <mach/mux.h> file */$ U& Q" E* C7 u- u
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,+ O- F7 q% q" g' T, L
-1$ E1 ?! }$ H6 K5 `( v2 ]
};
$ V( w/ }5 C* I* N( T; U4 d1 q8 A
8 W3 @3 X0 g$ r7 w! \static struct gpio_led da850_evm_tl_leds[] = {
, j, y& E) E, B r# f+ i {3 N6 O) U2 T) Y; Y! d4 o
.active_low = 0,& e" q( g+ o. Q( q$ r9 Q6 s
.gpio = DA850_USER_LED0,+ p) |6 K, T3 q% Y6 v" P; P$ Z
.name = "user_led0",
7 a8 p x; o- x+ y' ` .default_trigger = "default-on",
7 X( B& C g4 Q$ B Y },
: G7 a3 M7 t5 X. ^% _) ~& N {
1 A5 k/ v8 ~5 n, _ .active_low = 0,5 r& }: F: I9 U9 x# b
.gpio = DA850_USER_LED1,
' P; B0 D3 S1 A1 U .name = "user_led1",' z; o0 W" p- z
.default_trigger = "default-on",
( K! w6 K) |4 @ },8 d5 O' W# M( p4 l) _4 a
{
( g& ^. k' s& Z- M; k% h .active_low = 0,
( D; F1 d( l" f3 A$ v: d W .gpio = DA850_USER_LED2,3 ]8 {% `+ m; g& b- d
.name = "user_led2",
{& Q: s! U* s. H$ N) [1 X1 G .default_trigger = "default-on",1 N$ u F \0 F7 F2 W
},
, U/ `; x! m1 B" M {
5 O; o" c% }! A; T .active_low = 0,
) P4 I- n; t5 b- ] .gpio = DA850_USER_LED3,
2 P [& ] D. d .name = "user_led3",
5 t* Z( \+ q9 S/ Y, c .default_trigger = "default-on",1 g+ L' t" Z7 _9 N; h: Y: W3 C+ S: b
}," l5 f6 |0 {. h2 A6 H3 v
};
/ l2 ^0 D8 s: e F- \4 S' P2 C3 o# }1 X1 |
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
; C4 e6 H# V2 U" e .leds = da850_evm_tl_leds,$ F) \* w3 g3 ~$ X }+ b
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 H4 n& J0 r$ D0 q% d+ z' D
};5 r$ N6 P2 p# i6 P0 g7 t
! J) e" G0 j9 s0 p
static void led_dev_release(struct device *dev)
+ @" X3 R2 T) l# A{
' t( _$ a& I- o};
8 c, t8 z+ J7 E
; G& g6 B+ M. T4 F* ?1 k! `+ ustatic struct platform_device da850_evm_tl_leds_device = {; L8 Z, O; d4 c# h
.name = "leds-gpio",
1 C2 n+ {5 E1 ~5 g$ @$ l; f2 ]1 [ .id = 1,
: j& B. T( \0 n- w .dev = {
0 p5 d- e6 c7 s- L, `5 g9 C. X, W .platform_data = &da850_evm_tl_leds_pdata,
& j* u2 u! t/ s+ D .release = led_dev_release,% D2 ]8 h) A5 F; h* a5 t
}
) U. S" P! X+ _7 a* a% O- R& B" y};7 i$ m' ^7 w- d% ]1 |1 ?
3 n* r) x( o0 m" V
static int __init led_platform_init(void)
( D+ w% h% I6 i+ s9 R{* a9 i* h/ ]8 P$ V$ ^# S
int ret;" T1 t" ~2 I8 E% v
#if 0
. q' b- a7 K; P# O& `+ E3 @$ h- w ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);9 l6 o2 d Y9 |, }- [2 a
if (ret)8 H7 V# |$ G& U- x
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 h$ b6 v0 L* w" x9 b% O
"%d\n", ret);' b; ^$ N+ Y1 P2 \, X1 o
#endif
5 c' G& C; c* G" b ret = platform_device_register(&da850_evm_tl_leds_device);
* \, m" i8 j5 }2 _0 y if (ret)
/ b/ Z. g% p. l2 s* P! V' O& | pr_warning("Could not register som GPIO expander LEDS");
# C: J4 ]' P( L else
& L' @- m. g J' L5 p printk(KERN_INFO "LED register sucessful!\n");
3 k! j5 X: B5 a; F- ]) L5 i% q: r& \( V5 h7 k6 t4 G
return ret;
, |4 N7 X( {, o+ W% M/ g; [}8 J1 s; x9 c4 ^
! ^2 |& ~; _2 M: Z2 [' `! H
static void __exit led_platform_exit(void)
. I- H% E. T; y w s{% b/ j: I/ Z# F% k& G+ d7 {
platform_device_unregister(&da850_evm_tl_leds_device);; _. n# @# t. O+ l
4 `* R# Y' |0 @* q1 R
printk(KERN_INFO "LED unregister!\n");
0 d" I8 e# A5 X}1 m# c" S9 G/ }* V2 z k+ p
% \8 g' g3 L3 Q! ?
module_init(led_platform_init);- Z( Q* ?/ O( K9 ]; Q
module_exit(led_platform_exit);
6 B' t3 f( O# P9 c6 T8 `; n! s1 ?. D) h) l- ^
MODULE_DESCRIPTION("Led platform driver");
( J5 g, P; E* Z. [MODULE_AUTHOR("Tronlong");2 G) y! z2 B9 D
MODULE_LICENSE("GPL");% W1 B1 }. T+ M6 J
: N7 M1 R- ? \' `3 R0 A- Y
|
|