|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
# R. l, p% g4 n- q; X# c8 F#include <linux/init.h>
; q$ e8 T% h" x#include <linux/module.h>( }# C% Y7 Y6 Z l& t5 h/ Y# n
#include <linux/kernel.h>( D' f4 u% j( |
#include <linux/types.h>" ^0 o$ D$ W4 `6 J
#include <linux/gpio.h>
6 k9 M% H2 F. U; ?# B" s, ^$ Y#include <linux/leds.h>
6 v& d3 H% [4 t$ s" b' Q#include <linux/platform_device.h>
5 I& a/ A3 M3 z& p, t/ I7 N) V' \% q) m6 j# {
#include <asm/mach-types.h>
2 \. @" ~0 l. q/ |$ J#include <asm/mach/arch.h>
- K8 u7 ~4 q* o/ J# ^/ _#include <mach/da8xx.h>
2 Z- h* s; r R. H# [. n) Y3 s#include <mach/mux.h>& Q+ C0 n+ ], R# E) {, ?6 E" ^' S
4 m3 D! p9 v+ b, J5 z. r& Z! N
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
$ p# v5 u% J8 D* C; z0 e! c1 [8 r8 ~#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
5 s" Q: O4 x* U7 D, j& t+ I6 G#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)0 A( z+ E1 W$ a' `: B$ P# `
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 A3 @6 h/ U4 v0 O# V7 Q1 \9 S4 K1 Y
/* assign the tl som board LED-GPIOs*/
V2 B* s4 S* v' M2 e. o/ cstatic const short da850_evm_tl_user_led_pins[] = {, A5 G3 z( Z1 Q, H
/* These pins are definition at <mach/mux.h> file */5 L2 y0 {* R) G5 X7 ^0 y: C( c
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5, Y* e# @5 h: `. t! z
-1
; ^' T8 v2 o. R! E B% l};: l% G/ N! t! d- L9 z u
9 s" y3 X% Y' y, Nstatic struct gpio_led da850_evm_tl_leds[] = {9 m8 c, r4 c* h$ g/ p
{
6 @$ y1 J) a) C# |: s7 i .active_low = 0,* [$ i Q. m/ _& m) N/ T) L
.gpio = DA850_USER_LED0,
" Z/ M! E9 y5 k1 ^ c .name = "user_led0",1 m+ x1 O4 d' i7 d
.default_trigger = "default-on",
2 ^5 Y% M, j; E% ^ },
5 r' y2 k5 h) a' j1 t- m* { {0 n# F$ v* k$ [( k2 l: J
.active_low = 0, a& z% P/ J2 ~! v# ]
.gpio = DA850_USER_LED1, ^/ k) d/ z5 Z8 ]8 i( C5 o
.name = "user_led1",
3 y" s5 j3 _; @5 _ .default_trigger = "default-on",
2 d. t" u1 w% o) F- U4 U. f& n6 ~ },
2 O% a! G) t. n9 l9 l8 C {
. C m& F' \8 N" S: | .active_low = 0,
% r1 y7 `1 O$ N4 t A, @ [ .gpio = DA850_USER_LED2,- B6 G, Q. B- M& O. z! e
.name = "user_led2",5 o: o S2 I1 c. B# c
.default_trigger = "default-on",
* {+ E9 o# t* s- m% m },# C! Z4 f4 M) v" u W1 w6 U7 p
{
" M2 B$ X6 z8 S# Q! X( O .active_low = 0,
# U. M6 q- i, T& j$ I" z .gpio = DA850_USER_LED3,/ W' O9 [3 H+ _9 d, i
.name = "user_led3",
! c _9 K6 h% v5 B3 D .default_trigger = "default-on",% f& t2 Z: V1 z4 ^
},* Q: b4 w4 \ Z, h2 T* i. d- T
};3 ~3 j0 |& }$ G/ A! a$ D1 [6 n. S: D
3 a2 M# I: z! x$ ^7 e' m$ C6 [static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ @5 Q/ o$ \5 @7 K9 n: ?) O- s6 l
.leds = da850_evm_tl_leds,8 `4 v' E( s N! V" |& m1 n
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),& k5 _) o5 h( X- p
}; P, N6 J0 T/ K* U1 [
7 N/ _ b) k( s' f1 j+ ?
static void led_dev_release(struct device *dev)
) L) K4 i4 ?2 ^{: ~+ O" w. `% C; K: i- t( M
};
8 I" z1 w6 M# ^+ v& k6 `2 r' w( r/ B7 n a# u* C2 [4 w
static struct platform_device da850_evm_tl_leds_device = {
9 G& ?, l& [. Q' ?' J9 ]* | .name = "leds-gpio",
7 }, C6 v: ]( l9 }7 p; z4 D .id = 1,
" {) v; N. B/ n .dev = {9 f: ?5 w9 T. [: n; o8 r* O
.platform_data = &da850_evm_tl_leds_pdata,
+ z5 F3 {6 X. {; x R( Q .release = led_dev_release,. ?; H: S7 o7 J$ Z5 b- a
}% J) h$ o; X- l1 o/ M
};
+ g4 p7 b B' A6 h7 m j& R$ C9 M+ v. W
static int __init led_platform_init(void)
# Y* h& t5 U% ]. K# y3 F+ h* C{& N8 d9 F- w5 z5 ?" Z) L
int ret;: n3 p9 _7 ?4 Z7 P; b
#if 0
& G7 `# S& z! ?% {, x* t ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);0 U) ^$ q$ Y( k% M+ e
if (ret)
& N- b, J7 W( m) I# ~ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! c" H- `& S5 C% U6 `! E2 f
"%d\n", ret);2 {4 R3 S1 E, f5 f0 F/ }
#endif
, x; c4 a4 v, S' n; x$ K( ^, Q ret = platform_device_register(&da850_evm_tl_leds_device);
5 O- [5 Z6 Y+ x" D; T if (ret)
+ W1 B$ G9 S* ~4 I+ { w pr_warning("Could not register som GPIO expander LEDS");" W* K! E) Y) g# @2 A4 c8 [) ^
else6 d9 s b, E) v
printk(KERN_INFO "LED register sucessful!\n");
, N3 G a( M; p! C% O" y- F& Y
. }8 B: f5 b% g7 c8 w return ret;
" Q: t, s# N7 D* T}
6 f7 X. }% K0 E/ F$ }& J1 ~ Q- _! l% a
static void __exit led_platform_exit(void)
5 b; ]. n$ Y$ P$ ?{% u E$ g$ w: G' J
platform_device_unregister(&da850_evm_tl_leds_device);6 z- k! r& o7 O! H$ F
" g# S" j4 f( V5 d4 P
printk(KERN_INFO "LED unregister!\n");% J+ b M( t- W6 b4 t
}8 w4 E5 F0 m. w7 ]4 Y- ^$ S
8 r! }0 X3 P. f, V, K5 x; a _module_init(led_platform_init);
K! z, k/ R+ j& cmodule_exit(led_platform_exit);4 i3 d2 B9 I4 i6 k! E/ k
0 H M% j7 u* C" f5 A5 e5 }8 R
MODULE_DESCRIPTION("Led platform driver");2 H. u- G5 |2 P( { J( J5 f9 T
MODULE_AUTHOR("Tronlong");3 t; z5 k; `, d2 b( q
MODULE_LICENSE("GPL");
, M6 V: ]! [8 L) A- z
( K0 N- z* V9 m4 x |
|