|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- L/ u/ ^6 T! @! z3 ?% r#include <linux/init.h>3 m' Q' s3 }: j0 v
#include <linux/module.h>
, p9 K" m; S( \7 w' j#include <linux/kernel.h>5 y" t9 v* _2 F- M
#include <linux/types.h>9 Y _% H M8 L, [
#include <linux/gpio.h>8 l, E: [ U4 U; t2 u8 K, z+ n1 B
#include <linux/leds.h>
# [3 p1 c; i, u, ]$ C' M8 h& Z#include <linux/platform_device.h>5 E( n) T9 T1 Q/ t8 d* H0 S0 |
; ~% h& p! [: [4 @#include <asm/mach-types.h>
% y6 Y3 l- M/ y( g% A3 ~% o/ f3 p#include <asm/mach/arch.h>
" A( F: W6 M) m+ q' c#include <mach/da8xx.h>0 L; s) f7 S; K3 I, G& t5 z! ^- v* Y
#include <mach/mux.h>
6 a, Y4 }7 a! d4 E4 g, L; Q: Y) |8 J% W7 S: I
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)) a z6 S' m# T9 `: d) Y: ]/ W. T
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)( o: O! Z# l0 H/ L6 l
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1); X& D: v W7 ?2 n- Q& r" G
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)5 ~& r$ m7 i/ T, H0 C
. R4 U% I4 }3 t0 ^% U/* assign the tl som board LED-GPIOs*/1 M+ g) {2 i; a; \/ ?4 i
static const short da850_evm_tl_user_led_pins[] = {6 |! \2 e' h6 A! N& ]! a- K- k
/* These pins are definition at <mach/mux.h> file */
, f" r) ?: j. N% R4 Y0 a DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
4 d+ ]4 |+ ?6 d' e0 g0 L& B -1
. W/ o3 _2 F7 L! L};
* C- U! ^' N4 W8 u& D0 {% `% @# T9 L: m9 K& B
static struct gpio_led da850_evm_tl_leds[] = {6 ]# }7 l8 n3 t) ^) I: [: S5 ~
{( @4 l6 t8 r" Q
.active_low = 0,
* G* i* L- J: U5 p .gpio = DA850_USER_LED0,
) `! } e4 A* _2 F X/ V7 U .name = "user_led0",) @% m0 Y: B0 |8 v* D
.default_trigger = "default-on",
9 \; M, x4 f' J) i7 M },% Q/ g5 }+ ]9 c, h. ?2 Z4 q
{& d. ]- k- D# A% K" D
.active_low = 0,
2 }. c& Q# A V8 F5 `% ^9 [ .gpio = DA850_USER_LED1,2 A; N) Q: m9 v4 }+ [
.name = "user_led1",) E8 N3 z; c8 O. Q8 y3 O
.default_trigger = "default-on",
: P* }2 L% i8 q$ Z0 r- d! d3 |! ~ },
9 W' L& ` ]. I, |* G2 _2 y {" H- u! W5 A. Q* t, `! F& e/ j
.active_low = 0,
8 s- R9 v. T( n( G .gpio = DA850_USER_LED2,
- ]7 E0 N4 p+ d2 L+ m* R .name = "user_led2",
x! x% U/ m9 R0 x .default_trigger = "default-on",4 r# k( w+ T5 [$ C' Q5 o% d5 c
},
# v8 f4 ^& `. m% k {, ]0 d6 V% O u9 d$ E
.active_low = 0,' o. r* h9 U g Q/ K! Q
.gpio = DA850_USER_LED3,
+ ?* b' O( L2 ^- I1 \1 ]2 X .name = "user_led3",$ J- F, u% N( \# r
.default_trigger = "default-on",# z+ K9 D' z- M0 M
}," D5 i2 c5 H# z, I) n0 a
};
# a+ P# g3 E6 [4 p- ?' V
* N2 S: n8 X0 O. J6 l0 Tstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
( S+ c: q- x+ ` .leds = da850_evm_tl_leds,, J% C0 P! ~0 u
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),# P2 O" ?. I* L+ g- |) L
};2 Z& z% b: |& c- i) J L
, Y r0 W7 S7 G% k* D5 F0 d; jstatic void led_dev_release(struct device *dev)
! ~+ L/ v: }3 ~ b) w6 P' F4 n{
2 r d& e$ _9 ^; p; a3 \7 H};
$ b* Q/ N/ X9 y) x$ ], A& W0 c& Y0 A4 u
static struct platform_device da850_evm_tl_leds_device = {
* Y" J W. q, X .name = "leds-gpio",& s: }2 ~3 V7 y0 z/ ]1 ]5 q/ ~4 X9 F: u: W
.id = 1,% c Z. `6 j' g- o- m2 |
.dev = {. G0 D8 N6 X0 v+ ~) A7 l4 w
.platform_data = &da850_evm_tl_leds_pdata,0 P% D, W ~5 p4 j7 U: d) h, ^
.release = led_dev_release,8 |2 e$ i- w4 v1 O
}
6 A& l+ y5 A- ?( s};
3 g1 I, ^" r7 ^4 x# d
: M+ j3 t$ ^! H; [" estatic int __init led_platform_init(void)+ I! |2 \% U) d6 e! w$ @/ T
{
5 s b$ i5 i+ S( Z, \4 ] int ret;6 G- ?9 n! ]6 x! ^1 G4 V' h8 e1 S% Z
#if 0
$ W0 _ t* H7 c, e' D0 H ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);+ `8 w, j6 g8 D- ~7 A( v9 m; k3 I: A
if (ret)* M' W4 q% _4 t
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
% E( O; a& s$ I! S) J: X9 i7 V7 }8 c "%d\n", ret);
2 Q O: K- E' T* |: s#endif
1 e* u& V* }% j/ h$ u1 ` ret = platform_device_register(&da850_evm_tl_leds_device);
4 i2 J" J2 W3 _! M0 ? G0 p if (ret)# u3 f( _! O$ a( M
pr_warning("Could not register som GPIO expander LEDS");
3 n1 Z/ v" @4 U0 U. D" B) r+ X else( y3 {' P) a& Y6 P
printk(KERN_INFO "LED register sucessful!\n");8 K$ M! w- @, N1 [1 s% n% Y
- y4 U m) P6 T6 d; \1 n2 ?6 O return ret;4 |. {- l* z$ m8 t2 r p* ^1 ]
}
; h! m, p+ |3 r" h# {& L
5 V7 M8 @0 J) ]4 j( xstatic void __exit led_platform_exit(void)
) d; ~- q. R+ x6 V{
1 _+ B% D) I/ r8 j platform_device_unregister(&da850_evm_tl_leds_device);
; u- E) A& ]8 u# c- U. E4 M+ f
6 E: U/ d" V; ^. G4 X/ A. ^/ @$ k printk(KERN_INFO "LED unregister!\n");6 ]8 f# ^; a S' y* N4 o
}
& ~: C6 z' b! C7 q6 q5 v* v; B# X+ ]" L: N* Z3 q% s& E
module_init(led_platform_init);
. W. j1 G$ g T: p+ _: Q. F. ~module_exit(led_platform_exit);
6 |8 y: H, I5 j3 l
7 n/ t1 R2 z" l% T; pMODULE_DESCRIPTION("Led platform driver");6 r z' y( G* @ c, F
MODULE_AUTHOR("Tronlong"); d5 ~; { I7 s% s6 E4 e
MODULE_LICENSE("GPL");5 r+ l4 P1 v4 \" R& b
/ A+ d4 g9 E% T3 y |
|