|
求大神给下面的程序做注解,请稍详细些,谢谢。6 z' X0 `9 s; M" N
#include <linux/init.h>% u9 ^8 F% r0 B& x
#include <linux/module.h>$ Q: b6 b, |- I6 D/ z, D
#include <linux/kernel.h>
( B% X" S# _" u#include <linux/types.h>
8 O# Y" {. Q& n+ h* p1 s* _; c W#include <linux/gpio.h>; l9 @& ]. P& _+ F1 C
#include <linux/leds.h>
. b/ J6 e6 ^* J#include <linux/platform_device.h>' K5 F9 A2 H* X6 m' E- j. J, `0 P
( P# C5 ^ l M1 [% F2 L5 }0 @
#include <asm/mach-types.h>
. ?) R2 W- G2 R" K, g2 D: t#include <asm/mach/arch.h>5 `$ O- h" \/ |: Y
#include <mach/da8xx.h>+ `% ~% `9 Q7 y6 L6 A
#include <mach/mux.h>
, x! M! m8 f9 q. I* m5 a4 O0 i
9 [. A2 J) p8 k0 M#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 M3 }- J- E& ]% I#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 z- ] Y) ^0 q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
* k& G- I$ W8 C# X0 M9 a C#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 X% @2 N0 v2 w; p7 O4 f* c, s6 C
/* assign the tl som board LED-GPIOs*/, @7 D- Z4 F4 s
static const short da850_evm_tl_user_led_pins[] = {& h" X( n2 ]# P+ I3 o( Z
/* These pins are definition at <mach/mux.h> file */0 G. _ m9 q/ c& |! l& t
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( \: r4 K1 Y' h0 z. l. k
-1
$ d" W7 ^+ ?! `) ]& v) c7 R};8 |3 H& a- a0 t. f
/ i! L; T4 O3 K0 Hstatic struct gpio_led da850_evm_tl_leds[] = {+ I% f' @( V3 V2 |9 x9 m" c t
{8 \: h1 Q2 i; |: v% d
.active_low = 0,5 ^* O& W" w& W( R; B
.gpio = DA850_USER_LED0,5 C, e5 m, T/ ]7 c9 e" x, m
.name = "user_led0",! x6 N% y6 X- y# o
.default_trigger = "default-on",
( @& E. h6 a6 ]8 q9 j },# t5 V" p! W. [" d, Y$ a
{; B' ~9 t# ~! s! ~ X! k0 B4 g
.active_low = 0," H$ Q( A6 E8 m$ ~1 C: w8 P
.gpio = DA850_USER_LED1,0 w, _7 P0 |6 K6 j4 U4 a0 ^
.name = "user_led1",( C9 h; W! a6 K. \& k3 q: c
.default_trigger = "default-on",
2 @. K) z( S, e) ~ }," u7 T2 c: S. |. S2 _) Z. m; Q
{. S6 m: @1 E; m0 }
.active_low = 0,+ }% ~9 K' }$ w' g- _- L9 b" u
.gpio = DA850_USER_LED2,& g0 w5 t' c; @( {
.name = "user_led2",1 O' F4 Q c7 s3 b
.default_trigger = "default-on",1 U4 |2 A, B" a$ l4 }# W( c
},1 C, L% ~, H) D
{
/ ?. P2 A. ?% Q% o .active_low = 0,
" b4 H5 Y% k& a s( Z .gpio = DA850_USER_LED3,* ?' |6 W, [$ K; j7 ?8 y. y7 u( h
.name = "user_led3",
* V' P( G) {; F' `- [0 O .default_trigger = "default-on",% o/ V/ u$ D. m2 h
},1 c& }" Y; u! |+ ^" W7 [$ u
};' q* W9 R; `! A% d6 |0 X
+ F* ^! X: H9 O6 b8 xstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. i3 d4 b2 c9 n# O! v .leds = da850_evm_tl_leds,
1 @6 Z5 D! i" ^/ C$ [( M .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
; x: d- g/ y& Z: U- V3 Y1 ^};& X: r5 d0 C0 |5 D/ P) @% e
* _' i' E8 \ f& c0 S. R+ [+ {static void led_dev_release(struct device *dev)2 v: I/ R, K7 }. E
{3 W7 ?/ i$ I+ b9 Z$ G
};
- ~: }& T8 O1 W& \# [3 d0 }. P% ^) g7 i- k8 g2 P8 |
static struct platform_device da850_evm_tl_leds_device = {) u9 t7 `8 G; i1 S% m- Y
.name = "leds-gpio",/ |0 I; S0 t( J l0 u% r" O
.id = 1,
% l( H, t8 @6 q3 F, n& ?- l0 D .dev = {
- R8 Z6 w2 E8 C/ ~5 I' B .platform_data = &da850_evm_tl_leds_pdata," ^* l& d" T, s$ V3 }
.release = led_dev_release,
' C* V0 M9 O# l8 Q# p$ q3 ^' |+ o }
4 B: |' g% D% r( V. a8 a};& g6 E2 B. v* F8 j. ^0 M. u p
$ i2 z: ]' E) d( J5 A! x6 N8 p
static int __init led_platform_init(void), C5 n* ?) l- w: g9 o
{
O$ b6 C3 [* s! N9 v+ k7 O int ret;/ N( {+ k+ W. A' w
#if 0: T; g; z! W' Z1 {, j0 ]
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
2 Y% e% v6 C: m; I if (ret)
) B* A. i1 ?& o- R/ ^ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"5 H7 G* V. s& l' e% ^0 z& o* k
"%d\n", ret);
0 d* l4 Y. y, I" D( l; O#endif( |' P0 B! D6 Q! h5 v; T' {
ret = platform_device_register(&da850_evm_tl_leds_device);
$ B- s& N& l v8 Y' j if (ret), @9 b- Y; m1 P9 E, {6 u& [# v
pr_warning("Could not register som GPIO expander LEDS");, i. Q4 q+ m. l
else8 [6 @' P9 c" w, {( |; K
printk(KERN_INFO "LED register sucessful!\n");6 S, L! G( y% U$ s7 s2 Y0 }1 Q
& L$ B% r) q. A v) B4 d, K; P return ret;
. W6 r+ J; {1 D4 O h}0 [6 C, M2 N5 i. F5 n( d5 c4 {. o
, u* ^1 L% @( P; C- k S) k, estatic void __exit led_platform_exit(void)& w* H4 `0 k1 P) ?( V- l
{+ Q& G1 u% M# H/ n& |
platform_device_unregister(&da850_evm_tl_leds_device);5 h2 k* T" w1 ]5 v
: `7 f9 |& L7 O2 O- D7 P; H
printk(KERN_INFO "LED unregister!\n");
6 Q/ g& w- m# \}, S7 x/ ^" G. \6 e* |4 q
6 s1 W0 a# m9 K; G
module_init(led_platform_init);/ g: l- E* Y* t. J' j4 I
module_exit(led_platform_exit);6 U: `$ Z9 x# l
' b+ V2 D, n* Z# G& \; ]
MODULE_DESCRIPTION("Led platform driver");. e. F. H. P( Z0 J: u( A
MODULE_AUTHOR("Tronlong");# z: v8 X0 }) {% ~$ s8 b
MODULE_LICENSE("GPL");
9 k& B! k' b9 D' z) F1 ]" [
2 F& E1 [/ X8 ?8 Q# d* I j |
|