|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
2 x% Z, A# N% Z: n#include <linux/init.h>% P0 G' v4 u+ S' j& b( V% A: p! c# b
#include <linux/module.h>8 H6 N0 ~' |: N" Q; B1 t F) n' `
#include <linux/kernel.h>
/ f! y; `' J3 ~, T5 x" r9 U#include <linux/types.h>
h( g" P' Y1 e- L: E#include <linux/gpio.h>
. F6 e, K% Z" u! F! B0 `#include <linux/leds.h>
4 V" K) O" Z# I% w" U; R0 I#include <linux/platform_device.h>
6 |/ I3 B+ @' w6 o8 W& o" K
3 c# b7 {0 s8 ]3 |2 \#include <asm/mach-types.h>) P# P) Z3 m# @. ~& i7 l- r; q
#include <asm/mach/arch.h>1 t1 ^ ]! T! V8 v5 e
#include <mach/da8xx.h>: f1 Y' _4 Y% W3 S
#include <mach/mux.h>
3 V8 c7 T& U* }1 F8 o& h1 G9 k
# F6 s9 Y- |' T T& j/ @#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)' P# W: T) F4 v4 l
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
8 {3 [* t5 L k% b3 A* C#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)3 ^. h# L$ m9 `, V {) v [
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)- k0 M8 p: T) C
2 i4 {* Q4 p: t3 }" ]7 C7 w
/* assign the tl som board LED-GPIOs*/
5 o. u) n- [1 a2 C2 cstatic const short da850_evm_tl_user_led_pins[] = {3 H, V. P' Z' R2 x" F0 U- w
/* These pins are definition at <mach/mux.h> file */
, X/ X" u' e& X/ _9 i, V0 y# O DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
. a- a+ \4 p1 _2 p2 M4 P- M2 Z -1
" u! x$ P; \: W4 ]$ I: O' d};' i8 E5 P& S- }
( P5 V) ^+ _1 ?( M) `1 @8 d5 ystatic struct gpio_led da850_evm_tl_leds[] = {
& u& S) y6 F) j! \7 T& z/ W {
/ z( p. Q/ \7 N) O% s/ _ .active_low = 0,0 u. @5 z0 n8 ^+ G& \- M
.gpio = DA850_USER_LED0,7 s% @ V5 s) w0 F0 Z L
.name = "user_led0",! `% M' L. Y2 d
.default_trigger = "default-on",
4 [5 l6 x d* C2 }, f# }+ F8 {( [, O& d },( D8 Z4 n- E- F; F1 [. e
{' \/ e0 b- T/ B- X* l
.active_low = 0,8 K* s: K, ~( s
.gpio = DA850_USER_LED1,7 y& j; g& d2 E* H2 C; Y7 F
.name = "user_led1",
3 P) q" w' m; x1 I* e$ u3 e .default_trigger = "default-on",4 [5 D- V! i' z. A I5 \ }, h* f
},+ f# ]0 Q1 a" L( y9 q. ?
{0 r# R4 H7 H* c
.active_low = 0,1 M* c U# r% x9 }+ D4 [
.gpio = DA850_USER_LED2, n( Y0 L ~# a. e8 F
.name = "user_led2", I, J* I6 M1 _. l* n" m
.default_trigger = "default-on",3 p% k$ c( H; v$ J+ P0 ^( A. u
},) _% Z. |( c8 L8 ?+ K
{9 ~9 o; a- Y6 ]
.active_low = 0,
6 G( B3 _: K R& b .gpio = DA850_USER_LED3,
% `, [0 b# }( G# A( M9 r& z .name = "user_led3",: S+ V/ @% n6 \- W9 }
.default_trigger = "default-on",
/ e+ S1 O4 h) P3 y+ w7 ]3 @ },9 s, I& o6 M4 W8 Z/ v
};' t$ X3 L* t3 f2 M& R7 R. b" O
4 \ w8 G1 a4 m& C; [; A
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
0 v. f$ _4 u' i .leds = da850_evm_tl_leds,+ O( m, T( R) F
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),0 T7 L" J9 X6 w& ?: p
};
1 s T5 x0 U- c9 ?
' v# B7 _1 k Astatic void led_dev_release(struct device *dev)9 _/ ]. v0 T0 I$ ^
{( I4 n; U' o T# e! u% Q
};/ \% {% s4 E7 V6 U! h$ z9 ]6 m# |
8 R( o* h" m% o
static struct platform_device da850_evm_tl_leds_device = {
9 e( p( x% `# v# G. A4 c$ E2 F# Z .name = "leds-gpio",
' ~. p h* Z) q- h: o; ]' O .id = 1,
& s1 k2 w ]* e .dev = {
8 k5 S/ \$ @ X. a( H) r* k .platform_data = &da850_evm_tl_leds_pdata,
3 b" j* A+ q' Z .release = led_dev_release,
. `5 D& g0 r- G z; V% _, y }
# w# F( w0 P$ ?9 K2 x% g};$ w3 D9 o5 {# R) b
& x2 W" R* V' m! istatic int __init led_platform_init(void). L8 w# c8 \1 c6 b' E% y# d5 Y
{$ @4 V; [6 _/ V6 W2 m" @1 X
int ret;9 m" e" b$ _! l
#if 0- D6 K1 F# a% K. w1 [
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! _& B3 a! X* n( F! f$ Y4 G% X+ a if (ret)
" _( Z4 x* I" Z2 I0 q% h* r' ] pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
+ V4 ~. {4 ~3 M4 \ "%d\n", ret);3 U2 A! s: K( @- C0 m
#endif, r8 S, k& E& p$ S& q* S' j
ret = platform_device_register(&da850_evm_tl_leds_device);: V3 ?! i- ]+ S& `3 `$ Z' `; f
if (ret)
) d$ R# l/ `/ n3 U5 u, | pr_warning("Could not register som GPIO expander LEDS");- H. K( i6 u1 v9 y& { N7 f
else
# r+ R$ M/ M9 I6 P8 G! F printk(KERN_INFO "LED register sucessful!\n");
, H) n+ \3 U, T* h) T( Y4 K
; ]$ v! n7 e, C return ret;- T' H8 Y+ J( C& R) d/ ]. w
}
4 V0 _6 ^' X! s- w$ R: o: W! v' H5 A. ?; A& Q$ O) a
static void __exit led_platform_exit(void)8 s5 p! h/ K3 a% o& `/ v
{; O/ n( `4 P+ q0 P
platform_device_unregister(&da850_evm_tl_leds_device);
% ~3 ?, K. l+ L7 R
& v- ^0 n2 q- T' U6 x9 R printk(KERN_INFO "LED unregister!\n");# n4 Y4 n6 D2 ~/ E' X9 j5 h
}
4 W+ ]0 L _" J2 z" k6 T0 U7 L8 m. \! {8 d- [* w/ J( T2 W
module_init(led_platform_init);
. ]3 W4 C; A5 K- q- A: N f8 \module_exit(led_platform_exit);
/ |) e9 G2 c" \ z l9 d
2 Y" p6 x5 O. H2 M! u1 [# Z7 @7 ]& u4 DMODULE_DESCRIPTION("Led platform driver");
3 D" X; o0 o+ n! [MODULE_AUTHOR("Tronlong");
; T% j* C# H9 S* H2 jMODULE_LICENSE("GPL");
4 ~/ \; T; B4 ?& O& U2 p
0 |# C% p3 n- y& @9 M2 `2 E0 [ |
|