|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 ]1 y* k- Y7 T6 L#include <linux/init.h>
" U- U& q2 L' t& R#include <linux/module.h>
/ B3 z- I: _# `#include <linux/kernel.h>
% Q: p1 ]4 Y3 A( }4 X#include <linux/types.h>
6 B. c) L1 n9 _9 l9 s6 o/ G6 B; ?7 L#include <linux/gpio.h>
[" ?( b+ U. Y1 j, K! R#include <linux/leds.h>( ]" B, c8 S9 f
#include <linux/platform_device.h>
! y( G2 G# o3 R& ?% F5 b) z
6 a$ O/ e* x% ]6 f+ f" ~5 ~6 [#include <asm/mach-types.h>
_: r3 P3 w/ E0 y; {2 M#include <asm/mach/arch.h># {3 ^& p6 y. I6 v& q1 o: T, W
#include <mach/da8xx.h>, J% U5 e: s9 d7 z5 X2 u* I1 x
#include <mach/mux.h>" h$ R0 I$ h4 S2 m& o
8 o) |! ` X3 c$ X
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 `1 x: @$ e- D5 J' a
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' Z. ~, _ B) n) T3 h( L6 n#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
! ^* q. G) d. ?: P6 Q* C) B+ A#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)* i+ t+ @) u5 T1 }5 s( \' T: s
7 U! y" i U( {
/* assign the tl som board LED-GPIOs*/1 f9 ~7 Y: l& d9 ~, x2 I J) I( T' L
static const short da850_evm_tl_user_led_pins[] = {
8 Y4 j$ |/ S$ s8 |6 k /* These pins are definition at <mach/mux.h> file */& Q& j7 ]: W6 ~$ |+ N- [/ c" n
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,- w5 B9 |* R" O6 D
-1: @" x0 J' f2 {* e$ B$ Q
};& ~% n0 l! @& U/ {" T& P
5 `) e* _4 z' ^1 ~$ V! }$ C- S$ o3 N
static struct gpio_led da850_evm_tl_leds[] = {
% J9 r; G9 Q) n1 V. h* ]* N {
5 w5 f% q t5 ?9 [ .active_low = 0,
3 ] N( {, K, [3 X/ P, ] .gpio = DA850_USER_LED0,
# g. ]5 }# f" Y .name = "user_led0",
' p3 R& O* _" k( r .default_trigger = "default-on",: D; n* T' ? t, e9 v8 j/ R
},5 x% }' H& ]0 P( t8 T6 k( y# X
{
5 K0 F8 @9 m+ d! [5 o% g .active_low = 0,1 T+ R5 O: m9 I* a9 ~% Z
.gpio = DA850_USER_LED1,
- J* V' o9 j* A2 k .name = "user_led1",
- T7 H4 C' j# x4 u .default_trigger = "default-on",
; t8 a' w* t2 k( Z9 [' n# z },
% u, _/ |+ t: U {+ l4 }' t8 W5 j3 ]; P+ J* f& U# G
.active_low = 0,& L; m) l$ L2 K+ |% U! e5 S
.gpio = DA850_USER_LED2,
4 a# g! y( @& Z# c1 F( G9 N4 C V .name = "user_led2",
6 `6 P( k9 Y- T% M4 J .default_trigger = "default-on",
% A; h$ J$ _6 F3 s% H' |- r% r },% @6 ]- l: ~. j9 f- J1 O: a
{0 D# j0 T7 D. v& X! t: V, V
.active_low = 0,' u% X1 Q. N0 n* O6 h! H
.gpio = DA850_USER_LED3,
) b2 z6 X) e% k* C* m" z, s' B) L .name = "user_led3",
7 g( p9 U; N- v) F .default_trigger = "default-on",
8 m0 f; t) ~7 S4 @$ c },
- \0 p* R! f1 S: P0 u+ B: Z};- W+ e' ~5 Q* ]6 X8 q, _
9 Y/ n! f% u3 b- r/ E% Sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {0 `+ I0 y. x* \; ^/ a9 k9 _
.leds = da850_evm_tl_leds,; m2 u, [- A! B7 f! o6 u$ y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
3 F2 F4 n, J! H9 x/ k. d};- Y5 _/ M6 l. I8 X i5 a4 ?, U" J
9 | F9 Z. ]' @' Estatic void led_dev_release(struct device *dev)
3 f& j. b! ?1 i9 j{8 e+ {) a% g6 B
};
; V1 _: L9 b2 _1 D0 f( H* y! T+ e' n. y/ B
static struct platform_device da850_evm_tl_leds_device = {% |6 Y1 L0 Z; ~5 N/ z
.name = "leds-gpio",2 l/ ` P! [" P' g# C
.id = 1,; n" M/ W! c4 N( O6 k) q8 b
.dev = {
$ D! v( g& A0 V) |! a .platform_data = &da850_evm_tl_leds_pdata,
; r% @, ^' Y+ q) C- p. K .release = led_dev_release,
E* W/ V+ T9 ^5 M/ f4 ^; p }
) {9 G2 Q4 m W};; C* i+ w: Z4 U) f
6 B$ e- K! }* |/ W& Y% p/ D# W& S, _! v
static int __init led_platform_init(void)3 m+ Y- @' |: C4 T d
{6 @1 m& C' F- F! }! a) I
int ret;
4 ^8 x+ e6 T0 c- U0 b$ Z#if 09 E# e' V- F- M& y4 k
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);6 l& ] S0 X: Q! q% N
if (ret)
; k4 p# \0 _' T2 L" U4 p pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 L* `( N* B2 z( F( s1 X$ K "%d\n", ret);
0 ?/ r) Y6 y/ c; h3 J& o#endif, y# W% q3 T5 D/ s) W% |
ret = platform_device_register(&da850_evm_tl_leds_device);+ H1 ?: v7 G; W7 L
if (ret)
1 w3 Q8 q* i: @; x* G pr_warning("Could not register som GPIO expander LEDS");
( Y: n# s$ ^# Q' i. | else! I% C8 O: @; \0 A! \3 K
printk(KERN_INFO "LED register sucessful!\n");- x, v! l; ?/ k" W7 Z
8 ~8 g0 x U% C0 }; r
return ret;
, d- G% @) j& Y" R% E3 w}
7 H. v3 g7 b7 n- h: Z# {: F n6 o! v0 A! Q6 b
static void __exit led_platform_exit(void)% Y# G) ]' g1 U; H* B7 z6 ?3 F
{" G7 d" y2 {1 @
platform_device_unregister(&da850_evm_tl_leds_device);8 l/ e0 Z' o* [: K# E/ _( R
* D5 { [' e% p7 @/ ? printk(KERN_INFO "LED unregister!\n");" V; r# Q, O5 v/ D# C6 h
}/ `) I( U" {* y4 F
# z; }$ @8 V* @8 p" L5 Nmodule_init(led_platform_init);
7 Z/ F+ T7 P4 k7 k) nmodule_exit(led_platform_exit);6 M6 D! F1 {3 {& K
) z* ~5 r, D# Q' f; p) U
MODULE_DESCRIPTION("Led platform driver");
9 h" A* u5 K7 { ]. a1 Y% _9 X# G2 gMODULE_AUTHOR("Tronlong");
. S( Y) k5 l/ d$ H% HMODULE_LICENSE("GPL");
. y% d [# B e6 Y" r% r" S& n! h% g( w- S2 w
|
|