|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 P) M) I6 P/ X, l#include <linux/init.h>
4 J2 l2 T p: w% g#include <linux/module.h>
8 I/ l5 y, z' Q' W#include <linux/kernel.h>
f! ?( e1 v8 T; H# V" ?#include <linux/types.h>
) ]. \" U$ G( y6 t5 r* G$ j#include <linux/gpio.h>
, ?6 w4 z' l5 Y/ O$ b5 A& p8 P#include <linux/leds.h> M( F- l( q- Q
#include <linux/platform_device.h>7 c1 j) L) ^3 ?7 Q% ^5 K% Q2 ~
" |: w2 ` H: x, Y& z
#include <asm/mach-types.h>2 t6 Z" B# A; f; t# W, ?0 v
#include <asm/mach/arch.h>
8 {' K# A% s, V0 o5 m: y! J#include <mach/da8xx.h>6 E- l8 W( D6 U5 N9 W9 K+ [4 c
#include <mach/mux.h>
2 t) |8 ~+ f( b$ m
, n* w! a) `* T% B#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) |6 ?3 m9 G, W- z( j1 @" J#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
0 V! X4 L* p8 K( C- x#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
2 ]9 R0 B5 o5 f1 G* ^% b8 |#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* b" Z/ E9 v: o4 g; v* c
6 O; l/ | q& K+ `/ r0 D; ^/* assign the tl som board LED-GPIOs*/
" Z9 U X# \$ @/ Ostatic const short da850_evm_tl_user_led_pins[] = {3 Y" L) y' {: G4 P
/* These pins are definition at <mach/mux.h> file */
6 Y3 J! \3 c0 c5 p6 K DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 G7 w5 b1 i! Z# |# @" t+ m -1
; h* L$ g$ m1 I; ^4 l};
* d7 S' o8 S+ E& Z% e- s/ S7 Q5 | R
static struct gpio_led da850_evm_tl_leds[] = {
( x. F8 O+ }! z7 u3 \3 | { A5 {# y- I/ f0 l4 v7 d, M9 x9 ~
.active_low = 0,
9 r/ R$ Z# t2 Z; }) U .gpio = DA850_USER_LED0,
' s( ^2 G: G6 o' d .name = "user_led0",8 W( w7 N' j0 F5 Z
.default_trigger = "default-on",% n& W. b: o. ]( Q/ X" q
},! N# [1 b; z$ F
{( s1 S8 f: \$ Q5 i4 H0 x- p4 R: a8 ~
.active_low = 0,
0 C6 G- [6 a1 A. t3 { .gpio = DA850_USER_LED1, I: m6 _$ R- S1 n4 N# d8 l
.name = "user_led1",, f- ]2 }" t) @7 M" k& C& j+ {5 y
.default_trigger = "default-on",
. |0 W& o9 W8 Z9 Q, c& X },4 R/ V+ p( N0 y& K; j1 N" T! ]
{
# j) D7 @ _) P8 v .active_low = 0,, f8 b( J" a% O- i, t8 J+ [0 j: J
.gpio = DA850_USER_LED2," ?1 d$ a( l) a4 y+ Z
.name = "user_led2",
( }8 T2 k+ ^8 f1 @* d .default_trigger = "default-on",
. k1 {) v4 D* b) m4 | },0 D1 @4 a1 r# w4 b. Q2 i
{' [$ _* e; O. h! p
.active_low = 0,: Q$ X, x; \ D- Y0 g5 C- U& z# f
.gpio = DA850_USER_LED3,0 ]) ^0 P7 O C
.name = "user_led3",
: [( n% Z% H8 a) z8 { .default_trigger = "default-on",
, V: R0 o) e) x" q8 D' ] },# a; n. m/ n+ _* J2 }& [
};. O9 g0 \2 r2 }: C
) p; O: i4 {9 ~8 L! ~8 j9 W
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {9 @$ i5 p2 y) |5 L( m9 g4 Y; M9 v
.leds = da850_evm_tl_leds,7 d( W! g7 g) G9 O8 S
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),( O- C0 }5 W9 ? U9 A& p
};( Y2 _4 n3 c2 [8 X& t- C
! q0 M7 I, G) pstatic void led_dev_release(struct device *dev)* L% Z0 \' F# }7 j) \+ b# [. ^
{
% R5 R: w: g$ Y& {* r};; @$ j7 _# r- N; e4 E7 z! {4 S
$ o8 B- P' i' V; j( @8 j7 sstatic struct platform_device da850_evm_tl_leds_device = {
8 D/ l* o" }0 q/ `" J7 I( p .name = "leds-gpio",
z: H6 ~( X! D- D .id = 1,0 B. j2 T+ t9 A* p! M/ |
.dev = {
% `& u" W% ?$ v' C. s9 w, ` .platform_data = &da850_evm_tl_leds_pdata,' W; t# Y# n+ r' N) ^/ s4 T
.release = led_dev_release,
8 p2 b+ i; d* l. I/ N }9 w8 _4 j6 d/ c
};
% y4 W m. c5 }/ h& q U: I3 O& d1 a7 ?- z9 u
static int __init led_platform_init(void)) ~4 c$ X( ~& M) Q
{& j. a( k N# R5 U0 A2 X* w% ~
int ret;) j0 b' s3 w: r9 A4 k+ e
#if 0, r2 b2 f. y7 K( J7 f' [* i9 p
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);' [& M9 a' Z; t. V
if (ret)
9 P2 H# l9 p" a& Q8 I( C A1 O pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ D" k- b& [; }9 u& p+ X/ k& } "%d\n", ret);
0 P: S! I* o8 R6 [) M. G% {' j#endif
4 z% U/ V! A* z8 j, T" k ret = platform_device_register(&da850_evm_tl_leds_device);
6 D, E' I: t" |" {" c if (ret)
; x9 h4 S3 e" v- N" g# d1 z6 b pr_warning("Could not register som GPIO expander LEDS");
2 g% ^$ A: j" j; E" Y else
1 e( R$ b- f3 d& d8 ~, | printk(KERN_INFO "LED register sucessful!\n");$ R: O7 T5 X& u% u |0 [, M
# A9 Q7 i _7 ~& O' F
return ret;
' z) I- `5 D. h0 S}
, w q7 O# w0 w9 S. V, O8 g3 }9 \
static void __exit led_platform_exit(void)
, V( D6 M3 D" B6 q{
7 n3 }( o5 D: C: C5 M) a* S# Y platform_device_unregister(&da850_evm_tl_leds_device);
) T: t% a( J5 F$ Y' p
9 C/ T, f [6 ?' Q3 j printk(KERN_INFO "LED unregister!\n");0 T; a" a0 P9 ?$ K! ~
}
8 S% D/ @7 m. i4 \" a' X' c+ r" |: i
module_init(led_platform_init);
2 M x4 B7 M; Xmodule_exit(led_platform_exit);! X' y* b+ \6 B
. C; d+ Y2 \3 n; ~, j! c X( QMODULE_DESCRIPTION("Led platform driver");8 P2 @1 K. w) L/ U
MODULE_AUTHOR("Tronlong");9 ?. V; q, j! n9 o3 g
MODULE_LICENSE("GPL");
0 K0 a6 ~% Q, B- e( d
8 |$ }/ t$ b1 E4 H; n. B, K% { |
|