|
|
求大神给下面的程序做注解,请稍详细些,谢谢。4 c, \: G7 w( k% ?
#include <linux/init.h>3 i# F1 c0 M1 r. w M
#include <linux/module.h>
; Q# X; f& A& o- j* s3 j#include <linux/kernel.h>
% ?3 R+ ]2 b+ ]* r3 j" s* }#include <linux/types.h>
* h( v0 _: n7 i6 A S5 \4 O#include <linux/gpio.h>
% }# O8 `' J7 b& z9 y( ^1 J$ E#include <linux/leds.h>; K+ j& l+ T3 a) [
#include <linux/platform_device.h>. V8 U! n0 G* p+ [6 g
1 U5 }# v+ j+ y/ \) Z
#include <asm/mach-types.h>
% C# p# V/ L) z* Z* D" f# V9 [#include <asm/mach/arch.h>
l8 ~) e' d- g L. D" Q& J% q#include <mach/da8xx.h>
; V8 m9 f; M8 e6 z! C#include <mach/mux.h>
! b. M9 X. {- n2 |, J$ V: Q$ q" i
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
6 a: x0 p0 q8 H#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 X) \8 A- _- K. E: t' z
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( F, T5 A: w) l#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
( V" C6 |& C! I1 U0 \
' N1 l' Q* s/ t# k& S/ O9 E/* assign the tl som board LED-GPIOs*/
6 D6 s; B) Y/ n6 B* qstatic const short da850_evm_tl_user_led_pins[] = {+ Q* _2 t, U8 ?% k& q2 z
/* These pins are definition at <mach/mux.h> file */: W3 q+ G% o; U$ c
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ U5 i, v! ~1 |6 N l
-1
, _# g1 u4 A+ q};: M, K1 o. t/ E: W; [
e' x) q/ t3 G2 A
static struct gpio_led da850_evm_tl_leds[] = {
; [% O9 l5 N- o8 P( o( Z6 b$ F {7 u7 o, c" y1 f3 p+ |
.active_low = 0,
* |4 T* U$ D9 B: g .gpio = DA850_USER_LED0, d: {7 M- @' m d' _ X
.name = "user_led0",; l4 {6 _4 l6 V% Z/ S: F! R6 n V
.default_trigger = "default-on",4 z% _6 e2 G K2 g1 T! P5 \, |
},* F% L" ?- U& Y4 s
{5 W- n# ]3 V/ u& r1 a3 X O
.active_low = 0,6 ]/ O" R* e3 K# d x
.gpio = DA850_USER_LED1,
3 z# K; ]1 L7 {$ z5 Y* ` .name = "user_led1",
8 _' E+ X( U$ k) E4 h5 ^! N .default_trigger = "default-on",
! R% ]# u8 Z0 z! [+ K0 \! x },- @8 D3 F0 |9 O w
{
U4 i N, o6 m0 ] .active_low = 0,
u; x+ }) b1 H( y .gpio = DA850_USER_LED2,: I& I) }& H7 ?/ Y' f e- ?
.name = "user_led2",% S! R$ `+ {3 w$ M
.default_trigger = "default-on",8 g W4 S5 V3 k- u6 ~
},
7 ]* @8 W6 [ H. u0 g {# R# v' {0 f- U3 O! C/ |2 i- [% x
.active_low = 0,
# z4 Y6 n+ Q/ Q+ }9 v4 v .gpio = DA850_USER_LED3,
4 b' ^( D( u$ x+ B# D" g .name = "user_led3",
& t" U! s. {( o% n. {9 j3 d .default_trigger = "default-on",4 |* ?. L9 f+ F
},: \8 `& m- A, E6 G$ d
};
+ m4 J. G. U7 q( a. M' i& @" `& x
8 l& {' j. Y u' m' f6 V, ^static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 U# g7 O6 N3 n3 E7 ?; c
.leds = da850_evm_tl_leds,* ~% t3 @( I% a. |$ g8 m
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),1 a( l E% s3 `( A
};: N- l. \. N% c
( P( w) D; j5 N2 [6 J; d3 x3 vstatic void led_dev_release(struct device *dev)
5 U# Y" Z1 W" B{
% A" j3 b8 W5 P9 W};0 O0 y H+ y% C V
3 |0 [, k0 u1 Z, ]# _0 d
static struct platform_device da850_evm_tl_leds_device = {
1 O# h7 S" S& m3 L' A8 @ .name = "leds-gpio",- \& E- G* X* g- ~, B- z% _" ]
.id = 1,7 ?$ U# R4 ^/ K# F O: }* Q
.dev = {
4 `# I) [! ]" P .platform_data = &da850_evm_tl_leds_pdata,
& B! m7 q$ Q6 b! F$ N8 m4 h' K .release = led_dev_release,4 Q# Q P! {, r4 J X( A
}
8 R" `' m3 _+ {/ B};: { b$ H" n; s: m
3 X8 I3 v' P" q' l
static int __init led_platform_init(void); |* W4 d+ u$ \1 I5 P( h7 k
{
& Y. D7 U4 O, V" ~ int ret;- O0 |. g$ C, e* s- Q
#if 04 h# p# W" @; O+ [; ^
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
) ?4 v: l" v. F( l' Y6 @+ x if (ret)1 { M; S' I5 _4 o( n
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* q# c7 W3 w4 K% e4 v$ C
"%d\n", ret);! _" R/ U' F6 Z# q$ M' _
#endif- s# i; L% o! \' ^7 ^1 O4 L: J' V6 _
ret = platform_device_register(&da850_evm_tl_leds_device);/ c9 x* q G4 z, `5 P& ]5 m" ~
if (ret)
' g+ [8 A$ R4 N9 @ pr_warning("Could not register som GPIO expander LEDS");
i, H' H3 D. ^- [; K& v9 k else
% c$ `% l$ [# @5 z c! R printk(KERN_INFO "LED register sucessful!\n");
\- m2 a8 g0 g5 f6 N4 |' P' b8 \* C# c+ `0 H# C& z1 F# _" V
return ret;! k' t# \0 {( b
}
7 `; Y) z4 P" y7 ^
% T/ h' S+ g- S3 _9 ?+ x. ^* Cstatic void __exit led_platform_exit(void)( K' x7 H m8 D+ @) ~+ `- E
{
1 ^* W& ^* c4 |, h9 C# Z- y platform_device_unregister(&da850_evm_tl_leds_device);
5 d7 y3 P3 Z) v$ e6 s7 f, _ S! I( P) J: Q O. Y9 O3 A6 d5 H8 C, k" b
printk(KERN_INFO "LED unregister!\n");) ^6 {/ @6 N! V% G z7 A
}
0 N4 [8 v- j5 j2 P* A) p0 q6 T' I0 S+ k8 j' y# `& t) P
module_init(led_platform_init);! K: @' P3 n- r* W1 |
module_exit(led_platform_exit);
7 U. t( }9 ?, h. k/ }* n6 r/ E/ r* i# y2 k2 O. K8 G
MODULE_DESCRIPTION("Led platform driver");
1 N# y9 I& w' _; @$ u" eMODULE_AUTHOR("Tronlong");
0 |! D/ I# m* R: yMODULE_LICENSE("GPL");, W; ~6 O7 F8 [- @& ?/ p
1 V7 m; q- I/ V8 o |
|