|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
% f' A3 {4 R4 s+ [5 ^#include <linux/init.h>
" v+ U* B, B/ l( _7 y#include <linux/module.h>
! {. M1 H, ^5 J. d7 @; d* o0 q#include <linux/kernel.h>
V3 `4 e: ]$ Q) v: K#include <linux/types.h>
! O4 V$ y0 \' h. _2 y7 p, M$ f& v& s#include <linux/gpio.h>
% |7 h5 C; T7 j7 c#include <linux/leds.h>$ [8 q3 \2 M: Z+ T* y: u
#include <linux/platform_device.h>
X8 ~: v+ F/ ?$ c/ M
" [# b6 m# ]1 g( r#include <asm/mach-types.h>
: Z0 H4 \) N- X7 Q! ~; [$ [' J#include <asm/mach/arch.h>
( B7 O; \# t) ]# u% c% W6 j( g#include <mach/da8xx.h>
, n* R* w( K' m# W* ]" s5 _8 ~#include <mach/mux.h>
# W9 \: F7 v; i5 x. A8 Q
& t% f7 s" Z9 U; i% f#define DA850_USER_LED0 GPIO_TO_PIN(0, 0), u: P2 ^, k4 a# B% A( z3 y4 m
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)& i, l! C: u% V* p
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. J8 F' R0 ~1 M: k#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 Y4 q* x! P; {# g- V
; B0 \" f+ d8 I+ U% u$ X7 e; P/* assign the tl som board LED-GPIOs*/' |, V' h1 D- J
static const short da850_evm_tl_user_led_pins[] = {
2 j1 q* `5 G6 X! J# Z1 F; m5 ? /* These pins are definition at <mach/mux.h> file */( |! v, h* w. b
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, Y" R# d( l, |! v -1
; S! p4 `! _( f$ R2 U; U};
: Y) Y! h9 I! L
& v( ~$ W0 s, ]8 _2 @static struct gpio_led da850_evm_tl_leds[] = {- O; R: J+ D8 G2 Y5 W v
{9 s: x; f+ O" ~
.active_low = 0,) K) u# Q" y6 z0 U; K2 R
.gpio = DA850_USER_LED0,
' |( n+ P" Z- s7 A/ d _ .name = "user_led0", ^5 m8 d: d8 V; ^. Y5 R4 \# h
.default_trigger = "default-on",
# z% n. C$ Q. o4 O },
" A; J- z+ [5 F2 B5 e" T/ ^ {: F* \) C8 W* a2 y* B
.active_low = 0,1 t+ x7 T) {, X+ t1 a8 S/ A
.gpio = DA850_USER_LED1,
8 q, n1 i! V, ]' L# p .name = "user_led1",
, M) n" T; C: \8 {7 g .default_trigger = "default-on",
; W! t9 o8 I2 u& ?8 S: M },
& h( A( o+ h8 A, {! z* O9 Y0 C8 `8 t {
' x9 B4 Q: R4 f/ T( ?3 @4 w .active_low = 0,. y. S3 B( O9 I6 S" ^3 q# T
.gpio = DA850_USER_LED2,
& h9 x2 U3 r" S( |% R .name = "user_led2",
- r" m4 b" K$ |$ ~5 x* a# N | .default_trigger = "default-on",3 [: O* \. {) r, T
},$ B* g' V) `. ?! w6 Y; A8 v
{9 s, @4 K6 U) S: X/ w
.active_low = 0,
; K0 ~$ X' Z6 Z6 l) E .gpio = DA850_USER_LED3,
7 J. }8 h1 c4 L4 [/ n .name = "user_led3",- h0 L9 ~% l* R' _
.default_trigger = "default-on",
3 l9 i* k. |2 \6 N f },
" C0 Y1 d7 T8 i* N) H};
" }' p/ g0 f* }. l# I9 D: k" W
; ?: D L( S& ]& R3 Z' l; cstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {1 v1 C* I" C+ w
.leds = da850_evm_tl_leds,
' F8 a$ Q1 R6 _ p .num_leds = ARRAY_SIZE(da850_evm_tl_leds),( D) h O& ? |. q
};' ?$ h, o* {. _7 l
7 N3 A H) e3 I C8 x7 c6 o) c) wstatic void led_dev_release(struct device *dev)
7 x. l3 I# x. w* n0 o{
. L, K: g1 [6 T# R};! s. Z" |8 A! a8 }9 {6 L' G
5 b: K, o4 B& x% A; g. i Q
static struct platform_device da850_evm_tl_leds_device = {; [* J1 s) K1 ~2 q7 ~
.name = "leds-gpio",
: Z7 F8 M' w! P5 G( B+ k .id = 1,
# L) t6 K% }. o3 h% I; i; c# A2 S4 p .dev = {: T& U; L$ L% K' w, I+ a0 p% h
.platform_data = &da850_evm_tl_leds_pdata,, h. o6 ]: `& b/ i/ h3 y1 D
.release = led_dev_release,
$ W0 L v+ F& \7 Q% u/ d1 L }3 F E9 G. i9 v7 T) z9 @
};' \* g; H- ]2 U
Q# }: L6 c) E* \/ l- v: `" dstatic int __init led_platform_init(void)
k# W$ v' f$ F; J% W- ]{' |7 m/ p; ?6 ?
int ret; l* m, |7 g: ?% G
#if 0& S% j5 u* c- z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, z+ @% i7 [" {% T# U8 a3 F if (ret)
5 H* O4 Q% A' g4 R, i/ k( i+ A pr_warning("da850_evm_tl_leds_init : User LED mux failed :"/ L, v5 g& n9 ^4 L2 P; d1 }
"%d\n", ret);
! k0 H' O2 V0 Q7 ^$ z6 m* e2 ]' G#endif. E2 W' ?4 T9 z9 u/ V6 N
ret = platform_device_register(&da850_evm_tl_leds_device);
" J5 M! Q- K8 m( s if (ret), p2 C- M$ q) h! Z9 _2 w; M
pr_warning("Could not register som GPIO expander LEDS");
/ ~ F9 e6 h% H( @ else# i6 W4 ]3 n D: O
printk(KERN_INFO "LED register sucessful!\n");' o5 Q: @; o- s8 g2 }
# |- N8 a( s5 w3 N% N! |
return ret;
' u8 I- Q- O& w+ G2 V- E4 m}
& a; d) k. q$ v; j+ p T, u* x
2 d1 [; D) c+ z' k- d* {2 jstatic void __exit led_platform_exit(void): r3 d, @( j( _* z
{( u" }/ o. Y+ M9 f
platform_device_unregister(&da850_evm_tl_leds_device);
# V d: T) z8 }* c9 L$ h
$ k( |: ]* c% X8 k% c printk(KERN_INFO "LED unregister!\n");6 [! I# J/ f' m2 l
}& |- U% S7 P7 S! O
) I& W" b% k# o: }module_init(led_platform_init);6 ~+ ]. d3 d& W6 y
module_exit(led_platform_exit);
& o" i) G% E$ r7 f( M) b; x
+ L4 Y; \, {" p& G7 I$ YMODULE_DESCRIPTION("Led platform driver");
. A$ W( }+ h9 m4 l% mMODULE_AUTHOR("Tronlong");
4 a4 f2 G0 S/ DMODULE_LICENSE("GPL");9 f; Z- {7 ]' N, ^" g* d( P" w
f$ L, h5 H* p |
|