|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
{% w) R5 x8 y& F! N#include <linux/init.h>
" @2 G: b2 [) X8 d/ F#include <linux/module.h>6 M2 K( g( _* d5 a; J6 m
#include <linux/kernel.h>
) o8 Q+ ?- S+ D) y#include <linux/types.h>
/ s4 u+ B; j7 \* c8 v; F& I#include <linux/gpio.h>
4 V! x7 d* {3 C2 f0 G#include <linux/leds.h>
$ ^* w1 K& k$ k+ D, g( E#include <linux/platform_device.h>) X! _3 l) W- V- h% r
3 ]6 y# s. O7 N. |5 T) Q. R: R#include <asm/mach-types.h>
; ]2 Z/ ~0 ^) {) b6 b4 b k#include <asm/mach/arch.h>; s$ w0 h/ ~! l: Z5 b; S+ ] a, r
#include <mach/da8xx.h>
" Y& j" h/ d. n: Y7 ]& m1 R#include <mach/mux.h>' c s! X7 Y- F8 O* H9 M
7 g! C2 M$ j$ i
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)1 [6 J$ N( x, H. q" v- ?
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
9 g/ C. o6 i3 D$ q+ E$ L$ @$ @#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)9 w9 H& H8 F% ~+ d* B4 d6 M
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 X+ l6 ?, c- p" l- N( X
0 _, o4 X; r! s1 z) l4 G
/* assign the tl som board LED-GPIOs*/+ L+ ]- P( e0 [6 W. T
static const short da850_evm_tl_user_led_pins[] = {
. P) a* K/ C& x) ?' r /* These pins are definition at <mach/mux.h> file */
) x! Q s* P. H, k2 v# T DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' T/ s" c9 ]+ K( O -18 t- w( S- a! @% M$ ]0 g* G
};
" u( M2 E2 r6 W, }- n ? T
/ s- a/ \: F& H( cstatic struct gpio_led da850_evm_tl_leds[] = {: G/ _& U; p7 F2 Z
{
" V5 m( [& ^ f& x& m .active_low = 0,
* T& f/ h/ ~0 L+ T .gpio = DA850_USER_LED0,
2 Q+ P3 ]9 X5 O% }% K! H .name = "user_led0",$ t& t2 E- u* v8 c! a2 H
.default_trigger = "default-on",
0 r! b! D8 o: A3 G },& \) q& T" c2 |$ F9 ~
{9 \7 Y7 |8 ~0 D1 l, R! g- c l
.active_low = 0,
& p. D: R! z& F .gpio = DA850_USER_LED1,- W3 p/ ?7 |8 k1 s% c" ?' m, F
.name = "user_led1",: G5 P" {# | m1 ]; _5 B
.default_trigger = "default-on"," E5 I \" m' o/ Z5 Q( i$ ~
},# r5 D! ` a2 `* M/ a
{8 a3 v, a6 X3 k) k" g. W3 J
.active_low = 0,& y0 [' Q4 r; ?. y
.gpio = DA850_USER_LED2," q1 ^* `$ a1 G; x1 ?. y3 d6 ^
.name = "user_led2",* X7 b) q8 e& D, k E' B5 Q
.default_trigger = "default-on",
; W0 q J4 b8 M+ ~, J },- y" F+ S2 p) \/ Q3 o/ I7 S
{3 Z' N/ k* c8 ?- n" C
.active_low = 0,
4 R; W4 [) q# Q. a .gpio = DA850_USER_LED3,3 [' Q2 k& _+ ^
.name = "user_led3",
( B+ h" s: E) L5 j( { .default_trigger = "default-on",
! W/ T* {1 R w1 c" L4 Q },
6 z7 C( p6 o5 b' `; I. J1 X1 P3 C U};
P. |( b# c; j2 i. f9 L3 d3 R. ]. D. `! l. T7 {# R
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {- e& N6 d: L$ p9 e
.leds = da850_evm_tl_leds,& L& t2 x2 G/ U# b! Q& g) b
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& Z2 ]7 b: K0 C' i4 ]! O$ H};
3 P4 s% P" j5 I% F, ~+ A/ u4 O
) D5 s0 _! k* C5 \static void led_dev_release(struct device *dev)) K- q0 U1 u% V5 F) I7 c+ \
{0 B7 ?. S9 ]4 b3 Y0 u3 h9 u
};. Z0 X) N& q+ F! N7 Y+ ~
4 G2 @2 n, y6 I% k% B: m/ x
static struct platform_device da850_evm_tl_leds_device = { T# w E/ ^" k& ^8 i$ B2 V4 {
.name = "leds-gpio"," C1 H$ {3 G) T$ a
.id = 1,
" C; H5 F6 ?8 \ G2 X7 m. p1 e .dev = {6 W( O% S/ H' k+ O% T: F' R
.platform_data = &da850_evm_tl_leds_pdata,
+ @" |9 n/ Q- N* e% T) M5 w .release = led_dev_release,
% S! ?2 L9 G! h9 g1 U }5 Z$ p: K* N2 F9 T _: R
};
) K" B" T( n+ R* y( ~8 R: L7 j9 {6 q: g8 `5 L
static int __init led_platform_init(void)( F2 x0 M+ a- y& k d
{
0 v0 H) F' }- j d8 k int ret;" b! G0 N H2 u" g0 t
#if 0
$ L% G# N) Y; @ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" W3 Q# h% U7 f; `# ]4 v
if (ret)
$ ~) K- V7 o9 | pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* x7 {, ^) m9 F8 k: [ "%d\n", ret);9 m& e/ w7 s. y$ f
#endif9 y' v! y; J: A2 [) M( A
ret = platform_device_register(&da850_evm_tl_leds_device);8 ~6 _- _# t& ]& @) ~+ s1 r+ k( Q
if (ret)
. O. O* ^6 D& X1 j# p/ ~0 A/ G pr_warning("Could not register som GPIO expander LEDS");
9 P7 L! g, Q2 |& h; f0 R else
% @1 b; s: `9 b& A/ J printk(KERN_INFO "LED register sucessful!\n");
c( g3 C5 O8 t) j) g8 ^, k- k4 k# {, R% @7 X) L) Y, b7 L
return ret;3 n# l8 |4 ^, D1 j
}
$ M9 u5 d6 D5 n% m1 ^) v. I+ W/ Y8 I2 L; O- B' W" z
static void __exit led_platform_exit(void)# T/ Y2 B, w5 ], r9 W g
{+ o; n# Q. n4 x! z5 \1 t2 U/ M
platform_device_unregister(&da850_evm_tl_leds_device);5 E6 V! g% C% t
' f5 H) D$ D" T$ n# W printk(KERN_INFO "LED unregister!\n");/ I2 p- L* [' x) D, I
}% g1 w2 S( Y# H
2 J; A/ [" E' G3 [
module_init(led_platform_init);( s% u. h2 n& i6 Q O; z
module_exit(led_platform_exit);
' j9 D( N. ], i& O" v7 ]. e# p, D8 W6 q6 e$ [6 G* b% a+ e
MODULE_DESCRIPTION("Led platform driver");4 H& W ^+ E3 S. C5 z) x
MODULE_AUTHOR("Tronlong");
2 V; g* W4 L1 W! @% zMODULE_LICENSE("GPL");
4 y; U3 b* i3 {0 I0 `+ o$ w9 _) O( u3 ~ @3 v- p) K5 K9 U& t$ A
|
|