|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
6 w& L: i0 e. \#include <linux/init.h>
6 ^$ M# Q& x' ?#include <linux/module.h>
( I3 t6 X$ E6 j8 ]8 q; h" @) c#include <linux/kernel.h>
$ J! W7 c. U1 V, e6 {3 O' X S+ u#include <linux/types.h>+ ]3 l2 l$ m. l; \
#include <linux/gpio.h>
/ A& J" h' l7 L. Z/ I, l#include <linux/leds.h>( [5 C2 Q. ~( X. l# X
#include <linux/platform_device.h>
( L# |1 D# Z- R; i4 M& L# r
, p0 W) Q. k- t7 j#include <asm/mach-types.h>3 J5 e& Y; p' z+ ]& R5 S& I9 @
#include <asm/mach/arch.h>
! I, ~; D: V) i: \0 T6 ^#include <mach/da8xx.h># A2 H- `5 L, ?; X
#include <mach/mux.h>
0 f. ~ R/ j) k) S' g: M$ Q/ g; w' H% f
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)( K7 K9 U; ] v1 O4 y
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! J) L/ N' ~& O
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# x J: h, v" k# v& K7 s#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)9 T( A4 f/ C. ]
; C. c! F) @: G* t6 V
/* assign the tl som board LED-GPIOs*/' i7 [2 g* G* l
static const short da850_evm_tl_user_led_pins[] = {3 x1 I" @# ?4 o4 `
/* These pins are definition at <mach/mux.h> file */
2 ~* H2 T) c3 r0 @$ b4 W DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,, `( `) M2 m1 v5 V
-1, Y0 E5 ~/ G y2 j
};$ Y+ @5 Z5 b5 {. v' W% n w0 `& s# [- G
5 @5 k2 j% N9 ^3 G7 r
static struct gpio_led da850_evm_tl_leds[] = {- B3 Z8 d% |! D# w/ {8 S
{2 v& a- l2 c& ]6 h
.active_low = 0,( W/ E+ r* G0 }7 }* q* |
.gpio = DA850_USER_LED0,( ~8 S* V0 v2 {1 }, ^1 h9 G+ c; X5 ^
.name = "user_led0",0 {$ z2 k1 a+ k0 O( k# m0 e3 j8 u
.default_trigger = "default-on",
3 P5 G8 g7 p0 B& N5 Z1 [" Q: R },
1 ]% E9 R- ~ U% I; o2 r5 F {8 M8 Z' T6 i0 e# C* R* u
.active_low = 0,
0 R C2 F# W1 E0 f1 Y6 P) J3 ?$ d* b .gpio = DA850_USER_LED1,
! H' f( C% m4 a4 H/ F .name = "user_led1",
& m; ~5 ~+ i( A& `8 q3 P( V .default_trigger = "default-on",1 Z1 d" B5 w4 N2 R
},
, t5 `8 L, o, A7 Q" }9 c { {! H5 Y8 s) I* R. T4 `- n( u
.active_low = 0,
8 m$ x- [1 e) A+ R- s: D% {, ? .gpio = DA850_USER_LED2,% @8 ?# L1 ^7 i
.name = "user_led2",! H( H7 T+ A+ b8 F( e3 G8 D: }, N7 ]
.default_trigger = "default-on",
7 g' Y! e" E; M3 m3 K$ B/ M/ V },4 q* p' Y' v6 \: v
{% t5 m( Q0 d9 K1 H
.active_low = 0,% y: O! A5 N& t
.gpio = DA850_USER_LED3,4 \- N5 D# E$ r* P; l I: t9 H
.name = "user_led3"," V3 c4 [- Z7 k3 R! G
.default_trigger = "default-on",# k) a7 ~; |$ Y, z5 }
},
# p) ^* X4 u9 \" a, B0 U8 T1 p' u};* p" u0 K& f8 s1 d3 J, V; P
5 q# ]4 E0 _8 s, Q$ i- V" {
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {2 l: u7 y/ y m/ M1 C
.leds = da850_evm_tl_leds,, |7 H: k* l2 a0 T+ n3 f
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
6 |( d0 A: p, r* t};! ~! R5 x' R: f, a7 p
8 |- _% R, K1 g" ?( H4 sstatic void led_dev_release(struct device *dev)
7 z3 {) e2 t; ]1 b) `{
- A3 {' \, u& X9 E; |' T0 ~- y9 }; ]2 t* V};+ z( c: e/ Q( M$ r5 v! O. q
! s- Y& S M/ y; C/ S! A! j9 ustatic struct platform_device da850_evm_tl_leds_device = {
8 P3 } R) d' Y( L ]$ q* b# ~ .name = "leds-gpio",
2 x# L) \; j9 P/ k q .id = 1,. [1 V" _ }" H# D+ ]4 o
.dev = {+ u$ r9 I# l- S
.platform_data = &da850_evm_tl_leds_pdata,
$ o2 F1 G8 r: y2 Q6 Y) R .release = led_dev_release,
- Q# X' m5 t/ m/ V, z }
/ E9 c$ Z/ r L/ G2 F3 c! y};
) X$ t. I, ~% o4 `5 @* b* v' B- {9 N3 K1 U, E- P$ e
static int __init led_platform_init(void)
) T1 B* b! k, R{
- @8 T4 i% }& s9 r) `1 q int ret;
8 K- C( n# s6 E3 H% U( L g#if 0% P" W7 x7 l* O. d% B
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
4 A% s+ F+ u4 h if (ret)
8 b2 Y2 K* s0 N( \, r { pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; Y# I# D7 t! t- a "%d\n", ret);" V6 M6 Z m( L8 l7 B, J
#endif8 M0 a- ^$ U( N! o5 g2 P. `1 {
ret = platform_device_register(&da850_evm_tl_leds_device);) j4 ?7 @. N" T
if (ret). }! u' R+ z$ o" ]" p3 x$ v% G
pr_warning("Could not register som GPIO expander LEDS");
B: W. T- K$ b c else
# t% W; p5 R4 H1 E printk(KERN_INFO "LED register sucessful!\n");; u0 m( h9 L4 P0 X* P/ `# I
6 u0 ?, l# o" e& h" H
return ret;9 G* f, f6 n" _' l, S) K
}9 |5 p) M3 W" v) Z* m4 S0 D q8 ^8 p: r
- p6 Y/ F9 [" t8 O% C
static void __exit led_platform_exit(void)7 C) Y( m" F1 T# W- k
{
, k2 P+ N. M0 u: ] platform_device_unregister(&da850_evm_tl_leds_device); s8 I% n+ h7 D; F
& j+ }$ f+ [! T: Z. p$ B printk(KERN_INFO "LED unregister!\n");, n# M7 R. v. u% q( \5 a
}
+ Q5 a3 v- B {2 \0 m& f- }% I+ n2 r6 r
module_init(led_platform_init);5 O: O6 z/ l. T3 I
module_exit(led_platform_exit);
+ D7 ^, @( P# B( ~
- i9 b9 Z5 h% H. I, [$ K& cMODULE_DESCRIPTION("Led platform driver");
9 j, M* L' Z( s: Z7 `MODULE_AUTHOR("Tronlong");
5 Q/ {, g2 V1 u1 O$ MMODULE_LICENSE("GPL");4 S: z+ H. w' h2 q& I
- |5 k$ Z8 B* J p$ M8 J& C |
|