|
|
求大神给下面的程序做注解,请稍详细些,谢谢。1 T) O3 J' z5 u4 v g
#include <linux/init.h>
! b! P6 C: g4 `, B# k0 u#include <linux/module.h>; C+ B I& X4 ], y, F! I+ f* [: J
#include <linux/kernel.h>; W* b0 `, s/ d% k
#include <linux/types.h>3 B+ F3 S# T! e1 C" A0 W i
#include <linux/gpio.h>8 q5 S5 ?7 K2 f4 Q* }, z) N. O
#include <linux/leds.h>% \9 `, m: D! I+ T( k
#include <linux/platform_device.h>6 M$ }/ F m: @8 c* H% V
, X0 k2 u8 I4 W% R#include <asm/mach-types.h> G8 y$ E/ _7 G* y5 e7 X* X
#include <asm/mach/arch.h>+ B& I a i1 Q$ E. k0 k- ^
#include <mach/da8xx.h>1 h9 A0 `. L0 z' i5 P
#include <mach/mux.h>' |7 m4 c. } L0 s+ y0 `3 R
/ U7 m4 {% y! K9 G) v0 v) t. r: u#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( S9 W6 j, I; i; g5 T: ^. o
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
W/ Q# ?& T0 ~$ n* J O( ?9 I. G9 V#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)/ y- t4 R8 t3 b& C9 {4 f
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# ^ E2 \( T7 D# e. B* b# j* A* W- ~0 h) I1 _2 {
/* assign the tl som board LED-GPIOs*/
7 M) b/ g" a) Y$ b. F& W8 [% Vstatic const short da850_evm_tl_user_led_pins[] = {' K+ }6 U$ x J+ {2 c
/* These pins are definition at <mach/mux.h> file *// p: A* U: h) J0 i6 \5 O
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ v8 z& h+ K# ?) U -1/ v& w6 N% B0 y7 _$ b5 s; G
};% g; H A1 R3 F/ m# m" f, h+ R/ X
: d7 }( h, ]) S+ \6 a) h
static struct gpio_led da850_evm_tl_leds[] = {) e. j3 d/ u# d
{
( z4 g) E1 @# a: d" O( @ .active_low = 0,
6 {/ ~/ ]; H# E- c0 ~, a .gpio = DA850_USER_LED0,- W% I9 v4 k A6 U
.name = "user_led0",; M6 G* `: @( x# X1 c/ j
.default_trigger = "default-on",
' W1 V- u/ U( t% n }," W8 ~" w/ q9 X$ x# W
{
, c% _! r7 ~# q4 K+ L. T .active_low = 0,
1 t8 ]4 v, v7 p% Z4 [5 c7 e .gpio = DA850_USER_LED1,
; p/ [- B4 X/ `, O; w2 p .name = "user_led1",
) O: U9 A1 \& W% x+ n# j .default_trigger = "default-on",2 k; n6 r# @ D% h
},' A' z! F3 Z- v) V
{
/ p3 A2 n0 ~% t, a' X. t6 ^1 b .active_low = 0,
7 T2 N& J, U0 e4 Y2 R& ? .gpio = DA850_USER_LED2,8 ^/ `4 P2 E8 r) T; [
.name = "user_led2",
6 f+ s/ w$ p. D5 C5 l! c+ A/ P .default_trigger = "default-on",
4 d+ z1 c" C% P5 Z },
, N2 T5 ?2 H N) w5 { {
: t4 v: W7 j2 A( _& [7 V .active_low = 0,$ A! @3 g9 d3 y# [3 |: T
.gpio = DA850_USER_LED3,
; v, ]; O. ?" H7 c1 w8 a+ l- B .name = "user_led3",. g' X- }) Q4 }3 w
.default_trigger = "default-on",
* p6 n8 v. r, q l, o },
2 _1 F5 T" Z. k& _) t};
0 B, k3 y. ^' C" A0 w- _+ _5 r7 n$ B' e9 N4 z7 s! a
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
5 p5 r9 O. A$ l. O9 r$ F- k .leds = da850_evm_tl_leds,, }, }2 E: m( E* z
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),7 ], G7 H, b6 ~6 B
};
0 G7 z% v6 v" s5 r
" ^& Y4 ^: }1 r( |static void led_dev_release(struct device *dev)
' Q+ R. P% Y/ j4 p: Y{$ v; g7 ^6 l, L; R) j
};3 D3 | g8 o1 I1 M, _
' b% ]: {: i6 S- o* nstatic struct platform_device da850_evm_tl_leds_device = {, \5 u+ f- b( H& A4 i! t. k
.name = "leds-gpio",
) `" d# }7 K2 u- ~& E .id = 1,
# J6 o' A) N& H5 D6 t2 O# P. a .dev = {3 }0 ?4 h& s! M8 S
.platform_data = &da850_evm_tl_leds_pdata,
5 e. Y8 o& b. C" r6 a .release = led_dev_release,) j) }3 C2 r9 U# ]1 {" k
}0 b6 `4 ^1 e% ?7 z+ t, D7 _) O# H
};
+ L/ Z- B5 C* W/ ~
. o6 f0 K2 X5 e, [7 g: a# B$ r; tstatic int __init led_platform_init(void)* h7 B# B6 y. d- o! r
{7 S; m9 r2 s. o
int ret;$ A/ I7 ~, M5 C" a% ~/ {4 H% J
#if 0
3 W& D' ?( w5 \+ Q' O' C& K7 o ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: f5 y4 ~7 s7 ^1 c if (ret)
5 {1 `! B+ j( I. @ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% S/ \$ ~ N+ K) `3 i+ a, Q9 x8 P
"%d\n", ret);
2 ~) q9 ^+ ?- C3 S, F' y" V$ j! c#endif
8 ^; B- ~6 j- w! k ret = platform_device_register(&da850_evm_tl_leds_device);( N+ a8 b8 l" V7 Z# n/ A( y3 R
if (ret)3 _* o; Q' U# N8 r/ W
pr_warning("Could not register som GPIO expander LEDS");, H( P# d: `+ H4 Y" i% X5 a# q7 `
else
p2 R( N) r+ Y- I$ G" @ printk(KERN_INFO "LED register sucessful!\n");. ~( }. `! U4 |3 g' `
$ ~7 L' _) A# R% d/ P
return ret;
, u$ M0 X; p7 I' j% a4 O% b& I, @+ C}* y# a7 X' x" \6 T! m: m- Q- h
0 E2 c. p0 [; T% o
static void __exit led_platform_exit(void)8 a1 e; z' A$ A$ i! f, D
{
! z; U* o( c: L8 C. S1 u platform_device_unregister(&da850_evm_tl_leds_device);
/ e; a1 r+ y, B) u, h! Y* E& C; ^% K# S$ D3 \. \. R( {7 S
printk(KERN_INFO "LED unregister!\n");3 m0 \' v. d. Y5 i& U
}) h. ^* l+ i* X/ M$ B: q B+ G
' C, r; N' j6 n* f$ a9 C
module_init(led_platform_init);
" X$ X* e% V) Z9 y! R& pmodule_exit(led_platform_exit);
4 W; V" }. ]2 J# E/ i' G% U0 z: }% M
MODULE_DESCRIPTION("Led platform driver");
( Z2 @2 I% b& X4 H" u2 vMODULE_AUTHOR("Tronlong");' v* L8 I: k0 m* m4 ~ V- F
MODULE_LICENSE("GPL");! W9 }0 \) j/ U' { i, G
2 ?% E# |% _ e2 `& L3 W |
|