|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 T6 M# X( G7 o4 o. T
#include <linux/init.h>
: M3 @3 p8 H: i7 _9 c#include <linux/module.h>5 }- j. @. q5 g$ h7 g
#include <linux/kernel.h>' S2 m2 Y/ n* C" _
#include <linux/types.h>
, F8 S5 q; t' B+ o#include <linux/gpio.h>
, `! }1 l: _% K- U* r#include <linux/leds.h>3 ]$ ]1 m/ J0 Y
#include <linux/platform_device.h>7 ]4 o: u& m" M# ^5 F
; m' ?- C1 ~3 W% w1 y, f: S8 A#include <asm/mach-types.h>
6 ~+ R& V- h2 ?2 g#include <asm/mach/arch.h>4 [: O9 T8 O6 u+ z6 N
#include <mach/da8xx.h>3 U4 L! Q2 G5 d& {3 x& L
#include <mach/mux.h>$ d) O4 p1 y5 z$ w2 L* s0 R
7 F; h4 P+ a( V6 y H- P4 [ T#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% T; z9 B9 d; l6 X$ `& q9 n#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)# ]0 A& `# M2 }
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) N, ]+ d; ]) K I0 ]' A! i) o
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 z% f: a% A- L" `" X: C
, l, w5 P: Q4 C. {. B7 m. x& _" Y; v/* assign the tl som board LED-GPIOs*/% E1 u* w6 U# O3 t8 S% x
static const short da850_evm_tl_user_led_pins[] = {
+ x) Y( ?6 q/ t/ w) A0 z /* These pins are definition at <mach/mux.h> file */
# I3 h" B! R8 A: W* s: n DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 N, u8 ]6 f; G/ d- x- @ I% q3 K -1: @& v- ^' T ` ?( Q0 p' f: Q5 e
};) P* j5 {7 A8 c: j( o
$ L. U0 _# E) @7 U1 |0 B
static struct gpio_led da850_evm_tl_leds[] = {/ k. E% f' }# U+ w% m) ]
{' o {- k( ~2 I S
.active_low = 0,, {! X$ @9 I+ c4 u, `) Q3 H
.gpio = DA850_USER_LED0,
& o7 B0 ~( N: | .name = "user_led0"," C; v* `7 J' K; n( X9 j- u, N
.default_trigger = "default-on",
& Q; x( f: ^8 r" p+ K2 f6 C4 P. @ }, @. t0 C, G* W3 Q/ O( n' |! \( w7 K
{
( ^4 A" R: A& L; V .active_low = 0,& D' y# d/ X6 p! R7 Y+ A" r! c+ p
.gpio = DA850_USER_LED1,
; ?/ b5 z) R. W: a# G- s .name = "user_led1",
! |6 A! d& B) y3 C4 L' s! u; R .default_trigger = "default-on",
/ {$ x* v" W% `9 H% n" S& s },' W$ M; C; x& H0 f6 j' Y
{3 U; C S+ A& p1 B
.active_low = 0,
: J8 S4 s+ H! h4 F) J ?( p. g .gpio = DA850_USER_LED2,
% x" g3 o6 V5 U% B .name = "user_led2",
) ^4 C$ _# y, y m .default_trigger = "default-on",
9 T+ X- E$ V& v* U& a/ Y7 w5 J },
7 L9 y1 @9 Q J {5 s) a' v1 E( e; g2 p! B
.active_low = 0,
4 S& @$ a; B4 M4 B# Q- [# h/ x .gpio = DA850_USER_LED3,+ k3 R/ D" N& |6 g: F3 R, r
.name = "user_led3",% B( V3 }: u$ A% h3 Y
.default_trigger = "default-on",) T. t: \9 h- A: L5 ^# C
},
; `. \) U. x5 h# g1 ?};
e a' i# m) Z6 b0 Z5 A4 N7 ~2 V' Z
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
' T+ p' O$ c4 ^/ ]% { A* l .leds = da850_evm_tl_leds,/ o2 ] w7 u' z1 k( ~: ^- n! g
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),) X, u6 q7 k# v- C& t* n% }3 r. h
};
9 a' H Y" M0 S2 y, G/ R& G$ ~* t3 N: }$ E0 n" g. J
static void led_dev_release(struct device *dev)
1 q9 m. S, o7 l) ~7 z{
# ?2 E9 \/ j6 s8 m* C};
# ?' ^4 H N: \# [5 x8 a. p7 P* K6 N. |; \9 A% i: o1 V
static struct platform_device da850_evm_tl_leds_device = {% I( h* O: w# h( E" v; z, p; j
.name = "leds-gpio",
2 _8 f+ d' Q4 N .id = 1,
. z, f- T3 g) A# N8 K .dev = {0 s% e7 l7 Y# n6 B( Z
.platform_data = &da850_evm_tl_leds_pdata,
; S& s/ y& D! ^* O8 n6 n .release = led_dev_release,
- G9 V# _/ G; h) p9 @ }, e2 H% \4 ?2 c
};! i1 K" n* F6 G6 V E
6 |. g/ k o, \7 V7 i# s
static int __init led_platform_init(void)8 V6 z9 c" P) X( ]5 |
{
# h2 f$ R |* Z# H, D int ret;
+ P) {6 G7 x2 d7 u#if 0; N# Y9 Q8 z/ Q7 j/ _
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 @( c7 G# t& [+ S% p& ~
if (ret)2 u( e* f. l, ~6 f. Y6 [- g+ u: ^4 Z: K# m
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"+ V9 u8 D" O5 J* j4 x# j; g& D
"%d\n", ret);7 y) S# T1 A4 u p
#endif1 q1 r& ^+ E6 Q* }8 Q
ret = platform_device_register(&da850_evm_tl_leds_device);2 q: i8 l; d: l2 L# S! u
if (ret)- j* y0 C* L5 L3 K% ?
pr_warning("Could not register som GPIO expander LEDS");
: H( W% T* y& q1 O else& B$ e7 B+ y# }4 y; @0 \2 X
printk(KERN_INFO "LED register sucessful!\n");
. g$ ` _6 G* K3 w+ h1 C' \" G2 y% V
return ret;
, y G! Q! n! o2 y$ k}
- l5 Q) [+ D# A; S+ J( p' J3 @: Y2 Z# J
static void __exit led_platform_exit(void)
3 m) @+ J4 a: \: N: }4 A8 g! n{
' F* D9 P& O: i l" V2 ~ platform_device_unregister(&da850_evm_tl_leds_device);
5 f: S ^0 b _% c& j/ G
+ M2 \% Z# M1 d& Y printk(KERN_INFO "LED unregister!\n");0 L5 \5 |3 u# v! k( w# m
}, Y/ {3 C2 f4 q( C8 V
" d4 v1 ]3 f4 }+ B! [. s" \
module_init(led_platform_init);4 C& T5 B( i j, S
module_exit(led_platform_exit);
6 b* N: K, Y1 ^1 n2 C5 R' x
+ e. `) h" y" r8 g7 N4 l6 X3 TMODULE_DESCRIPTION("Led platform driver");& ^+ S" n( x4 n A' T: W# K' [( l
MODULE_AUTHOR("Tronlong");0 r/ {) \; d6 |; \* W
MODULE_LICENSE("GPL");
0 I! m" B: l7 r( Y y" n! Z7 f6 \
|
|