|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 p/ k) p1 g% E# R#include <linux/init.h>
+ c3 N4 a/ H6 c: C#include <linux/module.h>- z; \4 J B x7 U/ A
#include <linux/kernel.h>5 N- D: Q" u2 Q" c r
#include <linux/types.h>
- |! }5 z9 w5 }$ s3 f#include <linux/gpio.h>$ k& U, k6 Y! x7 b4 z4 S
#include <linux/leds.h>
0 v+ j8 G9 S# q* Z- b#include <linux/platform_device.h>, B/ U2 T" R# {( x/ w; X
9 q/ t7 Z2 m) d% Y% {+ i" w
#include <asm/mach-types.h># R X5 k9 \* j- |5 ?
#include <asm/mach/arch.h>
& J2 _7 D! q$ m \- y% \#include <mach/da8xx.h>- j- ?: r# D2 f7 p0 B5 `
#include <mach/mux.h>9 j! t# ]1 O) a2 l( W
! U' Z# M6 e& c/ z. V: w: e; c#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ ~8 C4 X6 j1 Q% l5 R9 M
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
H( T, {, d* M#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)- b7 d9 ~/ y8 O( v5 Q u$ e/ T
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& M n6 Z: m: A7 o! O5 M8 \4 u$ y1 I3 T. E. m$ e' |7 }6 V: p. |
/* assign the tl som board LED-GPIOs*/* n% L6 d! y8 u) u9 J
static const short da850_evm_tl_user_led_pins[] = {" y6 F. e* v+ d" o2 C; Z% J
/* These pins are definition at <mach/mux.h> file */) m- r; N& f, B- P0 p3 k
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,8 f6 ?" v. [ z" z- D/ t
-1& o, R7 |+ M: w+ a6 Y7 ?1 {5 X7 T
};2 [) Z$ t; e- M* B# i7 s' w8 H
! Q* k: ~) L& M `% ^
static struct gpio_led da850_evm_tl_leds[] = {7 l" D6 K8 q+ M
{
+ W" m$ C- k4 {3 H .active_low = 0,3 |4 O2 i P: |+ T# e" L- }
.gpio = DA850_USER_LED0,
8 s1 B6 L D- f$ T6 }0 a- |8 S .name = "user_led0",- [7 b% d, O- K; Y
.default_trigger = "default-on",& v. A v6 h6 T" V3 C3 h- q
},
$ o5 o* L" _3 [) Y. y4 S8 T& R {
& ?' i J+ _4 s9 O2 a .active_low = 0,
( o( A j* i: }. v& y .gpio = DA850_USER_LED1,
& u, I6 _7 b4 `* z: z" f4 i .name = "user_led1",1 }$ X9 Q9 O S
.default_trigger = "default-on",
" k, m% B1 J3 c- u },- w- @) r' ~3 f. ?1 a! v5 v5 J
{& a: O: t% H8 f
.active_low = 0,& E, I$ ]% P( W- y
.gpio = DA850_USER_LED2,3 h4 R, W' G% _1 D
.name = "user_led2",
3 l8 u+ G/ ~3 m .default_trigger = "default-on",
+ y3 n/ u7 ?, F },( z) V" e& Z* \! ~- z0 }; B- ?
{% k$ x/ [. x! ?$ o) n1 x
.active_low = 0,
4 _9 e" I& p$ R$ B7 X/ D6 a9 y .gpio = DA850_USER_LED3,( s% R' T5 ?( d+ a o( E% `( w
.name = "user_led3",0 I& f [( X# c, i5 O+ C9 e
.default_trigger = "default-on",
4 `2 U7 E; [& R" A: w },5 Q+ S( [; L5 U$ D, `2 ^3 h
};
# M& p2 y. o6 r6 v/ x9 b7 A/ g1 Q
7 t/ Z- ]% o* | C) T) Gstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( U0 s) Q5 G8 Y, G- H .leds = da850_evm_tl_leds,
% R* u9 R+ E9 M& r! V .num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 }+ |- d# l$ ] q
};
3 F6 ~; s' |6 y5 Q: `4 k% y: e! v
' s* ~! m; r" A# fstatic void led_dev_release(struct device *dev)4 c' v7 e- c# D, Z6 O1 X9 q! d
{
$ m; G0 ^* D0 h" J, e8 Q$ Y; z' X};! d5 o: u( w' Z& f2 P, q7 Z& X
$ ]- K* j2 N( p* w, d8 t4 }static struct platform_device da850_evm_tl_leds_device = {5 C3 X9 T% W, W8 r6 _$ T' h/ t( \
.name = "leds-gpio", H* s: m) g. J! E& q" S( r. T
.id = 1,
) {1 j5 J9 \; J) m w+ V. K .dev = {
`7 n+ _, N9 o* ~: T- h- v .platform_data = &da850_evm_tl_leds_pdata,! @9 |5 }4 i# X" v
.release = led_dev_release,
2 L# C \1 m* J7 t2 e+ p/ M4 \ }+ \( A. k0 ?; |/ v0 Z
};
* \9 C8 \6 h7 z
/ Y, d1 W9 T+ dstatic int __init led_platform_init(void)3 y' L/ f! H- _, U4 ]
{
! ^9 g) Y/ t0 ?! m! g! U int ret;
. ]# c7 X3 l/ x& m1 t#if 0
# G" J8 \' i5 @% h& } U ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ o+ r# t4 B; N0 M5 R
if (ret)
7 u% C: [: P( j8 [9 b. @0 S pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
, U/ J+ G4 o; m5 v5 v( R "%d\n", ret);
$ M# w, N. J, G p#endif
n" |0 S- ]4 q0 u1 p1 x% B/ l ret = platform_device_register(&da850_evm_tl_leds_device);* s r* t L \1 N3 H. T/ i
if (ret)
, i$ a5 C- C- e) f$ k pr_warning("Could not register som GPIO expander LEDS");
' X# @, N/ ^4 l d& u else3 ^8 l: M) @/ X$ {# U9 C, j4 Q/ V
printk(KERN_INFO "LED register sucessful!\n");
* }" z4 G/ c9 E* `* y* n" y& V& B1 V3 a. H
return ret;: c9 {# D8 z- J$ `' Q
}% j# B/ ?5 y/ S, g0 k4 d
9 J7 ?+ W' }1 Ystatic void __exit led_platform_exit(void)/ A/ m" J l" ~
{/ `$ `; t* W1 P( o
platform_device_unregister(&da850_evm_tl_leds_device);
R7 A6 F2 U h9 N2 X' m6 j. ~! J5 x7 s' p+ H
printk(KERN_INFO "LED unregister!\n");: a* q9 _9 V/ B s. b
}
- v. _) z! F+ d1 r+ i5 E3 h3 t: y9 i3 W0 i0 i& Q R
module_init(led_platform_init);( b( d& m8 p4 W
module_exit(led_platform_exit);2 L6 ~* D3 s L# i* o
: i: E6 s# b( s9 h8 D' u/ f
MODULE_DESCRIPTION("Led platform driver");
& g5 i$ O6 @; w" V% T* @MODULE_AUTHOR("Tronlong");
# I( h' I F" xMODULE_LICENSE("GPL");
* U, q. o- s5 _" R% H
' f6 K( ?" W0 h) Z. J2 M |
|