|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
, z# K9 X K3 W$ j) ^8 G) |#include <linux/init.h>: H2 e- A+ A5 z* D1 s2 R3 G
#include <linux/module.h>
; {9 e) Z6 \0 M4 e- U( _! k" |#include <linux/kernel.h>5 U; }5 P' Y# Q! S8 u5 U$ v
#include <linux/types.h>: [' a: b! `2 c# Q5 }6 o7 e" _4 N
#include <linux/gpio.h>
3 B+ [0 Q1 I7 m/ H) x E# w) s#include <linux/leds.h>; @+ q o: o6 _# ^7 Y
#include <linux/platform_device.h>
- t( l* i( `3 @
# q- r9 ~4 I. y) j#include <asm/mach-types.h>! `' X ^% `/ @
#include <asm/mach/arch.h>
5 ^2 {0 S: j' Z/ |+ k4 f8 G#include <mach/da8xx.h>2 S' k# }3 x3 k5 H& M
#include <mach/mux.h>% G: J. X( ^* v; m$ m( W6 u
9 V% w+ r3 v6 g& e, ]. r9 f% [/ \#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)% L& V6 s9 T2 ^. u
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)5 }/ B9 ?) K9 f! d' [$ x4 w" B
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)1 D* l4 U8 ?% [( e, V- {+ J# V
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 _; |" A5 b+ T9 g9 ~3 h7 m) w
# k6 d) y7 F; n9 l8 w7 n1 u3 Y/* assign the tl som board LED-GPIOs*/( L5 e @3 t! D4 v3 J
static const short da850_evm_tl_user_led_pins[] = {
0 p4 R3 _5 G+ X0 E2 z' X; f /* These pins are definition at <mach/mux.h> file */$ v3 ?9 v% d. d8 z- ~0 h/ U0 g% A
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,0 j8 n6 g# T7 G1 A0 R7 q
-1
e- p! \5 T" x2 H8 Q# [1 s. p};6 V8 Y5 b( O( `- t- X
/ g2 r* T. Q1 C+ L9 k1 G( i; `
static struct gpio_led da850_evm_tl_leds[] = {, Q0 Z6 C" z" ? b- @
{
& g# h9 S& L+ b. R0 X .active_low = 0,. R: \( b4 _" E1 H
.gpio = DA850_USER_LED0,7 \! {, h: p& L
.name = "user_led0",# W2 ~: B2 B3 E. x# e5 I+ c+ E% P9 u
.default_trigger = "default-on",
5 r8 O7 G3 X. ~+ d% ]4 s },/ |0 g7 k! z2 r/ y( b2 y5 `' e7 s
{( d1 t5 S) F$ [, U% `
.active_low = 0,4 x: | ~) _& W# @6 [5 H1 V% w
.gpio = DA850_USER_LED1,
8 _) | J, v" y# X; E! B3 w .name = "user_led1",+ o/ H. W( Y, b2 d$ h* B7 v, ?' G
.default_trigger = "default-on",8 u+ h5 a3 a; j" z( \8 c# L: I& R
},3 W8 h) J; o2 P$ i9 Y L) ]7 b" j
{
4 p: x6 l! e' h .active_low = 0,+ d) ^+ u ~" N$ h7 M
.gpio = DA850_USER_LED2,
0 n* X" n. Y' E* N- R .name = "user_led2",. _$ p2 F7 L6 D; T9 i
.default_trigger = "default-on",
9 y; @8 N( E1 ?& O s2 Q6 M | },
Q0 }7 B; f$ @$ I {+ X" f$ |; ~$ p+ A9 x- j$ x
.active_low = 0,0 A* U) M- f* w7 i) @/ H
.gpio = DA850_USER_LED3,8 n$ D& m# V$ z
.name = "user_led3",
y0 `$ _- Z# M ? .default_trigger = "default-on",# o: p7 X" k% q) R: H$ e3 ]
},: S6 V; B2 I- B0 f9 S7 f
};9 y; y- R8 C) I, O: c" q
B8 m$ }8 B+ W- A3 Fstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 ?9 ~- l0 K' y- N9 Q .leds = da850_evm_tl_leds,& A; m8 g# o" O/ e5 S& C4 ]
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
1 d, p) h) c4 f5 \" F- R};- Y9 u/ @& I, Z- t5 u z
" r* {0 Y4 C6 M- J* f2 {% fstatic void led_dev_release(struct device *dev). U$ a; C: {9 E9 S' b
{: U0 Q2 U3 J3 z5 W e! t8 K
};
! e% U' N, q* h2 ~: P' |
, u0 x9 w0 [7 R4 `+ x4 ]static struct platform_device da850_evm_tl_leds_device = {
( n3 d/ V4 E& o5 m3 u5 \ .name = "leds-gpio",
0 s- G4 x" x- U0 K0 ^1 t- W- J .id = 1,* t$ u# R' Y5 S& T5 }
.dev = {
. Q8 D; R( a) R" Y. r .platform_data = &da850_evm_tl_leds_pdata,' J( ?# ]7 |! J6 [+ H( C
.release = led_dev_release,, {# }7 S, R1 t$ A0 S
}
9 h( i8 k& p$ O. q* Q5 T/ i. d/ E4 S};
! j0 a D* j, D2 Q1 K& I& G( m/ ^7 V' O
static int __init led_platform_init(void)* O8 L; o( k. D7 k
{
% G5 D: w! h& d, A+ ^* j; t int ret;
( T& m1 i6 R4 T/ R2 V#if 0. M5 @! m' z! k$ y, X
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
, g( q, H& W+ s if (ret)
- r$ y/ w' O1 y" @ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"# G: ?: F6 A) E8 _
"%d\n", ret);
$ i2 b6 n5 X5 A# L$ C#endif) Q, M) p+ Y8 [, @
ret = platform_device_register(&da850_evm_tl_leds_device);
) o1 z/ G. y, U( z5 }$ H1 C+ N4 O! O if (ret): ~4 S1 b3 u( Y+ L/ D
pr_warning("Could not register som GPIO expander LEDS");
# `! v" Y" y0 w5 }" r) ~ else5 L3 d+ A0 M1 `1 h1 a. A( i% {
printk(KERN_INFO "LED register sucessful!\n");- S/ A; s' Q( Z3 M( z
+ c2 }2 @, M5 k3 x5 u
return ret;, G- i' a$ J. t1 c
}
9 V' u7 a$ N0 h% W& d W& A1 ? d# s, h, v& e4 j5 l6 S
static void __exit led_platform_exit(void)7 }3 W3 b. k4 x" O l1 |9 ?
{
; A4 A4 _7 a9 D3 l) k( n7 |5 P platform_device_unregister(&da850_evm_tl_leds_device);& O( f9 {8 d. `4 T8 I
1 d3 p2 X0 X3 Z' N% ~% f, N: G printk(KERN_INFO "LED unregister!\n");( L. v' P0 M8 ^( ]
}( Z! Y$ U: ]( ?& o) i8 W
0 g: m- F% g3 O+ J7 i. H4 h" nmodule_init(led_platform_init);
; d- U$ G/ W# D+ u( Tmodule_exit(led_platform_exit);2 h$ t% L- D& G: T( F8 X! {
( J5 ~& w; Z! B6 a( {/ ~$ {
MODULE_DESCRIPTION("Led platform driver");9 @5 ?, V; d# w
MODULE_AUTHOR("Tronlong");6 w6 `; B' w) ^
MODULE_LICENSE("GPL");( s! v8 C, ~8 u, C( }9 [. Y
5 |/ ~: T. ^$ h7 I; ^7 E9 H/ e7 Y8 u9 F
|
|