|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
5 M+ B7 Y, y- K# ^#include <linux/init.h>
- o% N6 O$ ^/ f# _#include <linux/module.h>0 A; E7 c1 B9 f* O% A5 i5 u
#include <linux/kernel.h>
( v( Q0 { w; P: Z; A0 y& s; ^. V#include <linux/types.h>
) |8 d( O; W; ^$ o0 A7 d#include <linux/gpio.h>7 Q- F2 l# o+ z( W* I
#include <linux/leds.h>) r. i0 p% R. u, n% E$ l# r
#include <linux/platform_device.h>% C2 Q5 U$ K9 j( O; q
1 W% g* W- g" b# R3 D$ F$ L#include <asm/mach-types.h>9 _% v2 B. o% W( i$ ^
#include <asm/mach/arch.h>
( ~/ G) _* i. r: Y#include <mach/da8xx.h>. }$ b& k, G/ [6 F( ?9 `, \) F
#include <mach/mux.h>
' T+ z/ b: ~' D- N) P
: C+ O' l3 i( A" c" ~3 x2 N* U#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)/ D( W# K1 H( l3 `
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)! X$ H2 p* o6 u9 K2 W% b
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
4 e) Q4 }& M8 A/ O+ j9 V#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)! j ^/ z+ p/ I
5 w6 l; `2 l& ^& X3 x! N- ?$ {( O
/* assign the tl som board LED-GPIOs*/% j! R$ \) r, v; Q
static const short da850_evm_tl_user_led_pins[] = {+ [: E$ ?2 D8 Y' E, f& O W
/* These pins are definition at <mach/mux.h> file */
4 y8 @) r8 @. r: Y0 M+ M4 X DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
* F+ m; p# o8 R' q1 u -1- `) ^3 ]0 I+ R* [1 D# F3 }4 Q$ n3 y
};
# s+ H$ i' z( S/ H! m2 c% K! {0 T) q: Z4 E& ]
static struct gpio_led da850_evm_tl_leds[] = {& r, G# T; A/ r% N
{
+ S5 Q3 a4 A) p L P. ] .active_low = 0,! z7 ]' e" g( x8 T8 z2 E
.gpio = DA850_USER_LED0,% `% J: e# o% K
.name = "user_led0",1 Z. }- o0 K, T/ J
.default_trigger = "default-on",
3 w* v/ z/ ]. E( T7 u5 S, O/ O },
6 W4 D ^8 R1 H5 o: Q2 M9 Z7 Z {/ _3 G& y3 ]4 ?# w+ g% K
.active_low = 0,# q# s" O) `! s" N
.gpio = DA850_USER_LED1,( W" f1 Z; Y8 ~/ k% Z! e
.name = "user_led1",
" c2 p5 j7 r& M& r1 G8 K .default_trigger = "default-on",: j$ E8 E- d. \# j0 z+ O# @
},
" M. ]7 K5 c( Y3 i$ r* D {
; _* m5 g. J3 H6 |2 O3 v, S5 j& }. J .active_low = 0,6 ]5 D) I1 x) n9 \5 O; `) R9 _; Q
.gpio = DA850_USER_LED2,3 L7 `1 N( q$ K f6 L% E' v
.name = "user_led2",! f, k3 j: a* x$ p8 A# _- V; G
.default_trigger = "default-on",
) C- q! S9 P5 R },( S& K3 c4 C0 _7 V- F
{; h9 ?! x9 Y0 S: w& V- ?
.active_low = 0,$ E; j- H* P* z9 z+ S3 W" u
.gpio = DA850_USER_LED3,' Z3 {0 A2 c& L. \5 @' n9 E
.name = "user_led3",
5 ~% l- F1 h0 r( n* ~; q .default_trigger = "default-on",
! W$ f/ [( H+ b& v$ H/ D' C( j% m },
" k% E8 {2 e3 q8 i, C};
! t1 c2 p" L6 N& w! m
1 o$ G7 |3 W( }7 ostatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {% T) v7 M( v+ y$ ^
.leds = da850_evm_tl_leds,
2 G5 ~' N. L' M( j5 Q .num_leds = ARRAY_SIZE(da850_evm_tl_leds),; j* Q/ p9 Z6 ]
};/ S3 @+ y4 e. F
1 G+ h5 @0 f* ^) Z2 ], T3 H( r: ]3 estatic void led_dev_release(struct device *dev)
) B% l0 J7 [( c( f' j( U- p{& S) ^: f* d1 j2 C& W: q' k& p" u. w0 \
};& S3 s' @& L1 l1 |$ x2 m
: u: \% Q* m2 S1 v8 _" |7 l& Gstatic struct platform_device da850_evm_tl_leds_device = {
$ c" R g8 `( t4 q .name = "leds-gpio",
7 g! B6 E" y# @6 Z. |* B# O .id = 1,
% d- V$ c0 j3 \8 k* h! y8 h .dev = {; h" s% q i+ S8 x% J3 U# \
.platform_data = &da850_evm_tl_leds_pdata,
- p: X/ {- n, e1 U .release = led_dev_release,
7 r: X0 H7 e R I) B( O }' m+ q; X+ m: x' ?
};, W$ ^. ]! S B0 d q8 Y( l/ |
9 T1 s+ ?! _. i" c, I5 w$ Kstatic int __init led_platform_init(void)
3 [2 x! R' f- O* F: ^4 s{6 }# D+ U% \0 B6 ^; K
int ret;+ ~5 n0 }- `% I
#if 0
# A# F' t t& y& O ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
3 E$ j( e9 H; L- c0 @: D if (ret)5 G _) {/ C/ f5 ?9 ~
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
2 E' Y7 t8 G! V% B0 \; ] "%d\n", ret);
) y3 E! G0 q* w6 }" P( o#endif
8 M" @# F3 V# u j( j ret = platform_device_register(&da850_evm_tl_leds_device);
* B; L- z) V. K( B/ } if (ret)/ ]2 g; u) g E1 |! b9 ]: s) v
pr_warning("Could not register som GPIO expander LEDS");
( E+ c: v% q E& R7 l( D( W- c; a else
' m$ z, ]' {$ t! q printk(KERN_INFO "LED register sucessful!\n");9 x/ C* g2 v( J, W5 F# w# g
3 X0 }. `* v7 K return ret;* u+ ]* l" x& |$ A4 g( m
}. ~1 H: h' \5 R- i
. a# \; a' |' Q
static void __exit led_platform_exit(void)" F+ N4 y+ ?. A8 j7 o1 U1 S
{3 D. {, \& n2 H& P0 R
platform_device_unregister(&da850_evm_tl_leds_device);
7 c* ?3 `% g7 t+ Z; c. Y+ k; [4 s# b0 U2 H
printk(KERN_INFO "LED unregister!\n");9 n% n" s( v; W; T, Y0 H
}
& G8 k. v: v/ w r0 e+ E
+ W& g3 ]+ ]7 Y# r$ p- y. smodule_init(led_platform_init);$ o( t! u7 b/ l9 h: n4 ~
module_exit(led_platform_exit);( ~0 y' W7 w/ v$ k7 A) n p
7 i# X: k# S! b& _5 y7 \4 K/ v
MODULE_DESCRIPTION("Led platform driver");
) h) g$ u" ?2 v) p1 HMODULE_AUTHOR("Tronlong");; L/ } z6 F! m4 d
MODULE_LICENSE("GPL");5 H5 B4 O u) m- z( p/ m
) {$ Q' v9 N; m5 h% T0 b' J |
|