|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" @' e5 }6 i! y! \
#include <linux/init.h>
9 F: ?. ]; A* h0 Q8 Y! v#include <linux/module.h>: {7 y3 G3 o' n
#include <linux/kernel.h>
0 c$ x" T) i- \1 B8 {; U#include <linux/types.h>; k( O$ Q# m' |0 M) p) X6 N$ A
#include <linux/gpio.h>
% R7 d- v! w8 W1 b7 `% N; E* k#include <linux/leds.h>
( n) P: r) {9 q: J6 n* Q) b#include <linux/platform_device.h> R6 i( v$ k& k+ j$ m
9 y0 S4 a4 k4 H- s8 _! \
#include <asm/mach-types.h>
& w' C& N( \7 q, r. N9 z#include <asm/mach/arch.h>% }5 [5 E; Q9 y+ `* x+ x3 N
#include <mach/da8xx.h>6 |% M2 |8 ~. n! x
#include <mach/mux.h>
9 r4 k$ Q) A- q- d
5 d- f5 x- t. `#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( y+ t/ N. o0 C( `. J; m; \
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ F3 B5 A7 b4 v: c# E#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" n& c. v% \ F0 j#define DA850_USER_LED3 GPIO_TO_PIN(0, 2). I ^1 c+ e4 N. _
/ Y3 n. w) C5 k& F" A V+ z: U
/* assign the tl som board LED-GPIOs*/
8 A) Q3 Y1 b3 Y/ m) b7 cstatic const short da850_evm_tl_user_led_pins[] = {
1 m' F0 f2 G' h+ Y /* These pins are definition at <mach/mux.h> file */8 ]4 ?% E* B& ]( V1 ~
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 i1 j; m& `. m6 ] M" l -1
4 ]% j7 t% X& G};
: L7 l( u8 F0 T7 R- J: L0 r2 J# N ?8 V
static struct gpio_led da850_evm_tl_leds[] = {
; i8 B `; T# \6 _ {
$ p6 l( {- u: \' v, c/ I( ? [7 g .active_low = 0,4 Y5 h3 {. g7 G/ r3 J! y
.gpio = DA850_USER_LED0,. n3 i: ^7 H. e; o% J
.name = "user_led0",) S4 y6 x/ o( j$ m. R: b, r- N, n+ R
.default_trigger = "default-on",
* w# B% ^( j) C9 Z8 Y% d( V& X },- t1 q& a; p0 P
{! i7 z) v* M6 ?' V4 G& L
.active_low = 0,* O) l$ k- _* d* S, F
.gpio = DA850_USER_LED1,- P$ N/ j- X4 k# @2 o
.name = "user_led1",
1 i- S5 N! C& X+ \2 p2 x+ _ .default_trigger = "default-on",: O6 m4 N9 {. n) s2 |% B( { a
},
- u G% n! m# U7 q& D" l! u! _ { Q& j/ x6 U0 N! T" X) Y
.active_low = 0,' x7 u- g5 I. E2 k
.gpio = DA850_USER_LED2,+ B5 v( w' `" U
.name = "user_led2",) i4 n* p# }+ G, d
.default_trigger = "default-on",
/ S' w! M' m8 w8 m% y2 }( O },5 I7 v" e+ n G0 i x
{4 w7 p9 r" s/ k: N- o* |
.active_low = 0,
$ W2 x: h5 g6 e; N1 H$ J' N .gpio = DA850_USER_LED3,8 \ r* s; G) u. y9 X/ Q5 l2 n
.name = "user_led3",
, l, f& ~# a W .default_trigger = "default-on",
( y8 k" d& A% T1 o) Y },- {6 o# W( s# n3 l$ w# m6 Z3 k
};
; Z' c. B, d. l! ?; J3 t
+ b9 [+ N4 ^% P9 pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ N- f( @# l7 }* y$ x/ O .leds = da850_evm_tl_leds,
a( ~6 r1 z' V* Q) y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ B8 {. A8 l: [( a& z+ G8 v
};" ?" k1 r" f: [5 I
n$ l' |# f: n; h/ K9 r" M8 lstatic void led_dev_release(struct device *dev)
$ S/ G, a) G1 \{3 u' V3 K* G a1 l, }
};1 U/ W( W& t8 ~/ Z
9 w, \& K; @! |/ vstatic struct platform_device da850_evm_tl_leds_device = {
( H2 _# [* o5 C, D" ? .name = "leds-gpio",
/ N$ }+ W) f& C( i& @& |4 v1 } .id = 1,
$ P7 e7 o1 g5 u9 U .dev = {0 A+ `6 P7 G1 k
.platform_data = &da850_evm_tl_leds_pdata,
* A; M% C( Z0 y# j6 u- y .release = led_dev_release,+ V$ ^0 W/ `$ b* H; G- P
}
8 \' {: Q+ C+ e4 }5 t( N; E$ U};/ @ d' ]: L( X. Q2 P* D
' M: @" t# |; s/ rstatic int __init led_platform_init(void)1 b3 k% d R( M4 J7 V& u
{- r2 B( {8 [$ X7 m0 e' q+ s! U
int ret;% h% r/ Z4 Y9 ~' @& u5 `
#if 0, r& q0 y* }3 H3 X7 f
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
5 f) R3 F1 x0 f, K if (ret)
' o9 z7 i$ w! _& c% k pr_warning("da850_evm_tl_leds_init : User LED mux failed :"4 W4 b/ {7 i$ u/ ]5 ~8 H+ K; ^. _
"%d\n", ret);
2 v) ^, p J P6 @8 w7 B$ t#endif
( ^0 D* N) M, {, A: P$ d+ e ret = platform_device_register(&da850_evm_tl_leds_device);
3 b$ F# K1 z( V" x if (ret): K* H' c6 B e j0 S* m" y
pr_warning("Could not register som GPIO expander LEDS");
0 J0 n/ V, D0 k. s else3 c* [% M: @ S5 B" {: u
printk(KERN_INFO "LED register sucessful!\n");
4 c9 h( T5 h% q+ B1 L, h# K9 @! h% B/ {2 k4 x u+ Q8 o
return ret;
+ q6 N0 Q9 @1 a}
% H X7 e9 p# o2 j& a. B8 t" H \& O+ q, |' w5 e2 j6 z
static void __exit led_platform_exit(void)5 ~( L7 I7 x$ X* W3 \" J
{
' ]/ @5 _' e2 t7 C" ]# Z. ]: A7 ` platform_device_unregister(&da850_evm_tl_leds_device);
6 e% l4 K; @7 v1 F0 Y$ E4 H0 L' C) P7 k8 |) F
printk(KERN_INFO "LED unregister!\n");
. x r7 h7 n* N6 X. j}
" v- H& v1 J; d! V) n/ d0 f [- N1 O5 v) P z1 B: n$ B
module_init(led_platform_init);
; I2 b, y6 R. Vmodule_exit(led_platform_exit);
8 w8 a2 b4 J; ]' N( M0 o
3 s3 \8 E* M, q' Q. D+ {MODULE_DESCRIPTION("Led platform driver");
. \9 B& k6 `; w/ x- J0 ]6 y sMODULE_AUTHOR("Tronlong");9 r! _, {. H3 Z( v' R0 p
MODULE_LICENSE("GPL");; o# f4 G# s# d6 y
/ z; g) w) Q* R# h |
|