|
|
求大神给下面的程序做注解,请稍详细些,谢谢。3 a, `9 }2 |5 m6 C* Q& T
#include <linux/init.h>8 [5 z$ [2 \) z
#include <linux/module.h>
6 A$ p; e- k' r8 N#include <linux/kernel.h>
/ ~$ D9 |; o7 K. }9 Y4 ?. ]#include <linux/types.h>1 ^" k- m0 z4 A9 W+ q
#include <linux/gpio.h>
/ K, R; v7 F* x7 ^* s: A#include <linux/leds.h>
/ `0 g% i: G2 Z4 \ F4 Z4 T#include <linux/platform_device.h>
- h1 o M7 k# s7 ]4 l+ v, ~+ H- d" `* Z- `6 Y5 e- G; Z0 L; N# }0 {
#include <asm/mach-types.h>
$ M3 t. D: A' _$ D3 z3 E# ^#include <asm/mach/arch.h>- ^; `0 i' w9 U- o
#include <mach/da8xx.h>8 Z, U, C6 [1 }0 _7 L4 e4 u# a
#include <mach/mux.h>
% ^( X- t: s" ~5 M- r, k' J) x3 x& m
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
0 B% U: @& b3 d8 r) l, p#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); N5 K/ e ~( r% r T
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" F) b; d0 Z" F#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 i' j# |& L' G! e
& ], Q: F1 E$ ?/ w4 B( ?/* assign the tl som board LED-GPIOs*/
1 x2 i; B6 x% d1 b# w2 U! Sstatic const short da850_evm_tl_user_led_pins[] = {/ X0 e f" H, q. E3 Y
/* These pins are definition at <mach/mux.h> file */) b' C# a' j4 b- l
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ j* o8 i8 A- a -11 [5 \0 L7 d2 K0 t5 E& j8 p
};
1 ~- D2 K) b) L) { D3 \
0 ^9 Z2 ~, z: ?! e' M$ h p, ^static struct gpio_led da850_evm_tl_leds[] = {1 G2 I H* e2 @* C" v% R! U' V
{; b3 j: y4 T8 f" ~
.active_low = 0,1 Z$ s1 J# K7 J9 q4 s1 _, h
.gpio = DA850_USER_LED0,
; {' {! Z! T0 Z4 R9 h& K& d .name = "user_led0",' Q- ]5 I2 X: \
.default_trigger = "default-on",
4 n0 M* C8 g5 ^ },
, a, y6 d/ N" e6 Q% }4 H {. k4 }' x$ ^/ Y6 S5 v S
.active_low = 0,7 b0 z' o' f3 k! U. o$ |" ]
.gpio = DA850_USER_LED1,1 d& [% N5 o2 K
.name = "user_led1",# D: g6 U8 s3 n. k; y
.default_trigger = "default-on"," B: W5 {' c+ v1 }# N# O9 ?) z
},
0 @1 x* K, I1 {3 L5 f! O {
1 J9 y! _( ]- a' K .active_low = 0,+ i' i1 x; e8 Q) u
.gpio = DA850_USER_LED2,2 j8 _3 j9 o: L2 g
.name = "user_led2",
s$ Z' X. n/ h$ ]0 B3 n. T .default_trigger = "default-on",0 }9 a$ ^' G8 [( I. o& S
}," a" F6 ^/ [: ^ ?
{
; T$ P/ B; V$ S1 O2 \4 }6 r2 p .active_low = 0, V- [( y* q9 J" Y6 K% e
.gpio = DA850_USER_LED3,
3 D/ Q' @1 a$ p5 g$ q .name = "user_led3",7 X4 ]4 F0 `5 D+ f9 G
.default_trigger = "default-on",& P7 x# l. E+ }: B K( R
},/ N+ B& I& f, m* H$ O8 u
};2 I+ D3 u7 E4 U
7 W" m) w( _# y3 Lstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 a# }5 A# _ y; P. K- T7 C C
.leds = da850_evm_tl_leds,- N& Z! }! z2 ~
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
/ @; ^' J9 h, ^" ^};
- s! \* L9 k4 O
5 Q8 v! I4 j; z7 D& mstatic void led_dev_release(struct device *dev)
$ A) j4 N# g& X% r6 q2 e8 Q+ Z{
0 ^! P `2 X/ `9 ?};& [* b- K: e, C/ _' w* a
( n$ J k4 g6 U! A' {+ [0 ystatic struct platform_device da850_evm_tl_leds_device = {
( {" n& y) G8 M6 }& @( A/ K .name = "leds-gpio",
' {, }* ~/ d& z) v .id = 1,
; x9 }& u) F+ S e: `0 f+ e. V .dev = {
: g2 r. Z2 ]7 T" S3 C8 ]7 p .platform_data = &da850_evm_tl_leds_pdata,! f7 }6 ^. a% t2 |, N: g: P! v5 k1 \
.release = led_dev_release,) Y6 b- L) u* B
}8 M4 O0 D5 y# v& i2 A( u
};
6 H$ J7 _- U) Y: X" E& m! ] m9 }; b3 F* e
static int __init led_platform_init(void)
& N m, ^; }% h& J{
N: B$ l7 T; L& p9 v1 Z0 a int ret;
! L% t0 s% p {9 z* T+ F- E2 q0 ]#if 0
7 @# W, }- A) W; \ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
- d% O" I. C5 V7 W if (ret)
# {6 J1 A( i6 z9 l! t6 R pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' F- A7 V1 R# S% y4 Y! ?
"%d\n", ret);
0 e5 b1 l* } j; n: u8 Z+ [#endif5 C% N- G- }; _) ~5 {( L# C- n
ret = platform_device_register(&da850_evm_tl_leds_device);
( p7 T" g# f' n$ a( y if (ret)) z# J" H% ?5 `6 Q& y
pr_warning("Could not register som GPIO expander LEDS");5 e) T' {: [4 V5 q( m/ Q$ X E
else
( G2 u0 ]% V- g. | printk(KERN_INFO "LED register sucessful!\n");: h" Z. ?, s2 Q5 \
% N5 d; M' C9 G9 K' |0 V4 T return ret;9 r, p# e3 u. [8 ^. [- B4 A
}
; B( e! o, l& w% x s5 S$ S' {5 {2 r
static void __exit led_platform_exit(void)- z: p+ a$ S, {
{
' A9 Z0 _0 f/ I% X$ I platform_device_unregister(&da850_evm_tl_leds_device);8 i v2 i; X t0 P. F: s
9 Q* O2 G2 L0 M9 h; D4 A printk(KERN_INFO "LED unregister!\n");; y5 [# P8 |' y/ W4 ?* |
}
: @( ~# O. F1 u6 {! _0 Z U0 _2 _0 V& [% r- @; l' r0 m
module_init(led_platform_init);0 P: N8 w, {- L5 K9 H& q0 Y
module_exit(led_platform_exit);. R: Q5 z6 |( k) K+ F
1 ~" Y' t& R) ?& ~$ ~2 XMODULE_DESCRIPTION("Led platform driver");
( N! A @. H$ X! X2 s1 h4 ?MODULE_AUTHOR("Tronlong");
; S4 g( z2 p( C. }/ D: [; |& mMODULE_LICENSE("GPL");6 L4 O1 V' Q( l5 L3 ] b Z$ r' |* m
5 W: T3 C4 W( h6 k; k/ @ |
|