|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 C% |0 H$ f/ S4 u" r' o. ~# s6 N
#include <linux/init.h>
" W- X" ?( O0 i( U6 Y" {#include <linux/module.h>! X* h- y2 O% J2 C; O/ O
#include <linux/kernel.h>
- C: ?/ g. b9 ^0 H#include <linux/types.h>
$ F- C! h3 T+ ^" @#include <linux/gpio.h>$ I, [7 ~, U5 p! B* ~9 w7 I
#include <linux/leds.h>
6 G1 j' _! Y' a: v# w2 F5 x#include <linux/platform_device.h>9 ]/ F b2 [9 q' Y7 d! @
7 [: b( f, f$ M9 V' i3 u5 Y6 X
#include <asm/mach-types.h>
1 @2 M) X2 K, R2 Z#include <asm/mach/arch.h>
2 y# ~8 A5 m( p5 R& j2 {, n#include <mach/da8xx.h> p% I* \$ |8 ?5 y5 |" j
#include <mach/mux.h>
, J# g1 e6 V" G* R. A5 G: y/ ^3 H
9 F. |. Y8 x0 K" a' m/ g/ U P# I; J#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
4 f; j. U/ h8 f: P P#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
0 C3 F% X- E% N( k% {" R$ {#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 q; u% P% k% a" P7 J; o#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- Z' O( ~5 i2 F1 A4 @+ m: ^% r0 v" N, s; d
/* assign the tl som board LED-GPIOs*/, b# J& y9 c1 ?- Q# e
static const short da850_evm_tl_user_led_pins[] = {& Q T" n- W7 m- d0 i% R
/* These pins are definition at <mach/mux.h> file */) O) y$ V- n4 b7 p
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
# i. D2 k& x0 X6 f. q. J2 B -1
# Y! `) Y3 R' I8 q};* R }& F" t2 L3 x/ G: }
, c% v7 M# G+ z% Y& Tstatic struct gpio_led da850_evm_tl_leds[] = {3 | X+ f1 ~6 Z- [% m+ ]# N' D! w/ B
{
# v3 g4 Q: x e( G6 k8 _6 N! [ .active_low = 0,
V5 ]+ _2 W. @, ~9 V' f .gpio = DA850_USER_LED0,; @# H2 d( w: N5 i: `
.name = "user_led0",4 D. \) b' ?4 G1 i
.default_trigger = "default-on",& J; z! L0 ?$ s$ ^5 I9 P
},1 Z4 ?( k5 @& Q- i5 f; |/ ]5 g
{/ [5 k7 S# E+ K
.active_low = 0,- y- I2 n- D5 o/ ~6 u; T( x; ?$ K) P
.gpio = DA850_USER_LED1,
+ h T# W' ]+ n9 V- H2 {3 u .name = "user_led1",
& F' ^- ^* Z1 h. q. D6 }9 v; r .default_trigger = "default-on",9 {5 k% E1 t6 e: r) Z! s) i
},
. y/ ?: j3 B$ u$ a3 b5 r! H {
7 \ [# k# d0 m1 D+ W .active_low = 0,
3 m* E6 d/ l$ x8 o. g6 ] .gpio = DA850_USER_LED2,* o1 F" A) K ]) q: R# a2 g
.name = "user_led2",
0 G) ~) h# b6 A .default_trigger = "default-on",
+ o+ X1 z' V3 k" j) b },/ W4 `8 R7 @3 @
{
# F' g; {4 Z1 a .active_low = 0,
7 B( x! T: I. M+ J* O .gpio = DA850_USER_LED3,
( _5 E0 z+ p7 z4 g .name = "user_led3",
2 Q( ?- z. W6 ^" x .default_trigger = "default-on",6 Q' m; X$ D; I
},
$ y1 B% C6 l/ e4 u3 |0 _2 l' o};
1 W8 G' `* u$ k2 G
3 }* d: I m9 C' Vstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
2 d/ l$ _) T9 T4 U3 k; A, L .leds = da850_evm_tl_leds,9 F A( q3 T9 x( _- ^; }
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# a; {* e. ]9 L* s6 p% o};; c! X/ N2 Y& K% K6 x
@% Z* I; N" R0 Astatic void led_dev_release(struct device *dev)9 p, @& l. R0 R2 |3 U2 t
{
7 V ?" x9 W- o. H. N2 D};' q. n$ m& b' f
$ _# w+ r5 q9 qstatic struct platform_device da850_evm_tl_leds_device = {3 n: q/ B, ^! x7 B2 L/ E; p* P1 G8 f
.name = "leds-gpio",
8 N+ O5 O: x" \! Q. v .id = 1,
9 ^5 i9 K% P7 _ .dev = {9 ^ \" d6 K. E2 t6 l+ M! Y
.platform_data = &da850_evm_tl_leds_pdata,
4 z% {0 }, N, P7 |6 {5 v7 T" D .release = led_dev_release,
- E% q3 `) W4 K7 `- R }
9 D1 I- L, A! B7 t, {1 w8 \};4 o+ f( [: d6 _5 ?. Q T
+ ~9 ]( y# d6 x2 i; R1 F, s8 u
static int __init led_platform_init(void)
6 c. L) i! c; z{
1 m- b+ }' p, } C; R) H int ret;" d8 t+ A5 y6 X" d
#if 0
' p6 y# J/ {8 c, p4 s3 w0 e; | ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 y: q3 t z& g' x/ J+ ?; R9 q! t
if (ret)/ w t, E$ B% D) O( f. u
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"- @% }; T& S; Y0 J! l! V
"%d\n", ret);: d8 e& U5 J# O
#endif* C/ w1 P3 m! _
ret = platform_device_register(&da850_evm_tl_leds_device);0 P& `0 y: P/ l7 x9 }
if (ret)0 I$ w( ]* q+ ]4 L U5 P, R( E
pr_warning("Could not register som GPIO expander LEDS");6 q! B6 z7 L9 w
else
# h% ?8 a! }8 n. A# N9 R6 }+ H printk(KERN_INFO "LED register sucessful!\n");- x+ _5 H4 V: s4 m
" o& C: O* r( o' Z5 x9 K0 W, H6 O( g
return ret;& P& K2 y% E8 [, K0 D/ Q
}% i7 X, V- ~' K; {1 l; W1 T
# v" B; \9 t# Z- g1 r5 O! _* v1 p
static void __exit led_platform_exit(void)( a; b: [' P; R3 P" y r& x7 |% S
{' `1 P6 g5 ~( |" b
platform_device_unregister(&da850_evm_tl_leds_device);: Q; _2 ]! N0 ^5 P- ?+ R
. F4 Y3 k8 ^9 k/ F! Q printk(KERN_INFO "LED unregister!\n");) a2 V$ [! ?, p& {5 H1 V+ q
}
+ `: I B7 _& A8 }4 M6 ]9 D- @7 u+ D& F
module_init(led_platform_init);
8 t" q n) w4 [. C) t$ D) s1 bmodule_exit(led_platform_exit);
, u |3 r8 R9 d( H1 A
w+ `( J0 ?5 |4 |3 n3 _( EMODULE_DESCRIPTION("Led platform driver");! v3 Z) \# W. [) T, C& _% D" e
MODULE_AUTHOR("Tronlong");
7 Q1 i A6 ^) A/ ~MODULE_LICENSE("GPL");
& z/ Q+ G6 N! g* r" v. m0 ^0 G' p, U) P+ j8 q q. f
|
|