|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
. Q8 n' C. K1 K' G2 [3 e#include <linux/init.h>) i7 H8 [8 j4 G/ Y8 H
#include <linux/module.h>
, M. t2 x) B. O, a#include <linux/kernel.h>- R6 W& P# s- s+ v( X, y, t; O$ O
#include <linux/types.h>4 B# L# M0 x+ L9 P& o. B
#include <linux/gpio.h>2 B, e: s/ Z9 p, k
#include <linux/leds.h>8 h! h0 y! w1 y. t- k, k6 i
#include <linux/platform_device.h>
; k: F+ ~! ~' T# z* D* w2 p1 s1 P' o$ G3 `
#include <asm/mach-types.h>6 c) e+ t4 {, P% w
#include <asm/mach/arch.h>
) f8 w: c! {. c#include <mach/da8xx.h>
. ?/ j9 P0 G* i6 V' O#include <mach/mux.h>
! e+ W3 y& N1 }% P1 }
# ]2 j2 u. e1 U' G& ^5 Z$ k#define DA850_USER_LED0 GPIO_TO_PIN(0, 0). E+ w8 L% }6 w/ X9 \
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)9 Z+ @+ h9 R, w. q& H
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), r' U- W3 c! O2 b
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
# `3 ^+ j2 X& \1 E3 b3 N* m2 a' y2 N
/* assign the tl som board LED-GPIOs*/
9 l1 x# R J1 T$ b$ z$ Zstatic const short da850_evm_tl_user_led_pins[] = {" t! J* ]2 k( Y b4 {/ W5 Q" m5 H+ w
/* These pins are definition at <mach/mux.h> file */3 @5 {9 G0 ~* ~' H* O0 z/ h- _
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,3 x8 E+ R! G: R0 @/ q7 J t
-1
9 O. e- H/ |& u6 W8 l};
2 U4 e+ v1 B2 I J" ^2 X2 L2 a$ y3 @1 j
static struct gpio_led da850_evm_tl_leds[] = {) e. G. D$ |" w2 q* e7 n
{
/ t0 t$ t5 ^+ X$ E; u, r .active_low = 0,# P: e; @! j4 o! I$ j
.gpio = DA850_USER_LED0,
+ b4 W5 A- l# N .name = "user_led0",* P9 x5 {7 q1 t# t- z1 J6 X
.default_trigger = "default-on",
' z) h! ^3 P8 P) O },
7 k- N9 W( `9 I- @ {
3 G& \! r7 g+ v; p7 l/ B .active_low = 0,
6 `, h. p5 o! j# g .gpio = DA850_USER_LED1,# n+ _9 D# G; _9 m% ~
.name = "user_led1",
* g3 U, T5 ~# c .default_trigger = "default-on",7 S8 b# s: F5 q1 n1 ]
},
4 a/ o: }& g5 \9 @ L+ e { \8 ]( T0 F1 v5 R9 V- h/ m
.active_low = 0,7 M M8 {4 W; A. N2 L
.gpio = DA850_USER_LED2,
, _1 G* e+ M3 s& k5 ? q .name = "user_led2",- u- K. Z& I$ K2 N3 u0 Q C* M( {
.default_trigger = "default-on",
# O* E; M; T, u0 C1 v8 W, K, C2 X- x },
3 r# }' J6 E, Q" |" U V {$ \% ~& q& X( [
.active_low = 0,
, w( f/ c+ F/ P- V .gpio = DA850_USER_LED3,) Q" {' Z' T v& B* @: h2 P% }
.name = "user_led3",! X$ ~) U7 W+ G; R6 F9 p
.default_trigger = "default-on",
& z/ N* M d' g6 o& t' j, } },. M* o3 g6 R' T" I
};
- Y; z/ Q% _8 x6 q6 A9 O, {5 X5 j9 \ Z7 O' g f- }. Q7 z+ v
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ ~ @4 q& i: N- @! ]& w! s
.leds = da850_evm_tl_leds,
8 k7 f1 l# v2 p- ] .num_leds = ARRAY_SIZE(da850_evm_tl_leds), b9 E$ k2 A2 M/ x4 L( v
};
+ K& ?$ S3 r& h& z$ y) m H
! j% P7 S) s Pstatic void led_dev_release(struct device *dev)2 e. ]* P4 d# D
{; ]# x8 V0 |9 ~
};% V |. ]9 r. Y. k7 [$ C
4 |* `/ P8 d9 w, K* ?
static struct platform_device da850_evm_tl_leds_device = {
6 B- o" A* a$ o. ~5 R* _5 N .name = "leds-gpio",
7 p- M( Y" {8 ]$ A( B .id = 1,
5 a* s7 g3 Q; i: C& l: G5 e2 P( ^ .dev = {" ?% t6 s" x, w3 }' y# p9 ]" L
.platform_data = &da850_evm_tl_leds_pdata,9 ~1 V; h2 J8 H' e( Q% e) c
.release = led_dev_release,0 x* {/ n" ?* h/ q* H( C
}
/ I4 }' e7 u9 f8 o8 h};% N( `8 D' G+ _3 n
( L" r8 X& B- s* n+ Q7 vstatic int __init led_platform_init(void)
- @& j; X# \" q1 X3 z4 v) Q Y{
# {+ Q9 ]+ I% R B int ret;
7 L8 |: ?+ S6 F; J#if 0# G' [& _3 ]$ f$ N2 N
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
' }" M- `# T9 z if (ret)
& A6 `0 E' `$ V9 w) q pr_warning("da850_evm_tl_leds_init : User LED mux failed :"0 A2 c! A1 M r- s4 \
"%d\n", ret);
' d. E7 H& C3 C, U#endif
- j: D# D; P2 t0 ^+ @% n9 G ret = platform_device_register(&da850_evm_tl_leds_device);
. {% U* _- C9 g: {/ H% I/ a) K: O9 \ if (ret)$ b. c5 ?6 }1 b# Q5 |6 @
pr_warning("Could not register som GPIO expander LEDS");
$ g1 a8 F! \ d+ Q else
* @/ E. [, R1 ` printk(KERN_INFO "LED register sucessful!\n");- `6 P, Z+ w; ^, S. h: i/ u0 ]
% o$ z9 e( b" U+ W
return ret;
4 d+ s/ ?! f6 J& F}
- u. f, d& w+ |4 r. }
$ K$ n3 w. S9 B$ a. Ystatic void __exit led_platform_exit(void)* e( X, L3 X. }+ y* i
{
8 y5 Q4 t: A2 l, v& Z( Q platform_device_unregister(&da850_evm_tl_leds_device);
o+ a2 a: a( ? I2 }" S; K* _
3 `* {" K& r0 A printk(KERN_INFO "LED unregister!\n");& y5 [- q/ i0 r" E' D4 o+ V# h
}: a. y- d* ]+ y8 V" L
( I' Q+ \$ b( G9 K* p, N- E4 b
module_init(led_platform_init);9 G1 D3 L( I2 s- H0 r! g+ J
module_exit(led_platform_exit);- K h* Z4 y) N0 K$ W$ t) ~: c
9 U; f: r2 n n# \3 LMODULE_DESCRIPTION("Led platform driver");4 G5 j4 q. C2 @0 w" ?
MODULE_AUTHOR("Tronlong");
0 \6 ~$ i% `5 p$ Q& QMODULE_LICENSE("GPL");
* N+ i) v k( E( Y
9 R. \& K: C; o |
|