|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ @1 h7 s- `. Y6 |7 M#include <linux/init.h>7 n% w% }% }6 U
#include <linux/module.h>0 m# `) i3 H. B6 y0 B
#include <linux/kernel.h>3 f/ Y. Z3 m( u! m- a
#include <linux/types.h>) w$ V: G. K/ P1 O5 g
#include <linux/gpio.h>
' U! I* e4 K3 }" L5 y" B' r( u#include <linux/leds.h>: i' W' j; J, e3 k9 r, K
#include <linux/platform_device.h>
; { b7 p3 L* \# O9 _/ K8 |- a$ d" }- H t3 \' [
#include <asm/mach-types.h>9 W' n; r" \; y% U
#include <asm/mach/arch.h>
* x( @' [# ~2 I d d1 y# B6 v. ~( @#include <mach/da8xx.h>
5 z: X6 a0 l; f) M#include <mach/mux.h>5 L$ M# }3 _0 Z0 @6 e' W4 w2 H' O
* W* o$ O5 v J5 t#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
% r. ?- \2 }' m/ n l% A#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
+ R8 k5 T0 D3 c% `#define DA850_USER_LED2 GPIO_TO_PIN(0, 1), G5 ^* r0 E* H- w
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
2 A) s7 U0 C" }2 U- W1 k! }
. x+ g* K6 I' P: t- L* z) o' ~/* assign the tl som board LED-GPIOs*/0 }! F9 A9 x6 V: W# n8 T
static const short da850_evm_tl_user_led_pins[] = {. I) p( r# W/ ^" Z
/* These pins are definition at <mach/mux.h> file */
' B- `2 R% a4 V- c: n, } u DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
5 l8 L) m# i0 C" H! Z8 o9 K2 _ -1' e! \7 k/ ^$ t5 j' w5 Z9 s
};( G& d p" X- S. t) x9 a: X$ w
$ N0 i0 z+ y+ y( ~& t& Bstatic struct gpio_led da850_evm_tl_leds[] = {( G; R! K) Q. M7 U' N- b
{
% O: P4 _& {- T3 K3 @ .active_low = 0,+ P/ A) g2 T8 j: G f
.gpio = DA850_USER_LED0,* i1 _% [: V9 [) i- |* S% j
.name = "user_led0",1 U6 Z7 n1 x4 V6 V9 N S
.default_trigger = "default-on",
( R7 z% O) v7 `$ ?- r1 E8 W u },
+ f! o" A6 ?( g( r* } {2 L+ X- Z3 K9 Q* x7 P3 K9 k
.active_low = 0,
: p) W5 M/ ? {* [* {) b .gpio = DA850_USER_LED1,5 p# `, L: q5 l4 o Z+ n
.name = "user_led1",
. X3 z; j" a% u8 F8 m/ e! { Z2 [ .default_trigger = "default-on",
9 ^6 _% \( p& W: a2 B ? },& X4 I8 O% |& d! h' ^9 a" @
{
2 D! \- R: Y7 Z+ x n* r W" S } .active_low = 0,& r p4 O4 W5 R8 {1 h0 o
.gpio = DA850_USER_LED2,9 K% o6 M2 P6 X, `& \
.name = "user_led2",2 R7 ~8 e$ h& `' J ~+ Y0 B
.default_trigger = "default-on",
5 k: T' G; m* _+ \& u; D: O( t# E },2 y( q) A' Z" s5 h2 d* {) N; Q+ R
{2 I; L4 j! l# C+ L
.active_low = 0,
4 X. P2 i( j. ~ .gpio = DA850_USER_LED3,2 Q6 s! ?5 j5 C3 k% G: P* t
.name = "user_led3",8 }/ N6 v" m- m/ y( P; e3 R9 o
.default_trigger = "default-on",
6 B# u+ ~" d8 @$ o4 }5 K },
. B+ ?7 w) X1 k- Z};( T$ F% \$ D! a! E: Q1 m8 ?5 Q! G
) z* F0 Z) E% u$ hstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {+ `/ b/ \ ]% ]: o
.leds = da850_evm_tl_leds,3 Q" y3 U8 i! m4 x7 z& B/ ?
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* X$ m, A @5 b6 T" J1 C3 x};$ `9 `$ q o5 a$ [1 D: Q( t, Y" d
x& b' @9 O: y( A C, F- wstatic void led_dev_release(struct device *dev). L# ?1 H/ P* T+ W
{+ ~8 c2 N9 K. k3 T: j: c) S7 K
};& f; \' T6 ?' T& j4 G: K
+ f# x, N5 ~5 O) S3 O9 C" ^; }static struct platform_device da850_evm_tl_leds_device = {
3 M4 U) m, n( ?* N .name = "leds-gpio",$ A. B8 c: \2 n1 N ^; ^
.id = 1,+ H9 H& ~( N( J+ N" u4 b
.dev = {4 G2 |; B; e& _8 S {2 ~( ~8 |
.platform_data = &da850_evm_tl_leds_pdata,5 f: y+ L7 ~- I2 [- Z! p6 }% d3 E
.release = led_dev_release,
. d r: |; y; K& m2 P3 ^. } }
8 m6 j) ~' D2 A. z0 ]! t};: M2 Q2 \1 J, P
6 ~. R; o" k# c! J
static int __init led_platform_init(void)# ?- w" G. v* F/ o% F1 D
{
7 C1 o0 w5 ]8 a+ J# G7 Q) ~ int ret;
, g* N$ q. }7 G3 l$ Z, ~1 v3 g4 L#if 0
5 M6 T" W; x/ f5 u+ S ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
d7 J! _5 f: K. {. ]9 y/ E3 \. \ if (ret)
/ S( z- ^# a* j pr_warning("da850_evm_tl_leds_init : User LED mux failed :"6 r- b3 b8 N+ Z/ F) {+ _; g$ z
"%d\n", ret);& L$ f, n& `' U4 U) m
#endif) g% k6 O9 I9 q N' |
ret = platform_device_register(&da850_evm_tl_leds_device);/ d2 g6 O# n+ B6 _3 ]( L7 Z Z
if (ret)
6 x6 Y- d) D( o" b( F+ v) ] pr_warning("Could not register som GPIO expander LEDS");
$ j: c" a/ O% m1 h else$ ?+ X0 `! f& J- h9 ?4 g
printk(KERN_INFO "LED register sucessful!\n");
. ^ u4 h0 ~% M$ s6 [$ V8 F; D% |5 F7 ~
return ret;
% X% |$ b, Q, |& @ l& |}
: @& F" V7 {$ ^# C+ u
. `# T5 z7 V m/ P& ?. p8 Istatic void __exit led_platform_exit(void)
6 i W) D6 d5 I{9 J/ [8 t+ T: v4 M
platform_device_unregister(&da850_evm_tl_leds_device);6 T! D# n: z8 {/ ^3 y# {; [
8 t! J- t' [9 C, o: i printk(KERN_INFO "LED unregister!\n");
! {, j# P+ O3 a/ V6 H}0 K/ \$ v) o+ F+ ?; ?/ W
$ Z$ Q+ K2 A- l& i: ~
module_init(led_platform_init);
8 t: E" v% t6 B$ N5 Dmodule_exit(led_platform_exit);
3 O; G% m* L5 N! i, ^3 @% j- H# N
MODULE_DESCRIPTION("Led platform driver");
( d! @+ {8 h; U( z- v6 FMODULE_AUTHOR("Tronlong");0 {) Q, }: s" Y& X
MODULE_LICENSE("GPL");: i/ ]0 _9 C. u- l1 M$ T* G
6 [" {" U- R( ?, |: d# Y. ` |
|