|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
f) {/ r# ?, }5 C, {3 P1 I' L#include <linux/init.h>, `3 H" B# y( z/ x+ W% X2 V
#include <linux/module.h>
2 Y" G. s7 Y9 Q0 v+ L+ U8 J- W3 B#include <linux/kernel.h>/ Y2 q" W6 F2 _
#include <linux/types.h>
. I% H' e2 Z5 \$ }#include <linux/gpio.h>2 f1 j F5 o& {: y1 l% s
#include <linux/leds.h>7 u9 L' c: F2 M& t, c a- Q
#include <linux/platform_device.h>
: m6 s- l. I4 j% B
+ v. B! q1 i; X$ d0 v9 ?) G2 r( r! H: x#include <asm/mach-types.h>) ?* E) E0 r4 ^. J. i# P* T$ m
#include <asm/mach/arch.h>
4 Y ~, d8 Y' d' M4 E% J! `8 t#include <mach/da8xx.h>; J6 C+ a( e* j# e% E
#include <mach/mux.h>3 L6 h2 v' s9 |0 i3 L2 F- X4 Q2 L0 M1 m
" c2 d2 s, o/ U2 }. H3 \#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! ~# C$ C- }: F2 i/ M
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ x2 {1 Q& A/ v" D" v, h# {
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)4 `& Y& o8 J, f: Y* V- _8 u! g
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)& R9 p6 k0 q- b/ l" E, E/ _) m
4 w- _" u& ]8 c/ w6 s, @4 b
/* assign the tl som board LED-GPIOs*/
5 V0 C5 m' Q+ a E! m" Rstatic const short da850_evm_tl_user_led_pins[] = {
6 V; [( h% L; S f4 j# p /* These pins are definition at <mach/mux.h> file */
! g0 G" v7 U* [9 B( A7 p5 f0 V DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
: M2 z7 A: ]+ T -1+ \4 i0 t, q8 x, c3 \
};
' Z; m% S0 J) ^4 x2 o8 ?+ }# R* A; E6 M) P, L+ Y
static struct gpio_led da850_evm_tl_leds[] = {$ a& f" s! D+ }8 C1 _
{) H7 M0 o6 d$ n6 X2 K
.active_low = 0,
3 A0 \: C& v ~6 R+ L Z3 X1 g .gpio = DA850_USER_LED0,, U6 L. l$ H! h0 D
.name = "user_led0",
& A: G# |8 Y5 [ .default_trigger = "default-on",, U( j+ V! p1 i) C
},
/ i6 P6 G/ U# `) u" c; x* A7 v7 y# H {3 Y1 r4 a: j* M# k7 V$ i' L
.active_low = 0,
( K; X9 u/ P' F$ ^. ?' ~ S: I! `$ z- c .gpio = DA850_USER_LED1,* f1 T4 Q. c; O6 z; k. M, P
.name = "user_led1",
) ]: Q& W5 `& d. y .default_trigger = "default-on",
9 [9 C4 k! D( ~0 Y. b$ C k+ Z$ ^ },2 m! E6 s6 `2 ]2 J# h9 U4 H
{ J6 z! p. @3 w% O
.active_low = 0,+ S- H6 @5 v9 A% V: \2 G
.gpio = DA850_USER_LED2,
P+ Y |% p9 Q1 B ^) F .name = "user_led2",2 o! W& d, ~+ U: z0 X W* ` z. g
.default_trigger = "default-on",
, ]. U2 V5 p C: {' C; y. ^0 R },# s7 n% c! J2 x
{
% c, F7 J1 ^( y: G |+ Y* C .active_low = 0,
@( Q/ L# j( J1 j( D" r .gpio = DA850_USER_LED3,! u8 E, c- {) w& w
.name = "user_led3",
2 ?0 L0 v- D/ u .default_trigger = "default-on",' w# k Y0 J: H% f7 o3 y( @2 s# ~# a
},
* u" q: A0 e, d# T. P/ @};9 m3 C! {; i$ `0 G+ @4 F: t/ A
& }; Z; l9 b; D# }8 m' |
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. y' L* s6 q: x4 _( V .leds = da850_evm_tl_leds,
4 I7 M2 @* C, K .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 ~' q, {9 O; i) {7 `};
& I0 K8 N; L5 b3 F/ y" A# i: G3 C w8 u8 m2 }3 l
static void led_dev_release(struct device *dev)
- o+ D0 i5 `5 [{' p# ?: R. u- g; _6 _6 D. X6 t
};: O1 [% e" P8 q1 M& K# H
0 p T. e# r2 Y! z% x
static struct platform_device da850_evm_tl_leds_device = {
( }* i/ x8 X9 Q, J# B1 e% ` .name = "leds-gpio",# |: L, ?5 s# B) n8 E3 H9 Y; }
.id = 1,2 x) \% z% p! S4 S7 [
.dev = {
- q; i& k* H8 d) B .platform_data = &da850_evm_tl_leds_pdata,5 q. n: z n/ C, U
.release = led_dev_release,
* F3 @7 s; k$ h# s4 `+ C( G( o }
6 I9 K: X! h- a, d1 t3 V, Q8 [};1 M& C! o: o6 T- |( k' N) ^
$ q$ [+ ?. F$ p( y2 p d7 gstatic int __init led_platform_init(void)
# m9 q4 M+ H$ e8 i7 c, N- ^' T9 N{
$ G- B$ L0 S9 [$ j; U int ret;0 n. h' i( [3 T [- Y
#if 0
; i# C( F' s' E/ O2 ~ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
' P& m# C+ F. K3 ?* \# _, q if (ret)
4 t4 R4 A7 v9 m6 ]$ D pr_warning("da850_evm_tl_leds_init : User LED mux failed :"1 i6 I, s, @9 d3 _
"%d\n", ret);
' l) G$ H$ d0 R/ G#endif9 X6 C" C: l0 S& r9 j2 D- y" s
ret = platform_device_register(&da850_evm_tl_leds_device);0 s- g2 j# ]2 @- x
if (ret)1 r' d( {( g3 ^& i+ J
pr_warning("Could not register som GPIO expander LEDS");2 ]4 m! _$ W5 W$ l( _
else
7 W9 v: }4 o$ H printk(KERN_INFO "LED register sucessful!\n");& ^ t+ j3 ]( W$ M0 Q
) r4 \8 l4 N) x8 t return ret;! P* J7 `3 V, H( ]6 V: v# ^
}
7 s$ \6 r: J+ Z: O! y; Y1 Q
- n5 i: h. n: Tstatic void __exit led_platform_exit(void)
0 b* b5 n8 D0 r# [{
W$ _9 P1 [4 k! l/ ~5 ?# v p platform_device_unregister(&da850_evm_tl_leds_device);
9 M: H- D# D5 e2 u. C5 s |& P1 }% z* v2 I, r. ~
printk(KERN_INFO "LED unregister!\n");
2 t; L P' r9 ?, R8 t+ }}1 a8 x. {1 B! A% L5 V. v( ?
) d, Z8 s" Y% @0 _
module_init(led_platform_init);
8 E8 {% L; ]4 ] D$ S* |module_exit(led_platform_exit);( [! R& Q/ M$ A$ d
1 j/ A+ y' G( Y' ]MODULE_DESCRIPTION("Led platform driver");9 K: {. S/ L7 A
MODULE_AUTHOR("Tronlong");: R" _9 I Z4 }8 Y/ Q2 ?5 N
MODULE_LICENSE("GPL");% q9 Q5 a6 z% O2 F {$ e( b
( W; D+ |$ Q6 O4 R/ ? |
|