|
|
求大神给下面的程序做注解,请稍详细些,谢谢。! c, \2 N7 l# M5 G+ j# q
#include <linux/init.h>: y$ u2 p' c& [. d
#include <linux/module.h>, f& d5 m5 C& v
#include <linux/kernel.h>
* }# U+ n( c4 W7 d0 z/ V#include <linux/types.h>
/ J, e8 c$ p! p( D! j; k: v#include <linux/gpio.h>8 B. o4 m. o) S: l4 @6 P
#include <linux/leds.h>, r6 K) X! n8 R, l0 h S/ j& O( N
#include <linux/platform_device.h>
9 t: A2 e9 l4 g( ?4 @
3 i" N$ m3 N5 K1 }( n1 {% ]5 U) o#include <asm/mach-types.h>: S" m8 F! H& U, x5 `
#include <asm/mach/arch.h>
, {5 S3 G0 v* a5 d3 o9 O#include <mach/da8xx.h>
% z( W' c5 e( E) s#include <mach/mux.h>! C# b Y) I/ v4 x9 u
" W. A: {3 t: l" ]! Z4 v/ S) s
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- C4 w. x: B# j0 S0 X. x1 z+ n
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)2 G# V0 i d/ M, u) O
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
, F* @- `8 {- }- [+ O#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 C; M# ^! |7 w: `, ?/ i% H
8 |, P! u3 d/ R Z/* assign the tl som board LED-GPIOs*/" g* K* K# e3 R( t) H! @
static const short da850_evm_tl_user_led_pins[] = {
# s% W n/ _, }6 k /* These pins are definition at <mach/mux.h> file */
- g1 K V* f4 z5 N0 H, n DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,4 ?5 }: o3 C7 }: V; o
-1" P- W" H. y9 V3 c
};
: m5 z. Q j" V2 z) h+ k
# n* {9 ]+ N$ W9 \' I& \static struct gpio_led da850_evm_tl_leds[] = {
' q* ]% u. Y8 O! }6 G$ I* t: p {
& M: l6 U0 @* l .active_low = 0,6 B+ ?% N6 L# \5 ^
.gpio = DA850_USER_LED0,. s3 d k! P T r
.name = "user_led0",
" l+ L- h# k1 ~) h( ~- D! E6 m% @ .default_trigger = "default-on",3 ~8 \# n0 {; Q9 b
},# z) o; l, G, b" W0 H, s
{% f! C. i6 w+ M
.active_low = 0,
) \% D ^, L+ m. f: r* c .gpio = DA850_USER_LED1,
6 U6 }0 E: b) U0 s9 s .name = "user_led1",
* D0 o& k+ I5 ~) x" ~ .default_trigger = "default-on",1 O$ [! m c* }; \! l& J0 k
},( l/ J" c3 a6 f- C! W4 G: x, @
{ N8 ^- u& y- E8 W
.active_low = 0,: u& C6 j( U& o8 M2 B. b" Z
.gpio = DA850_USER_LED2,
h4 d s9 E; y4 ~' Q* D .name = "user_led2",* ]" T$ V8 {+ q |# f X
.default_trigger = "default-on",( A) y! z2 [7 B0 M V
},+ P2 \, V( y2 Y# b
{0 Y0 Q! y6 ^( u( P# _6 S- O; R! L, z
.active_low = 0,
' t" u/ e7 O( p- |/ o6 _% U .gpio = DA850_USER_LED3,! U/ i( O/ y9 ^( |& p8 u
.name = "user_led3",7 x# ~: _, c! A G
.default_trigger = "default-on",9 I. _) K8 H! t. o. v3 I. ~1 [$ B
},+ B5 c- M0 N. Q3 v& d
};
! j* u( K! ^$ l1 J. a
) o7 J$ t5 f( C& B) vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
- j+ Z" P& Y" T! G0 h2 p% Z .leds = da850_evm_tl_leds,
8 d1 p& O% ~) J. g7 D$ `: h .num_leds = ARRAY_SIZE(da850_evm_tl_leds),4 g) S7 @7 |3 K1 b: i
};$ I2 Z# G* i( V. B0 D! t& N# H+ |
6 {) p) N9 C+ C' g
static void led_dev_release(struct device *dev)3 `! X8 j( u" o6 g7 `3 d p
{3 e5 L9 P& b# i* R5 `0 v
};
$ F. J9 i+ q3 Q- i9 f9 J K/ w" v2 E" D& C Z
static struct platform_device da850_evm_tl_leds_device = {
) p& }9 ?+ z5 v% f0 i/ u .name = "leds-gpio",& V* w L/ j. l, C
.id = 1,
. e9 s( o4 Y" \* z! h- x .dev = {6 ^- i( o# P# b0 X$ y
.platform_data = &da850_evm_tl_leds_pdata,
; T4 t+ G2 i x K/ P9 u- c: j .release = led_dev_release,
2 y; N* M, T2 i }" O: h1 A6 F3 u6 e7 G) h1 c0 ?# \/ V
};
2 p0 H2 D1 j/ m
9 f- t9 i/ N/ W/ M* D9 ]0 @* _. O3 Kstatic int __init led_platform_init(void)* g+ f' U" K- `/ o2 Q% {
{
! V) Z4 N0 [. d, g: k int ret;+ n( b u0 }, v& Q: L1 L! ?9 O
#if 01 ?4 O. j# Y4 C* `2 p6 J7 o
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* M8 a; i, M& [ Z. Y; t; d7 K
if (ret)
( {6 Y- d1 H' r6 Z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ Y8 u. y# y! Z& q, X
"%d\n", ret);) m) i* p5 j# H) M1 k N* _
#endif
1 U/ [% b$ P) h# _- r! e0 a& B ret = platform_device_register(&da850_evm_tl_leds_device);5 a( k$ _' T# |" R9 |
if (ret); `- f" c( W9 S+ x
pr_warning("Could not register som GPIO expander LEDS");. v7 j& ?6 Z9 ~" w) O
else
8 H! f1 u: n4 I printk(KERN_INFO "LED register sucessful!\n");
/ q6 ?1 Q$ v4 a8 K* g
$ `( b/ w! ^3 I u& z' G/ t4 \) M return ret;& {& F. ?& e* A1 J
}8 p" j- P o, F& F% }: y+ q) z
' r# g. B" Z" N* y8 w3 f' jstatic void __exit led_platform_exit(void)
, N$ D( Y0 l/ }$ n& J& s. R{! Q" x x" q, p
platform_device_unregister(&da850_evm_tl_leds_device);4 e/ M0 f' H$ X2 t C
& z! C6 V' j) A' h printk(KERN_INFO "LED unregister!\n");
( K! R' g/ b x+ H: Q}& X7 f0 f E6 x
) I3 u6 n6 R) a0 a
module_init(led_platform_init);
8 T, U: V) @& @0 A M# ?+ w/ Cmodule_exit(led_platform_exit);3 v3 s: v, |8 A W
6 z: B7 X7 R a4 b
MODULE_DESCRIPTION("Led platform driver");
9 L8 m- K4 V9 t9 wMODULE_AUTHOR("Tronlong");& n4 j9 e1 s; M: B: A T6 n
MODULE_LICENSE("GPL");
u' R) Z: U1 z! q
! _$ G6 ], O0 M% D |
|