|
|
求大神给下面的程序做注解,请稍详细些,谢谢。 D8 }* X4 B* h5 C2 T
#include <linux/init.h>
* t; M; o+ j9 q; o9 _: d#include <linux/module.h>' q0 R( J! t! t" ~
#include <linux/kernel.h>" |: |4 Q/ t3 Z7 B/ c
#include <linux/types.h>
9 I9 F+ k$ q- a#include <linux/gpio.h># s# I! `; k# F- O. n
#include <linux/leds.h>
$ t+ k: m2 c* z g: h% O3 h#include <linux/platform_device.h>
4 e" j5 x+ \. p) X
% I& o, i& w& N#include <asm/mach-types.h>
- d; f9 L( A; u* x8 Y0 e' \#include <asm/mach/arch.h>+ X0 ?' h) U$ d3 @, M& m7 O, A
#include <mach/da8xx.h>
5 p4 X% N, t O/ o; G#include <mach/mux.h>: v! [% [# s- I. Y- J/ U; d1 u$ x
+ y, D9 B/ P: T
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 W1 b" u$ K; [#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)8 d$ f% i) n8 l e, c3 w% A
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 A5 S( C0 P; i' q. ~2 c+ B#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
) I/ h8 K5 U$ Z9 Q& l
) _ j) u# d% H9 D7 e/* assign the tl som board LED-GPIOs*/
2 f4 t6 l+ r2 q( _- U/ P( Gstatic const short da850_evm_tl_user_led_pins[] = {8 }" Y# n5 Q; q7 F) H
/* These pins are definition at <mach/mux.h> file */ l: b3 y M( ]4 [# i
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. ^3 Y- p9 F0 P2 s6 v: R# w l
-1
7 a5 y* U( g$ ?" |3 J( h};
+ l6 ~* X( y# }- \$ c4 d% Q" D( v& u
static struct gpio_led da850_evm_tl_leds[] = {% u- q$ ?# c3 f: N$ V
{
0 g% [% }9 @& i7 z5 i) A1 c2 N* ?& ] .active_low = 0,
3 j( R$ D3 j' x, j2 y+ m6 { .gpio = DA850_USER_LED0,# u% h3 e5 S+ V/ h2 Y% ?5 |8 F" v8 J
.name = "user_led0",' {0 E$ v# a5 }: X+ i
.default_trigger = "default-on",
+ t' k! g! Q: e; l" m },+ B1 }/ v+ T% _5 I0 z
{" I; z& F! O/ ~$ |6 Z. K. r
.active_low = 0,
' C$ {; a/ h: r b* N .gpio = DA850_USER_LED1,# e7 \2 T6 O7 Q/ m
.name = "user_led1",
1 V9 ?3 j R+ ]$ y O) B .default_trigger = "default-on",! ]4 ^1 Q& s" ^7 @3 }' K% O
},! L( s3 k9 ^% C
{
) d. D* |2 F/ O! k8 { .active_low = 0,
9 y+ ~+ f) d9 Y8 ^: R4 _ .gpio = DA850_USER_LED2, |9 Y+ C+ x9 j
.name = "user_led2",+ A/ n) m: v; M2 l+ \
.default_trigger = "default-on",
4 q: O* y! P w/ Q, h( u },
_6 K. T$ [+ [1 x& f3 z {
3 x) b4 I/ K. q5 M .active_low = 0,
" m; K& N& m- S* L# c .gpio = DA850_USER_LED3,
6 Z. H, H+ h$ ~5 `) _ .name = "user_led3",
0 T& w. ?$ @4 q4 C0 I .default_trigger = "default-on",
: m+ Y$ W) C1 }7 D% H3 ~ },& { Q5 z9 o7 {# b9 w! a4 q% e9 U
};
6 x9 I1 R# j& A. o6 ]2 }# ^0 C. q8 G- X {/ p" v
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
" Y2 r$ @8 u* o, t8 E .leds = da850_evm_tl_leds,' W: }0 V' X7 D2 r, C0 n0 |3 [
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),! a' w5 r. ]% }% [- Y+ [, _5 C
};
; G" x& i _4 L0 I6 X' o) \/ F" M$ C5 ^
) |" R/ Y! g3 G( M! m! Z# z, qstatic void led_dev_release(struct device *dev)3 i& u" a2 l* G9 r, ~/ y% n
{
$ W/ Z3 ?0 x9 Y# f0 W' G \. c};
* j2 I/ j. `1 V6 S1 w& A
8 V# E3 m1 K6 `0 X8 \static struct platform_device da850_evm_tl_leds_device = {
& M( x; h7 c. A, v .name = "leds-gpio",
0 G8 T! |- y9 \* T+ j* S) E" O! S7 d .id = 1,
2 A4 n4 K3 f/ a2 l1 n, e; Z .dev = {
# m. C& v6 W/ l' v8 A. i .platform_data = &da850_evm_tl_leds_pdata,2 t9 w7 r) I7 x3 ]3 B M
.release = led_dev_release,
* ]( C1 R d; b }
# u5 R# U! A! P5 O$ Y};! M% v4 N% p4 t* X7 B( P
+ V, \# ?2 P) B9 [; _' f* x( [static int __init led_platform_init(void)
1 _; i! d* J8 r; i" c9 w3 E{! Q# B M9 y) }1 |( w) @# B' ]9 t+ H
int ret;' X5 B$ `& `% N9 }2 W' l$ s* t
#if 05 r# a: k& b* u) D" a" h
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* l1 U2 G$ X. P
if (ret)
0 P* P( q& \6 Z0 ?/ w* \ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
. d( {3 Q, Y9 x, `0 e# D u "%d\n", ret);
/ F4 T% c# i4 L" K% F! Y: O0 v#endif1 {# ~) i" [" V: Y2 \0 Q
ret = platform_device_register(&da850_evm_tl_leds_device);3 U/ F$ N8 s. \1 `" S
if (ret)
5 O& x2 l% M/ e pr_warning("Could not register som GPIO expander LEDS");! |2 C5 Q3 e, d ]1 u: @+ p; i
else
" D5 F" `' Z# O( m printk(KERN_INFO "LED register sucessful!\n");
& h& X* K# N% N% X; _' _. X- C0 ^( b- P) c$ y
return ret;
: @* p: X/ D3 K3 ]0 r; }}, {7 h, j1 p3 Z: K# r" ~
" ~( O% J6 `7 Z0 B! o# n& Istatic void __exit led_platform_exit(void)& m. W( E8 U$ c* z
{
/ L) h' {3 H) w, X9 r platform_device_unregister(&da850_evm_tl_leds_device);8 @) z" b2 E9 n L
9 C! a# Q6 H2 Z$ |5 e+ v2 `
printk(KERN_INFO "LED unregister!\n");
1 k v6 w% v2 s- |}/ e( U2 z% x. v( s# h
8 }& Z' t' X9 ~; v' n: I* ~5 kmodule_init(led_platform_init);
# j. R- {) b# W: ]3 Xmodule_exit(led_platform_exit);1 t2 O1 y. i! h3 i6 \; u
4 \" S2 H) ^3 \& ]$ Y# j7 R# vMODULE_DESCRIPTION("Led platform driver");/ Z2 e* t, l) w! a! y/ b
MODULE_AUTHOR("Tronlong");0 T! J# e2 _7 }* H7 e0 q' o
MODULE_LICENSE("GPL");0 S9 d+ p. f& k: r6 _
6 o, H9 V$ E) q9 Y |
|