|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
$ ~/ A6 f+ k1 B) }. O/ ^#include <linux/init.h>7 q- n" `7 ]# e
#include <linux/module.h>
3 P4 {8 q2 S* F Z4 N& p#include <linux/kernel.h>- j; ]) |- Z7 ` D
#include <linux/types.h>6 d+ T/ w5 Q$ v- c) ?. d2 K
#include <linux/gpio.h>1 ?; l2 u) s/ I; F% b
#include <linux/leds.h>
$ v/ \" b# Z( i% H#include <linux/platform_device.h>
1 r; ~* r% J" t5 P7 L( ^* N( a# v& c, J
#include <asm/mach-types.h>
7 W- }' ?4 p8 @* J3 f. h" ]#include <asm/mach/arch.h> F8 T/ \ U) m9 ~1 n' j
#include <mach/da8xx.h>) [8 v' j) Z2 U% j- e
#include <mach/mux.h>% o D' Q# z) t& l
) k$ U+ D1 J: o7 p" m#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 P7 J0 e9 p v0 y2 Q& A
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
% D; P$ @# L* A9 J8 l#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 ^5 G- K7 J4 K. l$ ]9 k#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& @. c/ x/ ^- p" X5 W! }
t* m" }0 W4 [/ A( g4 c! G/* assign the tl som board LED-GPIOs*/
% F0 Y2 ]" P$ U$ c# [static const short da850_evm_tl_user_led_pins[] = {
$ D. Y2 A. |: Y, q) @ /* These pins are definition at <mach/mux.h> file */
$ l* R7 s3 |* y; ^ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,2 C! e* ~' _8 s. |1 I. m
-1
- ~+ W% o# D7 O% B* `};3 }* V t& D X( @% e6 _, k
6 j& P- w5 S }static struct gpio_led da850_evm_tl_leds[] = {
8 j+ y4 }1 @; ]0 T& A7 h {8 l5 S m5 [5 [/ \& P4 {5 D
.active_low = 0,
% j9 H/ h. Q) Q& j; B9 W .gpio = DA850_USER_LED0," s3 Y4 y7 j1 U* _. Q% r& J
.name = "user_led0", ^8 W+ L8 D" C/ y; ^6 g* J
.default_trigger = "default-on",
0 K, M. s0 |) B- c1 R },. s. C! \8 l# E, Y) I5 F
{
. _' m( r7 W a" {: F G .active_low = 0,% ^: J- W R/ Z( o' e- k* L
.gpio = DA850_USER_LED1,
' j/ q6 q/ j! g5 F; F9 |5 a .name = "user_led1",
! D9 U$ [7 U4 F B .default_trigger = "default-on",
/ v3 y9 m8 N2 n" X },
$ f! y0 X" {. j* u5 u* Z R/ m4 X {8 m5 d' j% }6 G; u8 s" Q% C
.active_low = 0,
. D7 ]& z% ?4 C2 I .gpio = DA850_USER_LED2,$ i3 N9 x3 V5 q. t& x8 v2 r
.name = "user_led2",
& `7 K4 o' X! a" p .default_trigger = "default-on",
4 l; e. R' p1 u3 l; I2 v2 n },. o% H9 ?1 `0 l) o
{
1 V- c5 x2 n; M5 G .active_low = 0,
. }$ f2 g' W$ i, H: h/ q .gpio = DA850_USER_LED3,* U/ \7 m4 w! q, ^( b
.name = "user_led3",
3 C. ?+ q4 N% C9 G3 j! C Z$ v. u .default_trigger = "default-on",3 G4 O% N# q3 O( s! `% I8 Q* y5 R
},
e$ M* G! A" d. _: A- e};
# C/ }5 J5 \, I2 u B$ ~1 |* n/ @' o- {4 h5 {/ K! n, ?
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ W/ o! D! t- ?
.leds = da850_evm_tl_leds,
" q1 x) U, ?8 J. s# L( Y .num_leds = ARRAY_SIZE(da850_evm_tl_leds),2 d3 C2 s' v& K& y0 |6 p& W4 E& h
};' H9 m- K6 ~9 `5 E5 K9 Y! Q* V
$ X0 h' {1 ?" t" D _8 B( q7 T4 sstatic void led_dev_release(struct device *dev)8 `4 I& d, b5 [$ L% ?& R9 r$ s
{3 b; P$ _% Z8 u. w- ~; b1 F# |
};
Z* y- y1 I$ L$ N7 o
3 n" b' D3 B/ n+ q# z) Kstatic struct platform_device da850_evm_tl_leds_device = {
0 r2 I) t2 h( v$ V& z9 ? .name = "leds-gpio",
1 J5 }* {+ R6 t9 A3 ]6 l .id = 1,
1 O' W, R0 t" E8 f3 L .dev = {
- t0 X; J. t$ j! R; j1 j) A .platform_data = &da850_evm_tl_leds_pdata,
, P/ R$ u. R- A .release = led_dev_release,$ \( I7 Q$ z6 P1 d& K3 _
}4 y+ _) }/ k# w2 k6 R
};
% |$ @8 ~" C% l$ t2 C3 L0 E/ N% v7 T6 M4 x2 S% b
static int __init led_platform_init(void)
+ a. c0 K/ ]- t- y: b{
3 I( l+ H8 `; x# U/ I; F% y0 R int ret;3 M3 r0 z% f+ y. }/ U& W
#if 0
4 q4 l* @9 n! w0 \; r ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 Z/ T- o; b4 ?5 o& s/ e/ g3 ` if (ret)
) ?" U# H3 m: B* n& e pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
4 l& i3 P* @' A" L/ P/ X "%d\n", ret);
; S* P' j" }( f4 U) q7 }#endif, E1 s" V, ^1 H6 ~1 Z
ret = platform_device_register(&da850_evm_tl_leds_device);
9 N; Y o. f* o, f- Y if (ret)
( C+ C! t2 ^( H# W! H6 U9 e pr_warning("Could not register som GPIO expander LEDS");
% {" x( [1 `# C- p% ~ else
) ]+ z% S6 P2 J5 F' K, P- O printk(KERN_INFO "LED register sucessful!\n");
* A9 e* o2 W6 g
! S* t1 w: Z O+ [# \4 g% p return ret;% k' @0 F( g! @( M" X# {" O
}, [" J0 h: k- y
8 m& i5 X% \' ?static void __exit led_platform_exit(void)! I$ L7 g: L" o& H7 N2 ~
{# g7 V) P% P/ g' t* c8 }6 E
platform_device_unregister(&da850_evm_tl_leds_device);7 k* k& |7 a% D7 R) ]" L; T1 ?5 n
% |" n5 N; d+ F" H0 H
printk(KERN_INFO "LED unregister!\n");6 t, j0 _0 v2 s4 @1 Y8 y, s) [
}
@% v0 o! I8 ~! H/ _' b1 m- x8 L' Y4 k) `3 F' K& t' { Q8 B
module_init(led_platform_init);$ }' Y) W$ b) D8 h4 i; o
module_exit(led_platform_exit);
) F; e# m7 p+ C0 E; A ~. }+ |0 a- R* s: R& }; a u
MODULE_DESCRIPTION("Led platform driver");; H$ ~5 a" R$ g3 r
MODULE_AUTHOR("Tronlong");
( Z8 k1 }& [3 jMODULE_LICENSE("GPL");
7 f9 k q- ?, l# m, h" n, M% h/ D
; g2 ~# b% p o; r |
|