|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
! }; U; j" Z0 _3 |$ _) e" ?- x' l5 j#include <linux/init.h>
1 {. { l3 \ s. H+ n#include <linux/module.h>: u( ]5 s9 P& t4 A0 v3 t
#include <linux/kernel.h>
$ ?; @5 T3 f$ K0 w#include <linux/types.h>
8 J! H5 i% {" ]' b" \7 m#include <linux/gpio.h>& X. p5 o# x, A- ?! E
#include <linux/leds.h>+ ~$ J3 u0 a9 g( F% B! }
#include <linux/platform_device.h>
% z3 f9 S( u- Q I1 |$ q2 w% n6 E2 G `0 q( ^
#include <asm/mach-types.h>9 R& w9 z N, \# J% \' w
#include <asm/mach/arch.h>- K, o# e4 m q
#include <mach/da8xx.h>
5 G0 V) u6 h+ t; ~& Z9 ?#include <mach/mux.h>8 C; e% p/ ~ j# E! a7 I* s& V
+ r# |8 q' F4 E- e
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
9 c5 ~" T8 o. [' y3 p#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
2 O* h) C4 }% o* b1 d. y4 b#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)" Y7 b4 A* v# g) _1 g
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
; t$ y. c' M1 R( L
( q2 |- F# Q( W) p/* assign the tl som board LED-GPIOs*/
2 m3 F6 Z; S7 r5 t- h2 Ostatic const short da850_evm_tl_user_led_pins[] = {2 V, v$ D7 k1 V/ N4 e( N* D
/* These pins are definition at <mach/mux.h> file */7 Y( n2 b! L6 _$ b
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,0 l: }3 R5 b& e
-1
; z7 s7 O& {3 K' V};
{# `( M! M& h$ U" s7 u
$ W# Q& J/ E$ O$ Y7 V8 S4 Ustatic struct gpio_led da850_evm_tl_leds[] = { v5 `2 r9 `, s' u4 {
{
: P/ e# K% R6 L' R6 N: Q .active_low = 0,- N$ t$ L: `( q) Y a" L
.gpio = DA850_USER_LED0,* X# \( n& E8 D2 D- x6 G O) o
.name = "user_led0",
. k9 F- W8 E0 v3 C$ t5 x! v .default_trigger = "default-on",( B4 Q! }% J+ l/ f0 X$ \
},
# k/ y9 H+ ^4 G {
% f6 \9 ?0 t- {$ a! s .active_low = 0,) _3 I/ A( J2 J5 o
.gpio = DA850_USER_LED1,
8 |5 k7 q, c0 ?7 {# l .name = "user_led1",
- X% u0 a& |( O* ~: ?! q .default_trigger = "default-on",9 H- F0 |4 I' K! Z$ }9 W& k
},
3 ?5 E0 u- ?4 K) h) {" C8 l {
' i$ J. Z, o0 p5 z7 \0 s* C .active_low = 0,
' D1 d \6 x& x5 o .gpio = DA850_USER_LED2,
: \( Z( L0 h& t9 R5 T) G9 ~& Z8 a .name = "user_led2",
7 ?5 D: E" _( s6 \' o# y .default_trigger = "default-on",$ g; G0 S# ~( Z" m
},& w9 |7 u" C- p# [
{
1 q: C$ r# Y( d# b .active_low = 0,
7 ~6 e5 e% m% G' k2 |; i+ ~# Y( N .gpio = DA850_USER_LED3,
( N' o# l6 J! q& {; W1 s- {% I .name = "user_led3",
# n, W8 ?) Z. m7 ?* W .default_trigger = "default-on",
. e! Z0 O( L( m1 l- ] },
' {8 u' S7 H% ?# u8 J) |/ b* H};
$ j7 H. K: j o# U7 H- p7 y0 m3 y+ a7 j& H9 `' F1 Q
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {/ c1 j7 m: s; l' A
.leds = da850_evm_tl_leds,
# H' f: `2 j" n .num_leds = ARRAY_SIZE(da850_evm_tl_leds),& @, `" r! W7 p. ~5 t5 X
};" F* E. |4 i4 X) i( s: y
- W" v0 ~/ s" V( ?6 t; s# s, \
static void led_dev_release(struct device *dev)
" K% \" ]# U1 i$ z{+ w& B1 Q3 l% V5 U9 J% V8 W; z6 G: C0 Y
};
" @1 |! v2 {1 H% \- d' E; I
y- S' N! J6 D" S' K3 H6 Z( T& m' bstatic struct platform_device da850_evm_tl_leds_device = {8 b' [. ], c0 T V
.name = "leds-gpio",
7 n1 i' ^7 O4 \; v% ^ .id = 1,
9 }6 B/ ]% ]8 K) {) u .dev = {! r2 D, i% V. b
.platform_data = &da850_evm_tl_leds_pdata,
9 \% Q+ ^, u' Y& j0 X$ n ?# R+ M$ k .release = led_dev_release,+ L' D. I+ O9 c; c% l
}
, f1 m) k l t- ?0 y/ Q0 ]9 _* i};
& `# f; v; E* m& q
% H( }. M( C% d0 M% qstatic int __init led_platform_init(void)
9 f; F/ q6 A, g# M& _4 l3 Z{
. X4 e8 I* B6 [9 F% v! e int ret;( ?3 w* c9 q" U8 ], g7 j+ N/ }) [8 _
#if 0* C$ d1 V! r- d* i: A- ~" R
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);/ S* h- p9 w& q& N
if (ret), u5 v& m- w5 d; ~" e" [
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 \: c R8 u& c, S" H
"%d\n", ret);
! j5 F G& q6 W, t% j( x. z# J#endif6 r2 P0 Q1 f2 W$ s6 Q
ret = platform_device_register(&da850_evm_tl_leds_device);+ B7 K' Y' X5 Q7 f* G5 J
if (ret)
8 h2 |: R w. E9 H6 v4 E pr_warning("Could not register som GPIO expander LEDS");2 F) Q: M& a* L' B! z
else7 }9 X, Z# p$ }8 }$ \* z! u% [% ^
printk(KERN_INFO "LED register sucessful!\n");
) s7 [6 e1 M0 G" I6 Q( U8 T1 U0 P4 u$ ~
return ret;& h- E2 i' X; P5 O/ i) K) q! J/ w+ _
}
* Q+ O3 z" r) @2 Y/ v1 { ]9 G; ]3 C, }" b) z* {' y
static void __exit led_platform_exit(void)
& Q: ^" e3 g; M+ ]{7 V1 W! g3 q$ P& O; L6 z4 b& r
platform_device_unregister(&da850_evm_tl_leds_device);- e9 p2 }* J9 P L5 l% M: S2 ^
3 d6 n4 w0 z; B& K printk(KERN_INFO "LED unregister!\n");
( ~8 m& `8 @0 x$ J& V/ I}4 n: I) K m6 P6 i7 H8 J0 T
0 i2 E, n5 X; Q# g) |/ @
module_init(led_platform_init);: N, A: h- T6 [; K3 s3 R3 q! v- |& P
module_exit(led_platform_exit);
% G, v, o2 R* d
: {# a9 C a# V2 Q1 LMODULE_DESCRIPTION("Led platform driver");7 p7 v1 P8 N" j' b3 y& _5 m
MODULE_AUTHOR("Tronlong");
4 X% Z4 |' D; g' k" J0 q/ h; f1 cMODULE_LICENSE("GPL");
& b) i2 L. Y( T$ q$ R8 { T9 g0 Y' [+ o* P! |
|
|