|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 L# h7 o4 r8 F- Y7 @9 n#include <linux/init.h>
, K ~6 D+ C* a# L/ y! U! e6 C6 m1 x }#include <linux/module.h>1 f( G1 O L0 F
#include <linux/kernel.h>
6 k* j5 |3 [9 F1 d; p- e7 P3 G4 d#include <linux/types.h>4 ~. s( }1 o- A( u
#include <linux/gpio.h>$ t8 c+ V( k$ |; {! Q$ \/ }# h
#include <linux/leds.h>' I" [8 Z& |$ C5 A* b* M, L: \
#include <linux/platform_device.h>
, ]9 C# z0 b A) r' \5 l @, n' O' N: W
#include <asm/mach-types.h>
( G% s2 `* ]/ i3 D#include <asm/mach/arch.h>
. ^5 G! k5 ^1 b5 `#include <mach/da8xx.h>' V% O( j7 Q6 V7 \. j/ f8 H
#include <mach/mux.h>
0 C O8 b' k0 F7 }* ^; j/ }+ X+ j/ z
t! r- j: c9 E#define DA850_USER_LED0 GPIO_TO_PIN(0, 0), ?! i2 G7 I2 R, [. E" J5 n
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)3 \' X; u) I+ m5 n7 O: C, [
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 h: [0 m+ a' `! J#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# r: F1 K) j, W9 D6 n2 S- F4 E* p$ |% s
$ A3 Q8 h( p. @! W* M( [/* assign the tl som board LED-GPIOs*/
4 M4 \& w9 q) y' R7 x" V8 g6 gstatic const short da850_evm_tl_user_led_pins[] = {
: Z8 \9 l9 N9 N4 P+ p# f+ ? /* These pins are definition at <mach/mux.h> file *// w- _. J; }1 A9 e6 N( u
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# X% H) Y; Q7 j1 T: p: v, t2 c -17 u( x' z9 J1 E' o% u1 K. o
};
. T% ^. W4 s/ A2 p
! M1 H, t' Y! B0 g5 Gstatic struct gpio_led da850_evm_tl_leds[] = {* ] e6 E3 U4 X# \5 z
{( H% ]8 ?- E7 R
.active_low = 0,
5 t( O6 P) G9 b/ v+ s& c .gpio = DA850_USER_LED0,3 E! }4 s* S$ A6 c. P: S& a
.name = "user_led0",
. @2 H+ y$ _6 u+ `/ \3 L/ g .default_trigger = "default-on",+ F8 }1 Q( _# y. K$ N7 `
},
6 c L+ x5 z. a* U! x {
0 D& d: J! w- V" i. E .active_low = 0,; @6 R+ A/ L+ s K. e4 u; O Z
.gpio = DA850_USER_LED1,+ e) x$ N N2 W. u+ @/ c
.name = "user_led1",/ |; l0 {3 U, M2 i0 t$ F0 m' `5 v" m
.default_trigger = "default-on",6 M5 t4 ]+ E! t i
},& E* M7 B) m( h/ h7 n
{
8 |7 Q5 W% X- M .active_low = 0,$ e9 e' N1 \. s; l2 j
.gpio = DA850_USER_LED2,6 I& v. W4 ~8 }. k3 Q9 D
.name = "user_led2",
0 e! b- v' h% x5 O .default_trigger = "default-on"," A2 X/ v8 z6 ^6 Q& h9 T) J/ R
},
2 D, \, l# q6 y0 r {2 L8 m* n6 p$ o! Y0 Y" a6 a" u1 N
.active_low = 0,$ e! M1 q& o; k0 L+ e; y% l; @
.gpio = DA850_USER_LED3,$ g$ A$ a4 P* c( w
.name = "user_led3",
2 O0 M0 m, C8 t8 a( Z .default_trigger = "default-on",) S2 X6 q" e3 n7 ]5 J
},
V G3 t0 c3 v3 G; W' ~; C};
4 h. X$ \2 N1 X* X
/ d* ]! ^( I% V% Hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {. ~* D$ K2 H- x4 P; p* t; ?6 C+ W
.leds = da850_evm_tl_leds,
7 S3 S% X! B9 P4 V; L .num_leds = ARRAY_SIZE(da850_evm_tl_leds),$ G- @- Y0 ?. u* ]( }
};
1 G, b+ [' A$ l# F q+ m. Y$ B
$ I3 i! [0 a0 T0 J% m! W# qstatic void led_dev_release(struct device *dev) C" `5 {* K4 O2 Z
{1 M7 c+ u2 s! d$ }/ b& E$ b3 n
};
9 L" N3 r- `& U7 c& ^9 u4 D4 a1 D1 ^( G; r- G' I/ [, J
static struct platform_device da850_evm_tl_leds_device = {
6 E) o/ B9 G- P9 w .name = "leds-gpio",
' A0 q$ I/ W* d$ k# Q( J .id = 1,/ T! H* K& y. ]
.dev = {
0 F4 j ^# J9 ~: }5 D0 Y8 S .platform_data = &da850_evm_tl_leds_pdata,
: b' H; T6 i' J, T8 _( } .release = led_dev_release,
$ r0 P7 g+ n% | }
$ `0 @1 o! Q# X' Q6 G};* e, k7 d, ~0 q( B) c% b
) I+ P9 ^' X ?. V$ E9 A; o$ jstatic int __init led_platform_init(void)
) q7 A- T% G+ w; `3 U8 O# J{
5 o' x$ q6 C+ Y" N% \! X7 c int ret;
& ?/ b7 p0 [3 b#if 0+ X( }7 x" d8 A( L3 P$ I( s. H
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! B+ |! n8 {# u
if (ret)
. U! B8 s* w( r+ @5 m3 y6 p9 q pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
1 }( c6 E& A: w4 s$ E W- ] "%d\n", ret);; a m6 I# J( [3 _1 P& P3 V
#endif, o4 b* H- ]4 W9 B! g7 F9 t
ret = platform_device_register(&da850_evm_tl_leds_device);0 }5 |' M. s9 t' K" _& l
if (ret)
0 |& y# h! f2 g$ ^" E pr_warning("Could not register som GPIO expander LEDS");
3 B8 T8 ~6 P n4 n7 t4 ]% ^% ] else* G0 a; W* f( |; `5 y& G( a2 `
printk(KERN_INFO "LED register sucessful!\n");( R' n. g) m) r3 x
J1 D, y) y7 Z1 ` return ret;. {0 U1 K% M f
}
, y9 h$ R' `& p* X! i1 c5 j5 M* J# l& M [( }
static void __exit led_platform_exit(void)0 U+ k% X1 H- F. E N
{
; M) J# M, c) j platform_device_unregister(&da850_evm_tl_leds_device);: W2 e ?8 y, S. I5 l8 `' U2 f
7 N' e2 E1 J+ y! V! g printk(KERN_INFO "LED unregister!\n");. J: k H9 n6 J [" p) N
}! w, O8 X: ^( l: ], Q) n
2 l& w i% i1 fmodule_init(led_platform_init);2 m. L1 {2 i9 T- W4 l% C6 w# G
module_exit(led_platform_exit);( v: R; o* g$ B5 Z
( T. ^: w! K+ w2 M5 F1 i# s' D( D: qMODULE_DESCRIPTION("Led platform driver");
& y* o( i! `8 k, G. ~MODULE_AUTHOR("Tronlong");9 H: G5 @1 ^9 \2 p9 |
MODULE_LICENSE("GPL");8 q; c4 A2 F1 M5 b
9 C* z3 j+ |: B* Y5 a! o |
|