|
|
求大神给下面的程序做注解,请稍详细些,谢谢。1 @; S2 k& J! g# [
#include <linux/init.h>
# m5 p0 S5 K& U. b& J9 \1 E. [#include <linux/module.h>' G' p* U, I5 o2 A
#include <linux/kernel.h>
7 o4 r& L/ m) H" w! V7 X2 \0 {#include <linux/types.h>
6 ?9 M! o) R8 b+ i( ~0 c#include <linux/gpio.h>- T. H+ B( ^( H7 a" s. c1 S
#include <linux/leds.h>
) o# p7 N2 C# q) X9 C( [/ w#include <linux/platform_device.h>
. I1 i) y8 v2 S, Z* ^; v: ?) t( O6 ]4 }5 I
#include <asm/mach-types.h>: x5 l. B: ~. N N2 g" E0 ?
#include <asm/mach/arch.h>4 u$ u V/ u: X6 L/ @) @. x
#include <mach/da8xx.h>3 c* i) V5 O" g+ @
#include <mach/mux.h>
- N) W; W B' m( q* Z+ J* b7 _9 p* {, a+ N% @ S
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)9 j: X4 X+ N P4 ~( u' n
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 b1 d0 S7 V$ t2 ], c, \
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)' ]4 f8 c) u; ~) q! [
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# h1 Y$ }4 B0 E/ N5 D
: ? b, m3 |7 E- V/* assign the tl som board LED-GPIOs*/2 R6 p. H$ i) C7 A
static const short da850_evm_tl_user_led_pins[] = {& j! ?9 g; f; Q
/* These pins are definition at <mach/mux.h> file */
9 a& L% T/ O2 D f8 H( P DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,' j! {- t0 D) Z; l7 |
-1* y& `7 D6 M8 r+ F1 u: \. Y1 L
};1 Q1 F8 G& F! v. g ]% _! G- s
) e1 M: ?# X5 ?, G% \1 |0 I/ o
static struct gpio_led da850_evm_tl_leds[] = {
- r% v( x K% g: p {2 g1 d' m! E1 S+ ?5 Q
.active_low = 0,/ J) S1 j' I" i# J
.gpio = DA850_USER_LED0,
" Q. R9 H6 b5 a4 T6 r2 d$ _% `& }8 o .name = "user_led0",& @) k8 @ J1 L
.default_trigger = "default-on",
3 W, Q: M- [* t' c },2 x% [( h, a6 @; X
{7 _: @) _* d. k$ a
.active_low = 0,
0 G& f0 |+ t' ]7 ? .gpio = DA850_USER_LED1,: ^7 G/ d# s ]. I) ~1 L
.name = "user_led1",
5 Z- m" t' c1 m' a3 k2 K$ s& L .default_trigger = "default-on",
" D* B* Y: i2 T- m( q- q },
. @7 S4 {- M p {
3 `1 P* |! G. y# V4 @& M, A- d .active_low = 0,
4 Q x7 E, ~) k .gpio = DA850_USER_LED2,
& X- \5 F# ?# h0 Z+ k c, ?: y& c .name = "user_led2",
9 m7 P5 i, Q* p F9 ]" N .default_trigger = "default-on",
) f9 g h3 N, B8 \9 _1 s D },
9 c- }5 c/ I f. L {9 p* l( B' f( p# h
.active_low = 0, X- }+ u+ S# u+ o& e8 t+ W, P
.gpio = DA850_USER_LED3,6 q; k% \* o, @
.name = "user_led3",, ?2 {3 \1 X- i$ m
.default_trigger = "default-on",6 B' M: r0 r) {- y( z
},
# P. m, v8 Q3 Y$ s1 R% z};
# o: s; e" P% g% u* |0 ]/ ~( r% L* T6 p7 [2 O& n! ^3 u
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
& J2 A" l7 W6 M3 P+ S, B( [ .leds = da850_evm_tl_leds,2 b1 \3 M# K1 v$ b% w7 V0 _
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% h ~/ a2 p1 G+ u5 x5 b; `" |9 Q};
/ ~; l) l4 d: C8 q& n- n Y5 {, U$ k/ W* U6 L. f' P# t, _. t
static void led_dev_release(struct device *dev)
' [- D. r# Y3 R{& w- ^6 s8 p* a& C) K- z
};
5 N3 e _8 v- |' K6 z# t
1 h/ W; s* ^- Y! A7 g5 M# dstatic struct platform_device da850_evm_tl_leds_device = {! w; m, z, s. g" e- Z
.name = "leds-gpio",
2 {& m( \# ]6 K/ h4 |( r( a .id = 1,
( `/ W0 _" \! X .dev = {1 j+ l+ v6 ~1 ~$ |8 Z5 E
.platform_data = &da850_evm_tl_leds_pdata,+ k, b' ~* N! b" ]
.release = led_dev_release,# G" Q( x& F) K
}
. C2 B S/ o7 `3 M: X: ]};( V1 u0 x: c( _! B/ g) o- Q
. B9 p8 r, ]3 S( [2 p$ K! A" cstatic int __init led_platform_init(void)- f3 `. o7 f7 z4 o% b m9 r
{ ^/ p( j) b) t9 D; {5 c: }
int ret;( {& J) Y5 d, ^# e4 t5 C
#if 0 ?; ^' v3 t- b1 H
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);2 d! R) X# k9 _; M: V( A0 X
if (ret)
0 H" P3 L7 D0 G$ j; s4 d pr_warning("da850_evm_tl_leds_init : User LED mux failed :"9 T8 f3 ?( t# t" K, X, d% K
"%d\n", ret);$ D! F9 x% ^" ~- {0 G- W0 L+ k
#endif- E8 }! H+ a2 E3 p# i7 P
ret = platform_device_register(&da850_evm_tl_leds_device);
1 R0 e+ E6 d. }1 ?! n if (ret)
# d7 N: _4 o: ]1 Y0 C pr_warning("Could not register som GPIO expander LEDS");
7 D4 q8 Z/ {" T- M2 ]& w4 T6 J$ @ else
& S( y( @+ u/ y r printk(KERN_INFO "LED register sucessful!\n");% n+ z. u5 j+ y5 G$ B. g) e. N
, i" C K" Q% L6 o) q return ret;8 w* c. X, d% |+ G" h- @% L
}
- Z$ ?3 N% n6 x- C3 g4 F& H% g
3 g& ?4 A( y7 q7 H8 D/ astatic void __exit led_platform_exit(void)
) i; ?! ~5 x! }0 |5 ]3 I; B{* `$ k0 ?3 \2 N* B8 D. j7 E
platform_device_unregister(&da850_evm_tl_leds_device);2 x! `" ~6 X+ u5 S
- _) o: _* m, N% r0 ^2 ?0 H printk(KERN_INFO "LED unregister!\n");, n H6 z3 r: A5 f4 E, }8 R* h
}, m8 N* t$ y6 R ~3 M! g
: p1 n; ^6 F# v1 R" r/ i. Ymodule_init(led_platform_init);
4 m: m! _- u) cmodule_exit(led_platform_exit);& @! H4 Q( H( l
+ Q2 V) }: k' E# y. ^; Q- |
MODULE_DESCRIPTION("Led platform driver");; a7 J( L3 V* g. H& S* u
MODULE_AUTHOR("Tronlong");
0 Z& Y4 `$ A4 i7 j; h/ EMODULE_LICENSE("GPL");, l) x# Z) Z# `
+ l. [, M1 H* b G5 f
|
|