|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
Q8 V F' J4 H$ o/ w6 a#include <linux/init.h>: f6 T0 t! G8 `9 [
#include <linux/module.h>
- @4 @! j1 Y- t#include <linux/kernel.h>
1 h4 \( W7 L$ p- t- x+ u* c% W, ^5 o#include <linux/types.h>
. [4 s) ^: x( X1 h+ E#include <linux/gpio.h>
7 I1 U2 N$ D6 f% c' t#include <linux/leds.h>
& S9 j* t5 ^; b9 R) b! v$ |#include <linux/platform_device.h>
6 Y8 P- s* ^* D' g3 r" n( m q! E( u. s. j* t4 Y
#include <asm/mach-types.h>1 r: F5 d$ a2 t0 e! o& y* v
#include <asm/mach/arch.h>2 O/ u8 V M* v2 K" t& }
#include <mach/da8xx.h>7 [- p, A8 M* N, L3 c
#include <mach/mux.h>
# J$ s3 D( c, k( |/ W. Y5 a) y5 X, g, `
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 e' c" g* @' z#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 A/ a% ~0 E2 ~* s" }
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" s) ]' z/ Y0 B8 w2 b/ d
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)( s" B7 m+ l3 A4 n! e4 l A0 R
5 W! p1 S3 U+ T: k. w5 \9 S
/* assign the tl som board LED-GPIOs*/
( N1 k0 ~( B# astatic const short da850_evm_tl_user_led_pins[] = {
" E! f) |# _! _. F+ D( m /* These pins are definition at <mach/mux.h> file */
+ }, y$ V/ B; O, s/ d: V! r& { DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ l9 ?3 W1 \" @3 Q, }* q5 I
-1
- x# F5 z7 x( U: U};( r3 y8 u7 H& t8 R! n% n
' L( W) `+ v8 |* j3 vstatic struct gpio_led da850_evm_tl_leds[] = {
9 e. I( P: t0 I( K! v% U* L3 N4 y. a {
1 x I. f+ D. J0 v8 C2 p .active_low = 0,) C, l0 v* G. X) l0 V4 v
.gpio = DA850_USER_LED0,
+ p. N9 I7 M+ F6 w4 f .name = "user_led0",8 {% ?+ c7 M/ p( K/ j/ T$ B, Z
.default_trigger = "default-on",4 G% Y/ }/ r% A# E* F: v( O
},
: M& j8 ~% T1 W1 K9 y0 m j2 f {( p I# E( M- h4 G
.active_low = 0,3 t* ?% L3 x# p+ P+ H, z8 E
.gpio = DA850_USER_LED1,$ q1 j" S# g$ C- E. v
.name = "user_led1",# I/ w6 A! a ?) d6 @: G* a
.default_trigger = "default-on",/ Z% G3 E5 O; C# S
},
0 G7 \2 k4 `4 M J, h {
0 e. w. g7 P3 c ^ .active_low = 0,5 x) p, p" ?) r/ p; O
.gpio = DA850_USER_LED2,+ b4 z5 @. P# y" r
.name = "user_led2",
1 l5 M# m( M. L. a* P" D .default_trigger = "default-on",% k8 i$ @# g; x7 B! I: U: U
},
& i8 W; Q0 z9 I. d/ K5 M8 a {
- T5 }) @( P% q7 \) N+ f .active_low = 0,8 a( d' ]8 D1 C4 j
.gpio = DA850_USER_LED3,
; V2 u) J5 c' U* { .name = "user_led3"," ?- i ? M: W1 A/ p
.default_trigger = "default-on",2 L: n5 S# C) @8 k8 k' H
},. t `4 u8 v) d0 i( w0 A
};
( Q; G8 `( C2 Q" x5 J' m5 p0 z g3 g' j! d1 A7 E
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {4 X* m/ l8 s: W5 x* i
.leds = da850_evm_tl_leds,
' ~& T9 I) U0 _- z; J5 g9 H .num_leds = ARRAY_SIZE(da850_evm_tl_leds),9 H" ^5 p( z( z2 X% f& q: j
};3 }8 V {% P; W9 l* a# m
. w5 @' A2 Y W. R) K& O5 o
static void led_dev_release(struct device *dev); D8 p3 J) D( R) k1 O
{
, K3 m1 S3 j( j5 Z) A3 M& c& y9 b) p};9 z& ~" F% O; \( K! `
! h7 A3 F* ^$ F+ p! ~+ q
static struct platform_device da850_evm_tl_leds_device = {
. z0 ?, h! }% G5 Z .name = "leds-gpio",: D' s2 g( L. L* Y/ ^
.id = 1,, W& z) O6 O- A. E5 |$ y+ B
.dev = {# Z! X" m6 Q7 R! g1 H1 x8 O
.platform_data = &da850_evm_tl_leds_pdata,
0 g5 `& j6 Y! C( Y- H .release = led_dev_release,
" z/ [$ s* B9 F4 g) ^/ d }/ |5 e g3 R8 |2 }$ `+ e* u
};
) \$ x3 i- z' F0 d( I! t9 M. P( v) G/ c0 m: Z# g
static int __init led_platform_init(void)
! s6 M: ~4 S- n8 {: ?4 i9 V{- Q6 G* O( Q0 a0 Z( R; t
int ret;
- B0 m$ A1 O2 s: M1 w/ Q#if 0% I$ N0 i; J9 j! P" D
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); f7 T0 L! ^& [9 r& E
if (ret), |' K: z, s& r9 R# Y+ g2 C
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
& C& d* t/ r! I; S% K, o; _ "%d\n", ret);
5 ~8 U- | S' v+ i#endif% U" O- Y! `' E$ k% x6 n
ret = platform_device_register(&da850_evm_tl_leds_device);, @% m8 {( {! R" P& v4 ~/ E
if (ret)1 Y3 c4 s; B' S5 {8 R
pr_warning("Could not register som GPIO expander LEDS");
9 e; a, P: e! l5 Z* ?' M! z! x else- q) Z: d$ L$ H' J* H4 W
printk(KERN_INFO "LED register sucessful!\n");0 g2 s0 k( w6 C3 X3 g% ~& q/ p \8 _' Y
& o5 P/ C+ |+ |% I return ret;( {# g; J. V; T" ^ b: @
}* R; {; Z* ?5 }- Q8 M9 E
) P1 ~' r0 R2 ?3 [$ I. jstatic void __exit led_platform_exit(void)
( H; A9 a; j/ M# ^: V+ r* s9 S{. x* T. p3 H4 [" ?, Q, E9 U
platform_device_unregister(&da850_evm_tl_leds_device);5 K$ r6 C0 U9 n& b3 |, u
' H! w, p8 u' ~ L% D) _
printk(KERN_INFO "LED unregister!\n");; a, s* a" ^: H0 h. c5 o
}
3 l9 z' o$ V* T/ U+ }' v7 I3 ]3 ~& ]' w$ D
module_init(led_platform_init);
7 i7 a8 C1 ^8 fmodule_exit(led_platform_exit);
% {( N/ h: x! F; Z/ |$ ~* h7 t8 C& r( ~1 g0 E
MODULE_DESCRIPTION("Led platform driver");3 S0 F v3 z5 y1 d, o( `# |/ @
MODULE_AUTHOR("Tronlong");
6 Z3 W: k: ~3 @2 J3 m V) NMODULE_LICENSE("GPL");
# y& Q9 k0 D% A
- x+ N5 m9 {2 Y& e; Z: U8 j% Z |
|