|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# m5 l1 K! l( G z8 A# s& U
#include <linux/init.h>0 N) q' J+ O6 Z( ~% e$ H
#include <linux/module.h>
" h" O; b/ p+ r, q- E) Y#include <linux/kernel.h>
. X6 ~" A) l+ n1 P- a#include <linux/types.h>
% ?# }0 j ]/ w8 c' L! K0 N/ B#include <linux/gpio.h>+ h* D# S/ v/ P% h/ M
#include <linux/leds.h>9 q/ M8 R+ j4 W* K" V# y( ~
#include <linux/platform_device.h>' o' r/ r; k, l E4 m7 z2 m
6 J0 f; y) l9 A* t
#include <asm/mach-types.h>, Z! [5 y) v. i. [" a- }; d
#include <asm/mach/arch.h>
! Z; `$ ^) Y. z6 ~/ C5 V0 }#include <mach/da8xx.h>
: h* d* d7 v8 F5 I* s! b# \#include <mach/mux.h>6 ^ O) b5 Q: m" t; u5 w5 ~
- M* z3 h7 V H8 ?/ p7 a; v
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)! | V; ?$ c+ }
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)1 t2 V3 g. Z8 B. i
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1) N" X1 E5 S: Y0 T! M* M7 E( W
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)2 Q6 s8 R6 I5 b& Z) H; f, L% G
`2 t$ \; j' Z$ B5 P/* assign the tl som board LED-GPIOs*/% s2 Y( U e, q8 I/ h) r' M* O3 Z
static const short da850_evm_tl_user_led_pins[] = {
1 f# @- d9 b! x1 v, o /* These pins are definition at <mach/mux.h> file */; ?8 e3 ^; P1 \" K6 B j3 C
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,& J" H+ n Y K& K5 v
-1* t [4 L9 W# V" k
}; C8 o( M( u( H
9 r0 H3 S: t3 S' g
static struct gpio_led da850_evm_tl_leds[] = {
4 x, _$ \ b( T9 p# ]4 g; x {
4 O. y3 u+ P6 l: l0 q/ v) C .active_low = 0,
- b- H/ B! B6 Y .gpio = DA850_USER_LED0,
9 Q* V; _6 f9 M- r, n .name = "user_led0",! a0 d' a2 V, T$ n7 c* {( p! F6 l1 b
.default_trigger = "default-on",
# i( P, ^0 [; v8 e },
3 \9 m2 t9 A9 G# {/ Q( V {
/ B( N2 M: d0 ?; l8 f .active_low = 0,5 I; j4 W0 o) a
.gpio = DA850_USER_LED1,5 ~: {( w$ w. W, p+ U; w. d
.name = "user_led1",2 }6 K0 Z* r" P% L0 @ I
.default_trigger = "default-on",
* k( K9 L' s0 r: J3 E' O9 m. z },
" ^' B) r! g, j {* n! ]5 _- M: B- X Z) T- r/ S
.active_low = 0,
- v6 m9 b" w* Q7 Y) N7 i .gpio = DA850_USER_LED2,
$ z* A2 |6 B+ n .name = "user_led2",7 A; q: ? M0 \/ }" g! h$ \$ B4 y
.default_trigger = "default-on",
# \# K$ J3 v& N4 J2 I },
! x0 j+ g$ o) P+ o% `/ G {
( t9 `$ z; Y$ ~9 U5 z) B2 ]2 z6 N .active_low = 0,: e) V; c. Z6 C* [
.gpio = DA850_USER_LED3,
. I# S% C, W/ h .name = "user_led3",
. N9 W' @0 F' a: Z .default_trigger = "default-on",
- D8 p3 o" p1 w _ },+ F W1 K) W3 k! _* D; V/ s9 m
};
- }/ P% w. ^2 O6 m$ p& P, B5 @7 G; U" r( c' `" S4 q' Y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
9 H- r A) v' l3 Y .leds = da850_evm_tl_leds,. e1 u* e9 o/ y @
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),: E, u) Q# z( I; E
};
; o3 N! q9 Y% S1 Y9 m2 b9 a+ k; _( J' z; v
static void led_dev_release(struct device *dev)- U3 P1 N# \% A, n+ C1 ]
{; b- N% }( _9 O, S8 H
};
& { D# q. c6 A7 ?6 ^, N7 M! {: J& J) ?2 L7 s( S
static struct platform_device da850_evm_tl_leds_device = {) o: X q3 }1 r/ q" j
.name = "leds-gpio",
, |/ O$ ]7 h9 ?! ` .id = 1,( v5 W0 r3 j& t+ b6 ]
.dev = {% P# v2 |8 D% J9 U9 N
.platform_data = &da850_evm_tl_leds_pdata, N# m' S. w# C; ]+ n
.release = led_dev_release,
0 I; L; i4 C. N* O }
+ o2 F1 s0 ?" R3 u" v};2 b- T+ G# B1 L5 @
* O/ z: Z" I( A) W) }
static int __init led_platform_init(void)
' ]' T, s% L. U; W8 U{' v Z- d5 v Z3 e7 h' @6 G- y8 [0 `
int ret;
$ f& o2 m6 m% F! a! _3 Q1 Y4 a#if 0
" W( v3 R: {6 e% N" H8 O ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
! U1 U& J5 |8 p5 G if (ret)
5 T3 z h! N" r; j& A pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% N; j9 e Z) S+ ]9 k
"%d\n", ret);5 P# q r) E* J
#endif
) q* ^7 l: V$ a w$ b2 ^6 ^" ?/ R ret = platform_device_register(&da850_evm_tl_leds_device); B& T' W. I" h& y
if (ret)
) ?8 Y1 V& X; @5 Y0 @4 {1 y pr_warning("Could not register som GPIO expander LEDS");6 b) I$ U6 {$ N
else
' r1 E* U8 \ o printk(KERN_INFO "LED register sucessful!\n");
& ^$ C- O. \3 n" m4 Y2 x4 ]% B$ r6 b6 d$ u E+ s
return ret;
+ a1 }4 F) W4 R; J$ t! ^}" X8 {; v4 P6 H( ^ M) t# x0 Z
3 u% z$ l" M5 `( Vstatic void __exit led_platform_exit(void)
9 F' X# A, r: o; Q{3 t- H% ~+ [) k
platform_device_unregister(&da850_evm_tl_leds_device);4 p' x6 F2 e0 c9 | T( L# B
/ l3 z: U9 ^1 |1 {! o/ o, t
printk(KERN_INFO "LED unregister!\n");2 r4 v, G" t0 [/ P( T4 v5 `) h
}
# C1 _- ?7 M+ Y' U8 n6 l+ W. z
$ O* p/ n) |, Q8 u& g% R+ p' r: fmodule_init(led_platform_init);! F0 ]- R" z" S w4 H5 d P
module_exit(led_platform_exit);" J- j& U. ? R |' Q4 L
. \- u. |$ W6 Z6 j2 I+ y) M& i+ PMODULE_DESCRIPTION("Led platform driver");$ C8 o" d0 g+ S8 K
MODULE_AUTHOR("Tronlong");& Q$ X, y: ~) ^7 y6 u
MODULE_LICENSE("GPL");5 Q6 a7 u1 z4 B1 P" a3 [, `
5 o* h3 y! L t" t" \: m0 d5 `" n/ A9 } |
|