|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 y! E* k3 U, C' |#include <linux/init.h>% T* `. \" @4 N8 Y' [4 V, i7 h
#include <linux/module.h>
* W) B, m. S( z% @6 C$ q- v8 ]' L. L#include <linux/kernel.h>
" u, w% P* d. l8 H) h! c$ p9 k#include <linux/types.h>3 `4 k, o% _) [ [1 r; Y4 v
#include <linux/gpio.h>3 W% W% `' }3 v* l( X4 A# [
#include <linux/leds.h>. w/ I7 c( E) e6 y
#include <linux/platform_device.h>
* V/ E- j; U: u3 Z& `, _/ I6 h+ F; b1 [1 D
#include <asm/mach-types.h>3 N C! v0 D* A2 g
#include <asm/mach/arch.h>% M& T( W5 |! E' Y, `
#include <mach/da8xx.h>; T5 T2 k6 @4 ]! N# p- M' b; b% [
#include <mach/mux.h>
; K5 D2 T" L/ N0 [. }4 ]4 p3 M7 A7 \. L, k, J2 X! T
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 l- Y3 J* q! ~#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ U4 G5 f, R: R* ~ i4 K
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 t0 V4 D! f( d# s+ r! @#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: o5 m j; G" r \: r# N" e
7 r. i* p x) y5 W, A/* assign the tl som board LED-GPIOs*/
+ _0 M2 N3 [/ n6 ~: \; Cstatic const short da850_evm_tl_user_led_pins[] = {- p x5 k$ r1 n9 ^' J6 b
/* These pins are definition at <mach/mux.h> file *// V7 R! T( `% i. R, W c C0 Q
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( n, s! Y) k4 F a$ N
-1 Q4 ]9 w/ X- R( D
};
2 n" N k0 l7 {5 q
. E# l2 D2 ^% M. Cstatic struct gpio_led da850_evm_tl_leds[] = {
& ]& n& P$ h- X# l" e {+ G1 j8 b3 A& n# j7 L* s* u8 ?
.active_low = 0,' }: I- f, {1 r D
.gpio = DA850_USER_LED0,
1 n5 ?! O+ l# M1 l' u .name = "user_led0",5 I; v1 G% W+ M6 D
.default_trigger = "default-on",% F2 M5 b. L3 T5 {: _/ H* y6 v/ m
},
2 ], ^; O! b9 h9 R, R/ P {
# Z: ]- F* I1 O. o! a .active_low = 0,
( ?) q% T2 t3 m& e .gpio = DA850_USER_LED1,! c9 _ j7 }) S( Y
.name = "user_led1",
% }$ C+ r$ `+ k; e4 y1 c .default_trigger = "default-on",
, J/ a. @- i" G6 }8 ` },6 c8 k# [ r" C8 G
{
- {# k2 J* }; O. }0 M0 d" H( ^ .active_low = 0,2 X. R8 m/ e4 Z& i) D
.gpio = DA850_USER_LED2,
1 g6 y1 m' t: q! O .name = "user_led2",2 p* m* B) l4 R8 c- S8 D5 m
.default_trigger = "default-on",
# B. l4 r: d [4 q/ x4 n( j },
9 A/ D+ Y9 u) P; C {: o+ `) f5 @9 |$ T
.active_low = 0,
# |7 x" {8 C$ q .gpio = DA850_USER_LED3,
. o& {: a) Z$ [+ k .name = "user_led3",/ S; r( F- {% A0 u" [7 \ T
.default_trigger = "default-on",
/ n( \; ]" z% }+ K7 |! k; ^ },
1 @. G8 _0 j7 u l6 C$ ?};
0 i4 F* z7 O6 ~- U( ]' _) a
O3 P' y2 `' K1 Q! cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 m: a- M/ ~1 K/ Y1 k8 b- }0 @
.leds = da850_evm_tl_leds,
$ @: E: {/ [- S% M' T .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 ^3 O' A6 U, q7 p) t};
! M; @& z1 d" l2 X/ U# U. U; w( o, d) W: j! b7 G/ |1 [5 C
static void led_dev_release(struct device *dev)
/ m N! n/ R7 k1 h{. w4 p* ], N* u% O+ h: u
};
+ d9 W9 S+ U% H
0 H7 f) D+ C& m* ~* V0 Ostatic struct platform_device da850_evm_tl_leds_device = {) z! h- G+ u3 t: S, Q
.name = "leds-gpio",1 ]1 n( x+ _; ]7 E2 r% G% G
.id = 1,
5 |* Z. M+ b8 \, Q4 B- d .dev = {) K3 ]6 r0 \: l; P$ t1 J$ I3 ]) v
.platform_data = &da850_evm_tl_leds_pdata,4 e- X$ N- ^1 D" d( s6 |
.release = led_dev_release,
4 i: y+ {4 c" T+ E% j- R# Q }; B4 i2 b0 K6 r. B, t
};
# a$ E% f! n. G/ }$ o6 k/ p
& }; S% T3 K/ s% ?1 i/ Qstatic int __init led_platform_init(void)
3 {$ `8 {# F, g- e/ \{9 R; s/ o+ f# a( ~: r: P/ q0 W. W
int ret;
* K6 n3 |5 p' G#if 0
a, I9 m1 d3 N+ t2 F! D: @8 H ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
6 B! L* P) ?6 ^: E" `1 P2 O if (ret)
4 O( r1 t+ b. M4 U, J6 e1 M. v pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ W! q" `4 u. Z4 h "%d\n", ret);% L4 E# y. k; c% }0 F( t2 m' `3 y+ h
#endif
$ _4 K- w" A% g; `# F' p8 j* D ret = platform_device_register(&da850_evm_tl_leds_device);
% o7 J7 Y! x; k1 e: L0 d if (ret)
- U1 t! `3 H6 V( Z7 E pr_warning("Could not register som GPIO expander LEDS");
( ?3 f( t) Y% {' Q% } else: W' u6 y6 ^5 e# L* ^7 D5 z
printk(KERN_INFO "LED register sucessful!\n");
% M* L. T7 m8 A/ ]% U
9 g I$ B" [5 ^. |/ \ return ret;/ f$ {% q/ k S6 D) ?: [9 Z3 h; A
}
- C; m; `3 s* V( K+ h+ C
' Y! k+ z) @4 N- R7 r# rstatic void __exit led_platform_exit(void)
; b( x+ i: T! m{
, [5 e' {, N ]$ I! \; p, D platform_device_unregister(&da850_evm_tl_leds_device);% G1 N2 d x- o/ _
5 B5 k; J8 n' y l# V
printk(KERN_INFO "LED unregister!\n");$ I# L, [; _4 o: Z! u* L
}! e$ T1 D$ I7 g
1 x/ |5 s2 g. H! O% S
module_init(led_platform_init);' D4 [* U/ F. f) E0 ?2 s p2 S
module_exit(led_platform_exit);8 k$ T Z( W: @! ^& p! d) D
1 s! f4 L t" {$ s8 t* f
MODULE_DESCRIPTION("Led platform driver");
6 E: n1 g8 l( \! dMODULE_AUTHOR("Tronlong");
/ Y! G+ w {+ I9 ~0 S8 CMODULE_LICENSE("GPL");) V! G& u3 ^6 w/ _, a
; e7 \8 N% }+ F8 A' X8 P |
|