|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
) N/ W' k z0 v- t1 t( _#include <linux/init.h>
6 Z" r% q9 z0 p B#include <linux/module.h>
1 d- U5 b/ a6 Z& f1 Q#include <linux/kernel.h>
; j2 p" X# J) ~ i, m#include <linux/types.h>
; ~+ y& {; z- }" S#include <linux/gpio.h>
& P) y1 p5 G k J' y#include <linux/leds.h>
0 ]& k8 x7 ^: o5 l#include <linux/platform_device.h>! F1 X( |; @6 K, U% f6 w8 A% J) ?
' N$ y# U3 e) [( N#include <asm/mach-types.h>
! k0 v3 ^6 f# ?, n$ o#include <asm/mach/arch.h>& n+ \4 e: U1 j% Z+ T$ l( k7 B
#include <mach/da8xx.h>
" b$ z0 R; _, [* z# D. T! U) y#include <mach/mux.h>
* ^/ o4 Y# W: f- h2 ]) F) V9 z/ P6 `$ v8 K5 b( A$ h
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% o: Z# N) z/ d8 h3 w+ R
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 x8 }+ L/ A1 `, X q; d#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
. k9 S& [6 R& Z#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
5 J _- V# C: u, U" Z' s O1 T+ C
/* assign the tl som board LED-GPIOs*/$ Q H" U* _$ t6 g$ _- X# E! E
static const short da850_evm_tl_user_led_pins[] = {! S+ O; E0 W, n8 k' Q& p N9 ]
/* These pins are definition at <mach/mux.h> file */& g1 F" ?& M* U) D9 `" k
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" O2 U- ~5 p/ q' q -1
# I1 _5 q% Q# D) H4 Z};
4 h* [# H1 \- d/ q* x) z
/ e! K. x) O* H) jstatic struct gpio_led da850_evm_tl_leds[] = {
/ G0 q, D& A. Q* @% }! G {
- ~7 R: }# r: q% v) p6 f .active_low = 0,8 s3 y/ D; d8 ~8 K
.gpio = DA850_USER_LED0,
* F; a2 a v" b7 K .name = "user_led0",- c8 s" u# q& H/ P: E t
.default_trigger = "default-on",8 q! l; P7 D2 a$ ?* J9 R$ S
},+ Z, Q+ h' |. a* R W
{0 I5 u9 _6 I, ~% v4 R7 {
.active_low = 0,
% |9 c) _# E5 ^- |$ a; {2 E( s& O .gpio = DA850_USER_LED1,! s' r: V9 p( R# H2 Q2 Y
.name = "user_led1",
# a, u. X1 m& S# O .default_trigger = "default-on",
) U4 i" _" S0 {7 g6 J },
% X) F3 @* l2 ^3 g" p2 I7 q {0 X) K) c7 t* i! [+ j* Z$ M0 K
.active_low = 0,
6 r* f0 K) I6 C4 W6 `0 m( T .gpio = DA850_USER_LED2,. b0 e3 b6 x% u$ c, C/ h% [2 F
.name = "user_led2",
. ?+ w# n. n& A" Z8 b, W7 p$ ? .default_trigger = "default-on",& H% e. v" m. \' p6 b
},( l( V. i8 i) h# Q) t7 F8 O5 H
{! k* Y/ N. W( Z; Z8 W! a
.active_low = 0,
0 N7 J; U# |; Z# q5 k .gpio = DA850_USER_LED3,
1 `- G) z, t% [1 c. b. T0 D2 d2 I .name = "user_led3",
" o! n9 _! b0 v4 Y) P' z .default_trigger = "default-on",
9 I4 F- \5 Z: e% \$ }, N' y },% v T$ m3 z5 j+ K' Q+ n6 C# f
}; r9 A, l& w% q* I0 D: ~
( V- D* w9 K' R q- m8 T n% Xstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
0 K. {6 [! N3 ]9 b$ ^/ a: Q" ^" T9 D .leds = da850_evm_tl_leds,
( \8 M B: _7 F1 ` e .num_leds = ARRAY_SIZE(da850_evm_tl_leds),( |+ x* {* v# G% m7 c, |
};
: v% d/ V8 R7 ~7 }) E
# i2 Q, n# e# |3 X; ystatic void led_dev_release(struct device *dev)
( ]/ p, F) s* O" P9 ?* \& K5 i+ B{# a T3 \+ Y$ `: _+ D" V
};
. c7 C. v1 U( H! \4 z/ Y
/ Q2 {9 Q8 r+ pstatic struct platform_device da850_evm_tl_leds_device = {' X% { U& b2 [2 j- Q( C- {
.name = "leds-gpio",: p% }, | [- v, x9 V! B
.id = 1,
" |# B8 q9 ^ {3 k' H .dev = {( I" n/ f( I% @3 C% A5 w
.platform_data = &da850_evm_tl_leds_pdata,& Y( r& z. Y" I \- h
.release = led_dev_release,
; I& F# v5 u$ T/ N8 e }) e4 M6 B r" ^
};
* m" d& }' ~+ m. [ A7 l0 N. z
' e' D/ J4 R3 r9 K1 N4 Qstatic int __init led_platform_init(void)
9 T( q6 B4 a. M9 `( d{/ o' y; E# k4 e1 v9 g7 [
int ret;
5 o. o1 T7 J8 G4 c. }# b( w/ j, v#if 0
% g) e" @5 B, t& q3 x, i8 S: { ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 H+ k! w/ G3 l- ~ if (ret) p7 F8 _7 V$ V
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
! O6 G' r0 j( m1 e/ R "%d\n", ret); p% H6 r7 f1 ?) f+ {# b' t
#endif# B9 N/ [2 j* [5 _
ret = platform_device_register(&da850_evm_tl_leds_device);
" [: ?) f3 ]% r4 a if (ret)
5 K7 T" l5 {) K5 m+ e6 ]$ e pr_warning("Could not register som GPIO expander LEDS");) J$ V) Z4 k7 B H: n# u
else
3 n) m9 y2 s- f! l4 `- Q: [6 \ printk(KERN_INFO "LED register sucessful!\n");( ^$ H( @5 x1 z4 K! i
f" e2 B) ?+ K; V: @# E( T return ret;. w8 t, V: V _
}
. F' }3 O, h f e( }' }+ |
/ @9 u! b3 f' C, Q2 Hstatic void __exit led_platform_exit(void)( V0 Q! q; O3 K, i- D4 T
{6 q4 v0 E; M* I7 @. \( a5 s
platform_device_unregister(&da850_evm_tl_leds_device);4 [' `6 i' @2 j5 E4 i& g7 v
( Q0 P/ [+ J4 ]$ a8 c printk(KERN_INFO "LED unregister!\n");% S+ _. C) a) L$ M4 } F
}
, {- q0 j8 U' j4 o' ^
0 Z" h# c- c# |1 L& Wmodule_init(led_platform_init);
! p; B+ w8 N! a7 n5 e8 P3 Ymodule_exit(led_platform_exit);
( P/ B z- `7 K5 Z% m [8 b7 ~9 z8 }4 f4 C, ^" K6 N( J
MODULE_DESCRIPTION("Led platform driver");9 f4 N9 |, l z" ~
MODULE_AUTHOR("Tronlong");1 y; u$ c, H, m8 X+ P
MODULE_LICENSE("GPL");9 a% @1 p9 ]. C4 e
4 ?( x, e1 A% V- R9 p: o |
|