|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
+ l+ J( a; e* N7 @8 v#include <linux/init.h>
" V3 {, @ |' W/ m1 ~0 I& I3 V6 W% C+ u#include <linux/module.h>
) F0 u8 E$ p: e- d" g' y- X1 r#include <linux/kernel.h>
k9 U) m4 ]. g# K; ?, F#include <linux/types.h>' @3 y) Y3 r' N( |
#include <linux/gpio.h>! [ _) E9 I' {9 Z
#include <linux/leds.h>6 `- o! P+ V& p
#include <linux/platform_device.h>5 @0 ]6 a3 V$ D
) y* C o' m4 x1 u5 E& l0 Q/ Y( f#include <asm/mach-types.h>
0 x( {4 t9 R) [3 b- U& u#include <asm/mach/arch.h>
( C0 Z+ w( i% G( X$ p+ j#include <mach/da8xx.h>
. E- X0 ^8 H& N5 q/ G: S8 x4 K#include <mach/mux.h>
9 g# ?) C {$ T. K- N! x5 x! v8 v/ D; ]0 `& t% H4 x9 U
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
' ~" _. Q2 c0 b* U, [: ~#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
' p; x2 E6 u G7 P- g% I: b) H7 k#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
" o8 ~8 c9 W4 z% j#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)" g- U" G9 M% P3 Q( o; ^
; b4 Z* d5 G. a
/* assign the tl som board LED-GPIOs*/* r5 E/ d/ X' ]
static const short da850_evm_tl_user_led_pins[] = {
3 N5 j1 L& X) I /* These pins are definition at <mach/mux.h> file */& t K' W" N& G/ n2 C2 p
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,: w1 Y( y/ {6 Y% K
-1
3 ^6 H# X- S: @- ^};
; H5 ?& ~( | e7 |' E6 k( ~5 h$ ^- n% @- V8 A' n1 a- \) q
static struct gpio_led da850_evm_tl_leds[] = {2 Q. {2 P4 B- A
{5 |; L2 D, Q( ]7 e( z
.active_low = 0, j3 d) E8 T3 k) n' b
.gpio = DA850_USER_LED0,6 Y, {% y8 b3 l- R4 R
.name = "user_led0",
) d J) P( k: w7 D .default_trigger = "default-on",+ i/ D3 [2 z5 m! X, o
},
+ G% s- H2 L' z- A/ e V {% {! R z+ F7 Q1 y5 z- {) S
.active_low = 0,
2 P" c0 s4 H# _) ? .gpio = DA850_USER_LED1,6 Q0 p+ R( ^% a7 |' }
.name = "user_led1",0 i; i# ?) X9 f1 L* K+ b
.default_trigger = "default-on",
) t3 G$ z' N4 m9 i },
5 t$ G! @# `/ N! Q1 j& u' i {
. U8 o. E5 s4 z+ ], ^ q .active_low = 0,- j% L; m+ f: b" @: \
.gpio = DA850_USER_LED2,9 Z! g/ }0 l; Q* _& C3 W
.name = "user_led2",+ Z9 d) H" f5 J5 o, h% j6 I/ l2 `
.default_trigger = "default-on",
& j( X& W( U! s/ Z6 ` },
5 Y/ q. V6 ]0 y+ B( w; z {1 e1 ` P& X; {0 d# q: h
.active_low = 0,% U5 A$ G( N2 ^! d7 Y2 @
.gpio = DA850_USER_LED3,7 h! E7 i3 q9 b; d& a
.name = "user_led3",
/ ^( z8 d; z+ S }, [' q* f& f .default_trigger = "default-on",
* t O: V7 y/ E },3 M5 } K M5 ?6 B1 {$ G/ L7 x& S
};
+ g. z4 I. e" P e$ ?. w# p6 |# h7 k6 s# x# z' [6 F, G1 q" S
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {8 `% o+ Q! u) J: P- B5 ?
.leds = da850_evm_tl_leds,5 n* U, x6 x6 y* ?: z
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),( J0 \; E/ r* p2 L1 g! h" i$ D
};; W8 o+ _4 ?( ^4 H! T8 E6 d1 O6 i$ Q
, a1 J' H- A) v
static void led_dev_release(struct device *dev)
% v) t! G. A: {8 ^$ i) X* D6 L6 |{
1 v- A1 }' @7 g0 d};. `7 v' \, [2 Z* N% ~) {
$ W+ d7 _$ n! ?$ F/ c6 K% j0 ~6 |
static struct platform_device da850_evm_tl_leds_device = {
1 g/ x1 H0 b! z5 O1 i& S) @ .name = "leds-gpio",
2 \) Y1 d: A: E% E* |( I6 `$ s .id = 1,3 |# A+ x8 _( C" E I8 a* b
.dev = {
; k" S/ k& Z8 G ?8 c8 h* f$ X .platform_data = &da850_evm_tl_leds_pdata,; t! |, L! O: \9 I2 c0 U7 ^
.release = led_dev_release,
% @5 G R9 O7 B: n9 l. h6 H8 s }
% ?$ |5 }) G& y! M- k};* R: k# b3 }0 ]! _( }6 p, F
3 B$ [+ b5 } t l7 q7 a
static int __init led_platform_init(void)
+ \: v d- e7 @{
& `( q- t) l8 H int ret;
+ P) L! p/ N8 V#if 0
' J$ v% L4 G# H0 g5 A, Q0 n ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);" \0 A! o1 b& j+ ~
if (ret); s* @2 I& m0 U
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"' Z* o6 u4 a/ l2 ]9 I% n r
"%d\n", ret);
8 @. ^' h+ z( j7 J8 y0 ]0 S#endif
% I6 N0 C7 |* i3 s0 i: V! g ret = platform_device_register(&da850_evm_tl_leds_device);+ u- [9 i( X$ T0 ^
if (ret)
" `" D. L6 G- h) B, v+ k pr_warning("Could not register som GPIO expander LEDS");
# U0 \8 h; Z) K s else
9 \6 O& V7 `0 S& A1 G printk(KERN_INFO "LED register sucessful!\n");
" E6 i2 T* C7 k$ m+ a" B) G( P8 ?3 j/ L) I* a* x
return ret;( s/ Z' Y% p8 S: l, T) a/ F
}
( V3 M! w2 b, h" c; x
: q6 ^" |3 d6 }static void __exit led_platform_exit(void)
9 l' a/ }9 u% S: ] G6 S* t{' x: C. o0 N8 h7 b: y
platform_device_unregister(&da850_evm_tl_leds_device);
! y/ ~8 f! B+ I; N. S! X" O, m2 m1 ^
printk(KERN_INFO "LED unregister!\n"); i) [6 f( ^2 a5 V' h
}! S) P4 _" G& d
9 d6 V$ |# V, r H5 W
module_init(led_platform_init);! n: W6 D+ d9 E5 q5 G7 e& T1 g
module_exit(led_platform_exit);- ? e; {& w/ D
, G1 \ L' K/ w9 }MODULE_DESCRIPTION("Led platform driver");% k* \* i( P% H7 I+ v' t
MODULE_AUTHOR("Tronlong");) K" [' b% C( E/ [
MODULE_LICENSE("GPL");
2 i. A& l; R+ }6 X. k( H7 F8 I& C3 [0 h6 M- r1 g- Q
|
|