|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ v9 m. r6 z0 J0 Z#include <linux/init.h>" u9 E! }( V7 Q* k# r, Y4 r# U8 v
#include <linux/module.h>- y1 E3 {$ W4 x. c3 D7 r
#include <linux/kernel.h>
/ h! I9 L, Z4 }5 S, x#include <linux/types.h>
! U8 i" v, V- c: F#include <linux/gpio.h>1 p9 r7 }# o8 K
#include <linux/leds.h>. q7 K; S' b' @5 ^3 S- i, h, Q
#include <linux/platform_device.h>
( ]! e* b( M$ `% E* v* i# j! o% y$ d9 @& O0 a
& o8 C7 {" f+ q; Z0 J9 ?#include <asm/mach-types.h>/ D( F0 P2 V# V& I* [* b4 U
#include <asm/mach/arch.h>0 |; v$ S k ^- k+ S8 `; Z
#include <mach/da8xx.h>
- t$ m% ~1 z5 L6 l- i: U7 H6 H$ V#include <mach/mux.h>% N$ g! V+ l& r
( O( x8 A( P: l/ H t1 C; J- Y
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 D8 j- M" }1 _4 g3 O8 Z3 }
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ W$ t0 j; E8 U9 p) [
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1). H% I( Z2 z/ e4 ]/ M! H
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
. }6 C+ E( ~# B# d
$ [+ S+ x+ J }2 c5 @/* assign the tl som board LED-GPIOs*/1 \, C+ G6 V* {0 T- e
static const short da850_evm_tl_user_led_pins[] = {
; }0 y! v& h$ q! y' K# O! i5 p. y /* These pins are definition at <mach/mux.h> file */
, v9 Q- Q0 T* S0 q: S0 t5 b DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
" w! F1 d# D, J- \ q8 y. R -1
; W) k" v) P8 A8 D# B3 X$ w- o$ K};
" C* I( ]( g0 R" t7 @5 A. R# ? C: B( V$ ]
static struct gpio_led da850_evm_tl_leds[] = { X3 m2 @' m4 S/ Q [; n. c2 X2 e
{. z/ [ n! |/ S% |9 W8 a& ?+ Y
.active_low = 0,
1 e8 }' v' q; V7 y" r g# E' L& G .gpio = DA850_USER_LED0,4 [. u' U% U ?
.name = "user_led0",
& H1 j, G: @2 l9 G; ]! F2 h .default_trigger = "default-on"," U% L7 q1 x X9 f/ K6 W# o
},
# Y$ O/ g) N0 z5 w5 I- n3 @ {) S5 B! p3 F* I6 c
.active_low = 0, U2 v w9 r% C( a4 v1 C! j* v
.gpio = DA850_USER_LED1,
3 W" _, } S% N. A7 M |8 l6 X+ Q% x .name = "user_led1",- A0 P# W+ X$ y
.default_trigger = "default-on",
! d6 }& ^' d% C7 `/ S$ @ ^ },
8 b7 V9 e* X+ k: _6 a {
; u* Z* ]; H; m8 q- r. B- {3 k .active_low = 0,
z3 H$ }: i6 ]% y" K- x6 x .gpio = DA850_USER_LED2,$ b& m% G Y+ H! d9 ]* s0 v
.name = "user_led2",9 O- a- G2 `% d! j# H1 B" N
.default_trigger = "default-on",
: h9 g9 w$ G) D- h. z b },
* A; s- a- v" C" x/ M9 X& i6 D6 X; n {, I' X. E: t/ N7 J1 S+ s
.active_low = 0,6 V' ?$ N/ p2 d5 y
.gpio = DA850_USER_LED3,
7 k. e0 D* p0 q2 u v4 [! _ .name = "user_led3",
9 r" h9 h( S8 d: ]( a c .default_trigger = "default-on",
3 x- L. j+ i/ J },
* D, _/ D# h# F) E: R};
8 V6 m( F& H, F; }% @3 u/ i
7 n) m) q4 C! z& k2 l$ f6 h; f4 Sstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {$ N- m2 s' Q+ [9 @* Y+ J2 c
.leds = da850_evm_tl_leds,
- b) Q: P; |. g) d .num_leds = ARRAY_SIZE(da850_evm_tl_leds),# d8 f. H% V( c r; M
};
" y6 ~ K1 e3 U) ?# `
! R/ H8 n% g* ^# wstatic void led_dev_release(struct device *dev)
" O+ l6 a* G6 n1 ^9 P% e{
& d8 X& d- J3 g$ R};1 p/ W' r3 R3 Y
3 g& i5 n/ }: E6 xstatic struct platform_device da850_evm_tl_leds_device = {% |, I- x& c$ C9 ]
.name = "leds-gpio",1 r0 S& H+ U, x0 c2 w2 q3 y- g
.id = 1,
8 C' u+ ?" i1 L1 a$ n* v .dev = {. K ?0 {& F/ B
.platform_data = &da850_evm_tl_leds_pdata,
" V0 G6 S8 N9 h& j \* o5 I& A .release = led_dev_release,; M* j# i& p2 p8 G9 T* A
}
j- {* v0 s) m};
$ C6 }+ J7 O8 t, P1 P- i! `' @9 o' M
static int __init led_platform_init(void)5 {) D% s2 L! R; [; ^; A6 K9 C
{0 q* g4 w- K W X6 j7 m/ l
int ret;
9 N; ~" n+ X1 T2 U1 \$ X2 b#if 0
' H# l# n) b* e" k: L) m ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. Y( {9 g; L7 m# }! l
if (ret)
6 U* M0 N. Q8 r5 Q: e% q* R9 i pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ J6 J$ X2 U& V0 u "%d\n", ret);
6 j4 U! n" ^, h9 [#endif; [' B* f$ G1 B1 M) p1 T
ret = platform_device_register(&da850_evm_tl_leds_device);
$ @& s5 I( R# n" ~ if (ret)+ o! Q0 V" b* b
pr_warning("Could not register som GPIO expander LEDS");5 y5 S+ U- b) Z' B, `; G
else! ~8 _9 H4 E3 Z& d) l( }6 l, |
printk(KERN_INFO "LED register sucessful!\n");: a! E0 e. p) j' P4 D B! n
& L/ o# T8 @+ g5 r% X, u return ret;' y( N% d5 ]/ {! ]
}: v8 ] Y7 b$ U8 H/ w
- U! j9 e3 |/ a5 q9 V' v9 {static void __exit led_platform_exit(void)
0 Z/ v2 l/ O/ D{
+ W% F7 f- z5 V9 a/ b/ \ platform_device_unregister(&da850_evm_tl_leds_device);
# y6 F* ]' a; w( @( V+ {9 |% F8 Z
3 |. ?9 W6 f3 `# c9 N# V* D5 |& ~ printk(KERN_INFO "LED unregister!\n");* ?" }) I0 j; M4 o0 ~7 w
}0 \1 O6 \" }4 p2 i. \% Q0 |
7 a% O, F/ v( g) n1 B' K7 e9 r
module_init(led_platform_init);
- k& G, B6 K9 n8 J! s. A' ? smodule_exit(led_platform_exit);6 y! v7 T. V8 a, x( a _$ p: k3 E: s
3 Y9 j# r; F; A* d9 d4 sMODULE_DESCRIPTION("Led platform driver");
4 Q" e) D$ |' |- n- E' lMODULE_AUTHOR("Tronlong");
- T/ L# v8 P- d xMODULE_LICENSE("GPL");
. w* w2 @2 Y- G: |4 J# N9 q4 c; J- y
|
|