|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 Z- G: U$ S8 {#include <linux/init.h>
0 g& i- q4 ~/ V% h2 ~#include <linux/module.h>. ^9 R! u2 k& d
#include <linux/kernel.h>- z) Y" p3 D L8 y
#include <linux/types.h>
4 I; l" f& x3 f* I+ |#include <linux/gpio.h>) m) a% I# R$ B' K. a# ^5 T! r
#include <linux/leds.h>1 l7 N% u( [. i3 F) g3 j, u* ]1 O
#include <linux/platform_device.h>( |! o+ S, g2 Y" |& R
; k9 t7 H5 g6 a8 n, O& B, d
#include <asm/mach-types.h>. v# x' l$ L& x. j) |. L/ N0 {
#include <asm/mach/arch.h>! h2 Y' X& i0 p- x
#include <mach/da8xx.h>& O2 J& F c; p5 f# _5 F
#include <mach/mux.h># v6 B0 Z, D8 E
/ j( }0 A+ b% `; _% }
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
7 {7 }: b0 X6 t#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)* C# q: u( L9 J5 o
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% q7 w" h+ A n# H# }" w& t#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
0 \5 x+ i+ _/ v3 c& ~$ u8 U2 l( T) M* I
/* assign the tl som board LED-GPIOs*/! J4 N" f( Y0 s1 w
static const short da850_evm_tl_user_led_pins[] = {; o8 K0 q' M( Y0 k! g/ |, L+ z. J2 {
/* These pins are definition at <mach/mux.h> file */
& i8 I1 r8 L6 V DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' t/ u0 q( I- g; n -1
% Z8 v+ j& t) {};& n0 J( b: L" ~
( M& p) ?0 \0 M% D( ^& Zstatic struct gpio_led da850_evm_tl_leds[] = {/ f, O; ]# r9 `5 H
{; p1 z! U! ? j0 s5 S8 T# q
.active_low = 0,
7 p5 U$ S& c2 L) l6 A( c% ` .gpio = DA850_USER_LED0,
1 D ^' U A& L8 C7 v9 \* t% H .name = "user_led0", |7 {" g$ G F0 r
.default_trigger = "default-on",
4 M& `/ ^( s& ? z: g' k },/ T8 q" Z& w( x0 A5 r4 I/ ~
{
0 v' i9 j3 ^, y2 C .active_low = 0,
7 K/ w5 O1 \# E2 _. b% m" J$ [5 t .gpio = DA850_USER_LED1,) \, z) F9 i7 q U: p
.name = "user_led1",/ t: B8 q% x: @8 {7 S
.default_trigger = "default-on",
% B& s3 ?8 r7 z+ z },
/ L" h! ?# I& m g- x( ] {
: D1 y5 u' v9 } .active_low = 0,
: q) n+ I: P; A d8 \/ N; d .gpio = DA850_USER_LED2,
0 a9 f: W0 Q: H( d1 s+ x# U" g( ? .name = "user_led2",1 ?( l/ J A7 ^6 a9 ^* L) O5 G
.default_trigger = "default-on",
/ B9 r& H2 `! t( v7 d& G2 G2 W( k },
L; n$ b. ~6 D& {$ [# K: X5 i {
4 U) s( m% X4 _4 ]# q .active_low = 0,. g% {+ J3 r) I* r. j( {5 }. _
.gpio = DA850_USER_LED3,
6 K0 }( y# Z% I T$ s) u- Q9 i .name = "user_led3",2 Q& _' M# f5 H9 j
.default_trigger = "default-on",7 `! e+ K3 |. |( s
},0 E5 B2 j6 V" }: B* y6 {
};
# m; K/ z: e6 N" }. ], |
( O- N- h: ^6 b7 q G; Dstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {4 u( P, z2 ?/ O9 L; e$ ^3 A# S7 e
.leds = da850_evm_tl_leds,
0 U4 f5 r, q) S+ `8 K' T+ _+ B .num_leds = ARRAY_SIZE(da850_evm_tl_leds),3 R8 i9 W, M6 j) W2 ?8 K ?: A
};
# m2 Q! x% f/ t/ @/ O: _! V2 d2 Q9 o4 n* g% D- x9 X& P5 ]$ V# J
static void led_dev_release(struct device *dev)
" X# z- w5 J3 \+ a{
% N6 d- B% z) } K/ Q/ g};
" n9 ^- Y: d% ]" | u1 ~- o! e. V. }+ O+ ^
static struct platform_device da850_evm_tl_leds_device = {8 H) K/ j, ]! Q
.name = "leds-gpio",
: k4 `# s, V, f* z" |( Y .id = 1,
# ~$ }9 A. S. A% c0 j- _9 E6 d .dev = {* |0 [! d; Z8 Q+ F: N+ R& g/ C" Q
.platform_data = &da850_evm_tl_leds_pdata,3 t$ V8 k( i( D( k" `# M: S% m" V
.release = led_dev_release,) i2 T, C8 A* @6 H# C: D
}
" p0 m# Q3 G- f3 G0 r};0 E5 W, T! O; @7 u9 b1 n, s2 }' _, [
+ ^8 l4 u2 a! D6 x l- e! b5 Pstatic int __init led_platform_init(void)
1 M, b! q3 m' M# z3 [0 T9 a{7 n) `& q. S# Q! t D
int ret;
- b) z4 E* W. x6 [6 f" n o#if 01 R) l0 v- P6 ^7 l( w
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 `, g/ P2 z5 Q. W8 S3 C( r6 M- ^ if (ret) N9 j; O' o/ r/ D# s: C
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% x9 L+ I' O5 j$ v7 `/ L7 L
"%d\n", ret);
# Z. W6 F3 g( F#endif
% E+ J' R- f) ^ d ret = platform_device_register(&da850_evm_tl_leds_device);
2 ?7 Z9 W4 t- t* [- l" s6 h; y/ @ if (ret)
: ^8 J* Q# a9 c0 E: z! Q+ q3 d! |+ Y pr_warning("Could not register som GPIO expander LEDS");
. l5 X+ I/ e7 T else H( n$ o( @1 M# I
printk(KERN_INFO "LED register sucessful!\n");2 c1 c5 f! H, S0 |, P
: E9 c7 K) Y8 ^- [) }) }7 s2 R) i
return ret;
0 t( |: |. K- W' R* j6 s}7 L( q* i$ A; ]! [; N
" t6 N4 q) ?' I+ a/ m4 P
static void __exit led_platform_exit(void)
( Y; j4 [ j- Q1 y{
' R3 u' Q- g) _ platform_device_unregister(&da850_evm_tl_leds_device);- F" A0 [$ G+ X) J0 h
& ~. d1 I0 W9 n' K& T4 I
printk(KERN_INFO "LED unregister!\n");
: l, V; k* x+ z! H1 k}
- s* r+ |* p+ X" l. j! R/ c- }1 K
9 X5 W- G* m* G- `# W& g2 `module_init(led_platform_init);( _( l' h9 U& G
module_exit(led_platform_exit);
) A( v: m2 _# r* K" c* I; @5 e3 H9 i9 T
MODULE_DESCRIPTION("Led platform driver");
2 z. w3 O8 ]" N0 ?4 mMODULE_AUTHOR("Tronlong");4 s. I# [& [& U" i# |
MODULE_LICENSE("GPL");# f/ a+ }. e D. G8 k) a8 d
, d& ]! y( \; c/ d; \ l+ l, A+ ^
|
|