|
|
求大神给下面的程序做注解,请稍详细些,谢谢。1 w. X+ D5 g& q" j% ?5 r! n$ @) k$ x
#include <linux/init.h>
+ Z$ G; n X2 D! b" X) s#include <linux/module.h>
2 T5 A, L3 r& [9 X% P#include <linux/kernel.h>
7 E1 U$ P8 e, Z8 E2 { s#include <linux/types.h>" k5 `( u1 n% d) B2 A: y$ y- G
#include <linux/gpio.h>
" Z* M; _) l* j6 h6 E#include <linux/leds.h>
; R6 h2 ~. j) i0 \" V#include <linux/platform_device.h>
2 J0 G) d% p8 [; w8 H+ ^/ w, M4 i6 F, P0 `9 o
#include <asm/mach-types.h>
6 d$ t4 m, m+ F6 I#include <asm/mach/arch.h>
7 @# B+ I& H8 ^. d( ?#include <mach/da8xx.h>
% h5 @+ B# N, n#include <mach/mux.h>
# \5 @ L: ^( {' ]9 @& i4 A, y! d7 m& ^- S) d6 \( i
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- R3 o( L8 a# Y- _#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 w, J- y7 O0 p2 r" a; e0 P
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- i0 S8 J" s% Z9 m8 r+ ?
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 q2 E3 E9 P3 O8 Y5 v( ~8 G
$ z8 d& b9 s$ O4 L8 s( f' {. f
/* assign the tl som board LED-GPIOs*/
2 s e) E9 Q* {# E% jstatic const short da850_evm_tl_user_led_pins[] = {
- d( k! ] K2 l. }" R* [) X$ s /* These pins are definition at <mach/mux.h> file */
" r5 g$ j8 k3 f3 { DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
B# }& n/ B9 j m1 F3 P; z -12 i9 M) ]3 X6 p4 }* J( V
};" W$ m0 \: c$ x0 q
( M" q$ y+ @- b" Z& b0 E
static struct gpio_led da850_evm_tl_leds[] = {) f! P9 L! h2 X7 I* }7 t( q
{
) h r1 b: E, [( F .active_low = 0,
. Q( g0 @7 R) q0 g# n .gpio = DA850_USER_LED0,6 Z& |$ ] z w! ?* i
.name = "user_led0",
. d* U4 |8 B- Z8 q7 @ .default_trigger = "default-on"," w% B1 I8 H# c( S
},
# R2 s6 k- C- A: y {, n( O5 }/ F7 c9 \" l8 d
.active_low = 0,! e+ t& d. f& s+ \- a
.gpio = DA850_USER_LED1,
9 `! l- [) ^) F: l4 u) Y: o# @. j: ]% B .name = "user_led1",
% m+ N1 r* I% I+ w4 O .default_trigger = "default-on",
9 M1 k. c5 T0 V },
0 [, [! ~2 i) M& f {
$ a8 D) j e+ W. x* U% \ .active_low = 0,) K9 l/ Z0 I& I' G/ H4 T$ O+ V0 P
.gpio = DA850_USER_LED2,
. _2 G- Y' D7 _& m) c4 `, a .name = "user_led2",
/ B r7 j7 B) P' l/ g .default_trigger = "default-on",
, [" W `* h; N6 b- l# \- x7 L5 F },
$ Y* H1 V. @. o" I% a# Z% o {
8 N+ t/ B1 u: }9 g: Z8 p8 |) t .active_low = 0,
% U# ?9 u$ I6 e1 o5 }( u1 E9 H .gpio = DA850_USER_LED3,! a7 B. g$ G: i: a0 N
.name = "user_led3",- M! h+ m/ b2 a9 c7 ~" y
.default_trigger = "default-on",
& W& M% T( `* U; P: F }, d4 N# Z/ i; \. a
};9 [* I" d7 }! }8 Q( k+ q2 x1 ]
# `4 S3 H9 z) w3 `1 @4 S
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; c) I7 r7 l# k, `+ k9 F
.leds = da850_evm_tl_leds,
& [& f1 H0 e- l/ z$ ^) \+ H .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 _! k5 C- f" U, A9 L3 k8 s: ~* h};
% N; g" g$ W x: U$ |9 T7 @' n& L9 }6 T
static void led_dev_release(struct device *dev)
2 W# o" i- U* F* X0 Q# k& e{
N( }( @( }* ?6 U' p};
# \+ q6 U+ O6 I( j# e. O: f l* D6 }# l, e* a7 ~- R
static struct platform_device da850_evm_tl_leds_device = {" A1 y) q# k; W5 O! T$ o
.name = "leds-gpio",
+ \. A! ^7 p- Q B- X6 ~ .id = 1,+ S, L# p" Q# Q1 R: Y$ N( u0 g
.dev = {% R5 k+ G$ l6 Q f' Z
.platform_data = &da850_evm_tl_leds_pdata,) D6 |% m3 s( A. x+ M6 Z6 w/ [
.release = led_dev_release,
. t- I4 m0 o0 H8 X: ]6 O3 P' | }- j+ G3 O$ n. U* h! @( Z. Z+ k# \6 P
};
3 s' F6 L0 x$ L! j% w# M1 X, o- e8 J% B
static int __init led_platform_init(void)0 T& H3 H2 E- w+ B0 r# a ?
{4 F; Z- U8 ^0 N; d
int ret;
: Z( R' W3 }- P; |#if 0
# P9 @8 M P* y. g, I& K6 v ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);) j- b. Q0 l1 \2 C4 N9 I/ m, i
if (ret)
% j6 L5 p/ H3 h# Z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* [" n! y0 G3 @8 b. K. S "%d\n", ret);; ~4 H. f9 P( x5 S. f9 r- w: M9 c
#endif# y4 C! t- J2 ] i& w$ l. ?6 p
ret = platform_device_register(&da850_evm_tl_leds_device);
* p# P; S0 S1 ~8 L% l) T5 F# j if (ret)
' w2 c, t% S/ Q5 P0 x pr_warning("Could not register som GPIO expander LEDS");2 u: E: R8 M) u, D
else
+ K* N- v8 }2 G, r0 ~9 t+ v( c printk(KERN_INFO "LED register sucessful!\n");( b/ I6 s) u. H2 o
6 x+ }1 n4 Y* T0 C5 c. } return ret;
/ A9 e- j" A4 s% I* k}( O* y3 E. t' d- F8 B
/ a4 c9 ]4 r8 c, Nstatic void __exit led_platform_exit(void)
S1 D6 W( f/ o* v( G{
& j; W- c: K) Z, v# L platform_device_unregister(&da850_evm_tl_leds_device);2 R! Y- M" @! c. n
8 ^" H1 N3 F" z# S) B printk(KERN_INFO "LED unregister!\n");- r5 d0 |+ |( w! B
}0 g* k; N! q' ~( r: C
0 J, d$ P: R8 W: B: H. j: H$ U
module_init(led_platform_init);, U9 B1 x& v" P% x+ Z r
module_exit(led_platform_exit);
$ M, e& u t' f+ H0 n7 }0 M+ C0 v0 q f
MODULE_DESCRIPTION("Led platform driver");4 ^0 F$ G" c4 X
MODULE_AUTHOR("Tronlong");
4 O3 J8 P' V6 s) nMODULE_LICENSE("GPL");
# Y- q8 s1 q7 q5 Z4 d0 c, `4 a# K. S( o; \* A, V0 |- k: F- V' l7 L
|
|