|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 K$ Q% l) T1 A4 j3 H* G* R4 ]#include <linux/init.h>
. Z7 ^6 ?' K; G1 G# ? [$ G/ L#include <linux/module.h>
I3 b9 b5 u7 z$ O( H+ ^#include <linux/kernel.h>1 A# U: j/ `) E1 l4 ]3 [ g
#include <linux/types.h>
9 x, ^, [8 [+ S# {5 i#include <linux/gpio.h>
% D5 E5 h) }' z! a/ i9 G#include <linux/leds.h>
: f( u$ t' A1 K' A#include <linux/platform_device.h>% N$ i# e# g6 o. a4 g2 v
" }1 P& n, T6 l, r' ~1 }
#include <asm/mach-types.h>
' c6 {+ Q, c8 U% B0 e#include <asm/mach/arch.h>
! i" z9 Y& g: O4 G8 O! f#include <mach/da8xx.h>$ D- z' r/ \. K% r# a
#include <mach/mux.h>9 _4 C; r2 @7 w- n9 `
# l3 G" M, q, M1 ~#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
+ c' a9 p5 J9 D9 s3 x% O. z3 L#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), [( u' y7 |/ e( p5 T; Q9 q8 K) {
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
# w. u7 k4 C0 Q/ v. C$ k; V6 W) Y& R#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)# m, ]) H5 D) T9 J% l- U5 I8 e
: M, K7 y( n2 c3 `8 U. W/* assign the tl som board LED-GPIOs*/5 i* O0 i& E* R
static const short da850_evm_tl_user_led_pins[] = {! v0 I* p) {9 ~' ^
/* These pins are definition at <mach/mux.h> file */
- g7 P5 T5 V6 E5 ] DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,$ x1 X' Q+ r$ G8 d
-1' u" W- [, ~/ l9 R. R7 s
};' {6 O! m! I! ^4 y4 u7 E0 r& l
8 Z1 d3 h+ a T6 B* X8 \7 a
static struct gpio_led da850_evm_tl_leds[] = {
9 H4 ^! s) R6 C; E {# Q! g, D0 t c- `1 l: k0 g
.active_low = 0,' I! Z7 T1 I; S
.gpio = DA850_USER_LED0,8 W; _& d4 D% ?5 x( F7 B, ]
.name = "user_led0",# Q$ `# d9 k4 L# K; r% S5 D3 s
.default_trigger = "default-on",
. \; a8 |0 j" k' l, u# t4 u },0 t% s& d! U9 p% q! g7 \, }3 ^ M
{& }9 ]2 w7 ^7 E0 p7 y
.active_low = 0,* Z' F, ?$ q+ Q5 [' L J
.gpio = DA850_USER_LED1,
* @" @9 X2 b7 ?1 ] .name = "user_led1",5 z* U; `# h1 c! v2 ?" X, P
.default_trigger = "default-on",0 g7 d/ F# G. ^8 m5 O: V
},
. q1 x& h( @0 I {7 i" X; ~% L4 Y
.active_low = 0,
- w; o/ O8 j2 {; @9 ` Z .gpio = DA850_USER_LED2,7 y X, }5 O3 p6 r
.name = "user_led2",
$ A% N3 t" z. a- s .default_trigger = "default-on",/ {5 ]4 x; }4 h4 m$ K9 E" X, x! A
},/ i# V1 A1 _" N+ M9 G
{
/ H& f3 r2 \2 ~/ ]' f9 D .active_low = 0,% L9 ?# B' B8 v/ v# T! x# I: u
.gpio = DA850_USER_LED3,
, ^7 t4 S2 z4 W3 A. B/ W .name = "user_led3",
. f9 |1 f% A. E6 A1 \ .default_trigger = "default-on",
1 n, \4 h# @2 B7 V },) O. p2 j' O$ Z4 ?0 V9 w5 N8 w
};. z$ J, W" A. A/ a
! a( B3 N. i0 e* W) a
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
7 v0 `, ]! E; y* t. B- P+ B .leds = da850_evm_tl_leds,
& G/ f6 b0 C7 |( W .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
R2 I! T3 e* e7 V' z) [};! F* J0 U3 L8 X' k" N: n5 B6 N
2 e% o+ n2 v: n3 e: }' ]7 r& [static void led_dev_release(struct device *dev)
! n- n- W! V; f; i1 |# z! T{& x" R) w/ u c9 U4 v
};
( m) }$ D. B# Q) O. E4 j( O/ F6 H2 I% ^% B* F7 W, z- `
static struct platform_device da850_evm_tl_leds_device = {7 a; \3 k" L( S5 ~6 _7 x2 A
.name = "leds-gpio",- I8 {, M6 p$ d. J! m
.id = 1,: A9 I5 Y- B/ F% j6 H) G
.dev = {
" `/ v% b. M6 a4 ]4 k8 N .platform_data = &da850_evm_tl_leds_pdata,
4 _8 B# w6 [' i; w& E& V .release = led_dev_release,/ l/ O) f s3 _. X6 q& N
}) ~9 w! a, u2 O& ^& N
};
7 o/ p: S6 g5 d1 J: j8 {8 B" Z* L# p% r
static int __init led_platform_init(void)# D9 {! U1 l; G+ J
{1 p$ {8 o" G% |. f3 y6 P
int ret; r. h% y9 z3 N! b& k3 H' X
#if 0
" G! J( n; Y1 s: i& V% _ ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);- Y) n% c, x2 _" v
if (ret)/ J, s/ H' l# b3 ?4 i
pr_warning("da850_evm_tl_leds_init : User LED mux failed :") `4 U& E. f8 `5 g K4 k
"%d\n", ret);" W t) M7 \% W
#endif v j) L: d0 P( Q# e* f
ret = platform_device_register(&da850_evm_tl_leds_device);
- A& D, d4 }* i if (ret)4 i: c M4 O, J* B' D8 e1 P
pr_warning("Could not register som GPIO expander LEDS");; b @# H; U' i8 F4 s; }
else; j8 k9 K% e7 D% a" G
printk(KERN_INFO "LED register sucessful!\n");; Y; B# Z: q, A; i& c
, I5 `; b/ w' _ ~' m return ret;
l' J5 G+ R7 m5 C} s/ ?: V) |, t/ p# r
( F6 ?5 N( V7 A3 v# u5 x t
static void __exit led_platform_exit(void)
8 t- u, {- _9 h{
; W# e9 H6 y* D0 {) ~" X platform_device_unregister(&da850_evm_tl_leds_device);3 |2 J7 Q. z5 F# V4 ~1 K! I
2 E0 I8 t* o; [& ?! q
printk(KERN_INFO "LED unregister!\n");
. h% Z8 I' B* S S}
^* y: S w0 L" ~3 R7 L* W1 ?. F9 L- Z6 h- a/ H1 C+ x5 I
module_init(led_platform_init);8 r5 G: R5 Y6 J9 [. e E& v7 I( s
module_exit(led_platform_exit);
6 r' v$ G9 A2 T- j, a6 `
5 f) H$ T1 Q* _6 d2 u! DMODULE_DESCRIPTION("Led platform driver");7 q& R* S- W5 M' s! ?
MODULE_AUTHOR("Tronlong");
* m3 B8 z! C6 V/ s) M b3 LMODULE_LICENSE("GPL");, {3 b; G2 f% n a0 }8 U- `0 K" [
8 P" d( E+ R( |$ Z3 r" ~ |
|