|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ M) ?" T$ t4 r8 _' [; j6 c: k4 o#include <linux/init.h>* e8 P) d% F( e+ x& }" f9 h
#include <linux/module.h>
4 `* X& ~7 v' a3 c) W1 t9 X. x#include <linux/kernel.h>3 R2 c+ m& F' q
#include <linux/types.h>+ E% g- Z# J$ o2 |" q
#include <linux/gpio.h>
5 `" d2 ?- }. z$ e$ @4 ]2 m8 Q#include <linux/leds.h>2 p+ Z/ n1 ~: C0 L' O. y
#include <linux/platform_device.h>
7 i6 ~" t+ H" j5 K+ u
5 `" l5 K" D) @1 K" W#include <asm/mach-types.h>
( F& y, _! V! S4 a1 N! h; n#include <asm/mach/arch.h>; x% Q7 _' x( k/ j0 }/ E5 ]
#include <mach/da8xx.h>* R9 n5 \0 O- h4 b: u8 \
#include <mach/mux.h>: T$ G. ^$ L5 g' S! S2 d
?: |+ |) A5 y; R0 @# m+ H% m
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% R8 _3 I) a+ P [. \0 d
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
; m. a6 t8 ~; g! o! v7 k3 B$ q, n#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& ~& ?1 M/ t0 [8 l' a8 j
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: X9 u; Q: c3 C. x( W0 H [* G+ X7 C
8 B) I- I0 @4 A& k2 {/* assign the tl som board LED-GPIOs*/
9 h1 x: t9 r: N" T1 P) hstatic const short da850_evm_tl_user_led_pins[] = {5 E/ z5 W0 F p; d
/* These pins are definition at <mach/mux.h> file */
+ h# G8 w2 @, M- O DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 w4 _5 b7 z# S4 _( G$ ~* ^ -19 F. F3 B6 E' z- ^) _5 c; l- E
};: p- _' i; M& j t7 ~5 n2 M
# e; K# B$ ? O+ }' J5 \
static struct gpio_led da850_evm_tl_leds[] = {9 q; J. x* o* J+ q8 V7 _. B$ Y$ m# v
{
: S/ ~0 M; S4 M) V. r2 U* G .active_low = 0,/ a0 M }5 b1 i# x% G; J
.gpio = DA850_USER_LED0,, Z5 e" A) M6 H0 e" l: T
.name = "user_led0",
8 p; ]7 T* [! U! c Q! h' P& V .default_trigger = "default-on",5 c+ j& @2 v. Y3 O8 C/ R
},6 W" p t0 N5 {5 u: V
{0 y, T! N7 a# D. i1 v
.active_low = 0,
4 V2 X# q* ^6 r. Z* _ .gpio = DA850_USER_LED1,3 a2 L/ S! h5 Y
.name = "user_led1",7 L* g. z( h- A' r
.default_trigger = "default-on",
# W/ @3 }; l( {7 `4 Y" L6 S },
" f5 ~1 ?+ M @) k$ J) L/ e' ] {7 |, c6 u) o( b& \8 U- _% V
.active_low = 0,0 u' C4 }/ ]8 D9 w3 g; R7 r- X( {
.gpio = DA850_USER_LED2,
4 w! H( s) Y& s .name = "user_led2",
- p) `# i e& H8 x' F .default_trigger = "default-on",4 h/ b2 x' G' A# z) |: u. L
},/ t! I) v, a* K2 b
{
6 _. V9 Y6 B8 E, @+ Q; F M$ q .active_low = 0,- k& v; L, M p+ Z0 n
.gpio = DA850_USER_LED3,1 z7 p* [( ?* U& n; P5 _, u* p& T) M
.name = "user_led3",
9 _; Q2 d( ?. {! p- c, D$ D .default_trigger = "default-on",+ \' Y! N5 Y" O( r& E+ v8 B/ \; L
},5 x5 s# g/ D2 G. K2 B# {) v
};, |2 E' A6 k) q5 c5 T% h4 Z
4 U- Z9 t) x. i" l6 y8 D" Qstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {# u* o+ @2 x( ^& ~, {
.leds = da850_evm_tl_leds,
7 m; k0 o; i( d9 M; v" m .num_leds = ARRAY_SIZE(da850_evm_tl_leds),- V6 z1 {; _4 J- o L- w: ]
};
: X6 q, f# C2 n1 E& P3 n) n4 V4 O @, t# C! l* f$ C
static void led_dev_release(struct device *dev)
* o L1 v: n2 G{
- ^, j. j6 B# `1 ?$ p/ |- Q: G- G};
% H5 Q6 `5 a0 f" g# B6 f0 r1 K/ k3 Y5 R& c( f
static struct platform_device da850_evm_tl_leds_device = {
' A8 m- N" _% w. g .name = "leds-gpio",
0 [$ j+ p# X4 ^ .id = 1,( d/ e1 @6 d% i% q7 L0 i
.dev = {
# |% D, v! O/ O9 C: S# i! t .platform_data = &da850_evm_tl_leds_pdata,
7 i# R. d6 r9 G0 k0 v; I1 h/ B .release = led_dev_release,
- O; n% [& T0 |8 T% ` }
9 l8 ], g5 V/ l$ Q};
2 l9 e. n4 V# t
3 s( s5 C! X3 Rstatic int __init led_platform_init(void)
+ F& j5 B0 N3 U' K0 s{! a6 k" W1 |" I! Y2 ~: F- p
int ret;
q( C d5 D1 s- M% g) ~5 n a5 {#if 0
' I0 f2 E$ O8 @/ y ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! z, W% f; @. t
if (ret)
% ^- J, k. m7 [+ T$ I* X8 ]7 l pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% g$ _& `* |7 @2 ?# a
"%d\n", ret);
" p; Y3 [# W+ X, u3 [2 l#endif
8 F1 J% Q: s4 l& d) G* Z& i ret = platform_device_register(&da850_evm_tl_leds_device);- @6 c# |. J f' Q6 F. c
if (ret)
7 D8 B" ~; T, @* v1 E2 b& C pr_warning("Could not register som GPIO expander LEDS");: Z, S( z0 \! s- v; ?1 h5 P
else
" T1 N4 Q* t; D0 N! @. R printk(KERN_INFO "LED register sucessful!\n");/ M5 P6 O! c7 @6 N: R& v2 j9 O
+ x4 h6 W& \- v. V/ v4 d) A2 h( e
return ret;
. O5 }6 N+ ]1 ?4 V5 ~5 y}
# t/ K$ c7 ~$ W: p" X* O5 [ K; V( S5 m& a
static void __exit led_platform_exit(void)
Q, X" E2 B. o: f4 R6 `7 b{
% n4 a9 \: M1 z+ M2 V3 x platform_device_unregister(&da850_evm_tl_leds_device);3 ?$ {. R! u# R) T/ c( Z
/ x' V: ?7 s6 K2 P# M; Z
printk(KERN_INFO "LED unregister!\n");
9 ]% f z& Z; X C$ s3 T}
6 `$ m$ \" |& ]* m4 J9 N* A( }# o
8 [ X; u5 i$ f$ C4 o, xmodule_init(led_platform_init);
( v/ K8 f* [; V! }8 D. Zmodule_exit(led_platform_exit);
6 u3 F$ t' H6 t4 s9 x4 I
. \) c) s$ X4 a( i3 p$ p, tMODULE_DESCRIPTION("Led platform driver");
) A: `' B5 H, M+ }: I7 nMODULE_AUTHOR("Tronlong");
S) D$ x, d, k9 ]MODULE_LICENSE("GPL");, y$ m2 T; U& h$ \& q5 H
8 s, }2 X+ `. g; k& d |
|