|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 S3 ]" Q3 h4 C; u
#include <linux/init.h>) q& a+ k6 M! n. j3 c
#include <linux/module.h>
; [5 l) w( {; e) d" b#include <linux/kernel.h>
7 W% N& [( L3 f4 y" t3 ~2 H#include <linux/types.h>
' c6 A5 y9 M c, V4 _#include <linux/gpio.h>
1 a* a* j1 e0 d" I% s#include <linux/leds.h>9 _! v+ l) F7 h8 ]0 d6 d
#include <linux/platform_device.h>
9 [) s; V3 J3 {; }( w$ Y( ~' w
O# k& a* N, e; G#include <asm/mach-types.h>* U) k3 z& M! J2 j- k5 k
#include <asm/mach/arch.h>
- Z1 v0 p5 E1 i; k$ D( @& q' U$ m$ P5 z#include <mach/da8xx.h>
( K5 P; S; s$ a$ I; ?#include <mach/mux.h>! H! {- s8 C! ~
; Z) @! k0 T9 W9 t
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% L/ f' i/ C0 _6 q0 C% T5 R8 q: a
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
( F* p; r3 V1 \' ^! Y#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)+ N, q' S2 t: R% X) H' k. X. ?
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
& X8 f* M% |. c8 ]* J' A7 l, ^- X9 C3 X' T
/* assign the tl som board LED-GPIOs*/4 b4 f) E; A: f* U
static const short da850_evm_tl_user_led_pins[] = {
8 D3 r* w, S5 h1 ]) j& G /* These pins are definition at <mach/mux.h> file */
* z* Z! c# \" a2 r DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
+ O, u7 m+ ^" E; T# t -12 t' }" X- C- Y3 `9 Z- l9 F
};
: O; p3 {+ ]1 N! y5 P2 e* e# T3 ?5 v) k$ [
static struct gpio_led da850_evm_tl_leds[] = {
6 x8 s" j- x, k1 x {
- G9 ~- d k' ^4 q+ R( F .active_low = 0,
: [ Z; ?. c( i! X$ |, X( d .gpio = DA850_USER_LED0,3 G, r# @8 _6 h. I" r' Y
.name = "user_led0",# U% {) y7 e6 g1 K% O0 I7 |
.default_trigger = "default-on",( R* L' F6 n+ X5 l+ z% [6 i/ A9 f
},, X4 i8 p. g, a4 z
{) Y8 l, d- ]4 R% z6 E* X9 c3 G
.active_low = 0,
/ d( I& c$ e! b .gpio = DA850_USER_LED1,
- e/ O( I2 f4 V G .name = "user_led1",! n2 ?( ?7 L; w$ V/ M
.default_trigger = "default-on",
8 Q0 Z) Z% \+ e0 c: ]/ c7 A2 ^3 f% r },
- H2 f5 W/ l- h% t4 U {
$ U" r. t8 S$ E1 ^" N3 m) p. b .active_low = 0,
9 E2 i3 G% ?. c6 u& o5 ] A .gpio = DA850_USER_LED2,
9 t3 ` \0 N9 j: b .name = "user_led2",3 f* L: u$ B( X
.default_trigger = "default-on",
. ?/ j) U2 E4 r8 i8 X },
3 U0 T2 e& ]! U9 [. u {, b" P; S, d; P( L; j! n# I+ p
.active_low = 0,* k0 M9 l) S6 c4 E, ?: U$ B
.gpio = DA850_USER_LED3,0 X5 Q- q/ D y9 N+ p! H
.name = "user_led3",
- ^+ S0 P7 K" ~$ r2 B .default_trigger = "default-on",& U. Y! ^0 o8 [) L& r
},
# Y7 s4 P. o# Q! X9 x};
7 b Q% d0 o. h2 w- j9 d; c
! g4 X6 c8 [$ d$ C, i9 J Zstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {: D& u F. B* Y! h0 y6 ?. G
.leds = da850_evm_tl_leds,
! ~$ j; q, k w/ ~' c. U .num_leds = ARRAY_SIZE(da850_evm_tl_leds)," _. v# ?, H- j
};
3 |3 z' i5 l2 R' n: Z7 Y6 S" {
" O6 }7 }1 m2 Q U3 r, h5 vstatic void led_dev_release(struct device *dev)
* T* Z; E! |2 `( c) c# B- J{3 s0 o. Y9 f( X3 b
};
: ~- |( j& B; E& v5 X6 u
6 L0 x+ Z# Y0 fstatic struct platform_device da850_evm_tl_leds_device = {
# t- G. O8 ~9 K* j! y5 D .name = "leds-gpio", M# u, j- Q3 z4 G8 q* j
.id = 1,/ Z- {8 ~8 }" a- N
.dev = {% p& U5 a+ [( [0 M- ^6 r! n6 h( p' v
.platform_data = &da850_evm_tl_leds_pdata,+ s) J9 N8 V/ Y( t* D/ }
.release = led_dev_release,( q( f6 M6 H- s3 o
}
! ] D* l3 o$ e4 X};
" n3 _0 m$ n1 ^6 @7 V2 J( X& M @$ M2 ?! ^, I
static int __init led_platform_init(void)
) E; y c1 n6 J* A) M{6 H3 X) l! {; \# C! N# f
int ret;! j! g. ^5 A z% W$ H" c
#if 0/ T" _2 \6 @0 ^1 {4 N+ ]: s! o+ Z
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
0 b5 A5 e& T! w, y# r) Y5 \ if (ret). g0 o- \; T6 T- y
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! J0 M8 `9 E" s) i3 `- c
"%d\n", ret);$ }- j V+ K/ X: M% `
#endif
7 N. v/ d$ A' W8 S8 l8 ? ret = platform_device_register(&da850_evm_tl_leds_device);
4 \6 V$ J9 y$ d& K if (ret)( t- x) ~. H; r2 w
pr_warning("Could not register som GPIO expander LEDS");" r$ W4 J: S1 B+ Z- Y8 _( Y5 ~
else
, _7 a' `# A9 ? printk(KERN_INFO "LED register sucessful!\n");( D9 L& g; f% L! O; c* ~4 S
: |* d* B1 d( d5 t( e
return ret;
1 o. e& ~0 ?# L4 y; p& ]4 R4 k% X}
) I9 z/ @& X3 x$ g, I+ i5 w2 j3 }1 W# D0 l
static void __exit led_platform_exit(void)
, E2 T# b3 e9 W2 P& }{
- j# F. l Y7 x) e platform_device_unregister(&da850_evm_tl_leds_device);
: i$ I* U- e/ N9 }4 O' M. J
V4 W* l; |. z( F. F printk(KERN_INFO "LED unregister!\n");
3 E. V/ b) `0 O& [# q: k' Z}
3 t; q6 U; s l( a! T0 A) A( _
) A# Q: L: G4 g6 {module_init(led_platform_init);* j/ S$ A2 }7 ?" T
module_exit(led_platform_exit);
' O) h2 }/ L, G8 S4 i3 ^2 h/ b0 C; `, o" i4 m& ]+ {6 n ^
MODULE_DESCRIPTION("Led platform driver");
$ L) M/ i' @1 q6 t* D8 ^$ K" W$ BMODULE_AUTHOR("Tronlong");' \1 C- N* f, k; M; U. k
MODULE_LICENSE("GPL");; B* D/ c6 w1 k8 ?: e& l. C
2 R. Y9 b. a; G8 j Z |
|