|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
3 S6 T) c2 p! x- u: C" J#include <linux/init.h>
& L9 N; d+ z) q2 Y9 S+ o2 g# C. @#include <linux/module.h>
0 M$ ?' O2 M/ {) Z#include <linux/kernel.h>
/ @! Z5 W3 s) z6 W4 _; n: ?#include <linux/types.h>
$ C1 g3 A& h2 D% Z8 ^2 Z4 W \#include <linux/gpio.h>
# l0 y: H5 Q+ I1 s5 h" X& {1 |; T; G3 h#include <linux/leds.h>+ v4 ?" X6 {( v8 J
#include <linux/platform_device.h>
3 F$ b6 s( R) m* V- g6 ^: ?: X: h: N: T5 [; i1 I
#include <asm/mach-types.h># |+ D) C3 ]8 R- k# l
#include <asm/mach/arch.h>
; l& U) ?5 F v' b- Q# w3 P {#include <mach/da8xx.h>+ l% K% C+ o! ?* |2 i' s6 x
#include <mach/mux.h>
3 |6 Z+ o3 N' V6 x, z2 e3 t6 z/ W- s
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)4 P a- o+ y) h# d* h1 a d$ t
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)) o4 H8 }5 E. v
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( A7 c7 C+ r- @% V7 p! ~9 J#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)8 |* e. U+ n! O" z; f3 N$ p
7 \7 T& O. X0 E- W/* assign the tl som board LED-GPIOs*/$ v& g8 }; G/ y0 W
static const short da850_evm_tl_user_led_pins[] = {+ U9 W; W( J, X' Z) m2 _0 N
/* These pins are definition at <mach/mux.h> file */
- [; p& s @, [* w2 q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 X2 r7 r. V* J+ n7 d# ~ -1
5 H. _& N( d" a8 V8 `$ v0 E};
. \5 c% e ~. U* F: y: a% U5 g0 }/ I$ I) @- E. ?: Q* X( y$ _. d1 H# D& t
static struct gpio_led da850_evm_tl_leds[] = {
$ T* b: R$ V5 q2 _. e+ T {) N- T v1 W! z$ |
.active_low = 0,$ E- N: D( {0 k
.gpio = DA850_USER_LED0,
8 F3 k3 O* c% V, \: S4 l K .name = "user_led0",
. s# l J O4 n; Y! _. }! Q .default_trigger = "default-on",
8 J4 J# a$ B1 w6 n# H+ p* W },
5 R t/ P" u/ e3 \ {
9 F1 ^" }5 j" K, D1 Z2 ?- x .active_low = 0,: Y' X7 D* V' M; k" Q
.gpio = DA850_USER_LED1,
1 P9 E1 O6 F& y9 n. e .name = "user_led1",0 k1 e9 p, n# @
.default_trigger = "default-on",
) d3 u1 o' ~6 e& @( s },
, o/ d# x! i2 t {
( ] w6 U9 \9 g5 ?5 s .active_low = 0,/ I7 X7 q P2 G
.gpio = DA850_USER_LED2,
: |& V1 l/ U% l- d$ |0 s4 e .name = "user_led2",+ G2 I: `, D3 b4 i/ C) y
.default_trigger = "default-on",
7 Q1 J p: F' B/ T },
2 b9 c& C+ L0 [! f8 J2 C; ? {
9 y& c) y8 e' q# z9 A' N x .active_low = 0,
0 l) o9 L: g# s1 ]* r& _ .gpio = DA850_USER_LED3,
8 ?6 t* X0 T7 }3 k% g8 P1 D .name = "user_led3",2 U% P! U4 G. L3 P+ F2 j
.default_trigger = "default-on",
. i0 J# |2 S8 x& c },
8 D6 U X6 z5 |- x" @# O};
# ^8 s5 f) F# }* d) Z' e1 s. N1 P9 \4 @: a& H Y
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {, O% l1 a' s7 t& T& s) B6 w4 W
.leds = da850_evm_tl_leds,4 K* {" g: |3 p0 S' V' @8 P
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),* e/ T& `1 Y$ H$ ~4 T7 O' Q% j
};/ j- `0 X/ \" h) K* J$ |
. N* [0 R/ ~6 v! |+ R1 Xstatic void led_dev_release(struct device *dev)
* C! I8 X- P# b* U) P{% a; B# E0 |2 W1 z6 @2 q" V; [
};9 k. ]' }, c Q$ A2 C
: }5 I# O' `" L# }5 O9 _/ g Rstatic struct platform_device da850_evm_tl_leds_device = {
) H5 U+ d7 [( V* y$ X7 b .name = "leds-gpio",
0 ^3 s$ i: L9 {; u3 v .id = 1,
, Y: C9 D4 a& z; I+ L. N E .dev = {
- }$ y9 m% ^) b$ x0 k .platform_data = &da850_evm_tl_leds_pdata,! G i. F" u# g! |8 N. u/ m
.release = led_dev_release,
7 v. l3 _3 x$ v: D% F }
& T0 b! {; ?% Y0 J9 `};
! Y5 D6 M. r) ?, g) n7 u* ~+ `8 G" d
0 g# @$ P0 _! a0 hstatic int __init led_platform_init(void)7 @" j9 E1 y3 c$ b1 u! G
{
/ n+ k( s! C& b, h7 U int ret;
; l5 R. b/ B j& w2 q#if 0: U- h5 | Z; d0 P$ k) T# Q
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 Z# ?0 M8 H! z5 u# K0 Z3 N
if (ret)3 g4 r0 I8 A$ s: i
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
$ e% b9 p. ?. E4 r "%d\n", ret);& b! o# S6 t3 R/ p X
#endif
. X+ x- F$ C- w- i# t8 S ret = platform_device_register(&da850_evm_tl_leds_device);7 F m! h: q8 N4 H
if (ret)
; Y- w+ {* `" K. ~( G- @& B& h pr_warning("Could not register som GPIO expander LEDS");6 e" Z* Z, Y7 `& Q+ {# Q* G$ }$ i
else
) q: |; [8 L Q) H1 B" x% E1 d' z printk(KERN_INFO "LED register sucessful!\n");
; Q7 M) U+ L3 R* b: O1 p3 Z) Y5 r( F; T0 A8 u
return ret;
& A& s" A$ @; k1 o% I}/ t+ @" ]4 \2 e0 x3 [/ D" X
( u% Z3 s' \ U! a! O8 j4 fstatic void __exit led_platform_exit(void)
/ l" M: Q7 V/ ]- N{! {& Z2 U; o k( X
platform_device_unregister(&da850_evm_tl_leds_device);# j8 r# ^+ d) G; f. k/ b
- H+ E6 `+ B1 p, ^' V printk(KERN_INFO "LED unregister!\n");
2 D2 y. s! R% n# c+ e3 n0 z2 N/ B}
: p F( ~' t2 h4 r$ s
, {# c5 e% o8 p; R( Xmodule_init(led_platform_init);. D; f& U. z& `, W' T/ a7 E
module_exit(led_platform_exit);
0 x9 G; Y; `( E3 X7 J
~! ] K4 R& g3 Q! `. ]8 k6 sMODULE_DESCRIPTION("Led platform driver");
. G; U+ T8 D. mMODULE_AUTHOR("Tronlong");/ [1 |+ F% [" X9 W- G2 T/ [8 J4 [
MODULE_LICENSE("GPL");+ B& U+ e$ |" ] i @# t
4 ~2 T8 Y6 j; j* k
|
|