|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
9 x$ O0 h# v6 p% r#include <linux/init.h>
, B, @3 K" p0 Q" o#include <linux/module.h>/ q3 R6 p" w6 D8 n Q9 ]
#include <linux/kernel.h>
: h0 \. k% a1 ] G* g! i! [#include <linux/types.h>
$ D/ x I, O! i T#include <linux/gpio.h>
, k2 `/ A+ G2 V. R, \#include <linux/leds.h>' I9 p, k; d# }) \8 @
#include <linux/platform_device.h>
0 ~4 s: ]9 w9 h O
* N7 J( }; i# B3 l#include <asm/mach-types.h>
4 g) w" y& R/ z- i/ V$ D: [- S n#include <asm/mach/arch.h>) M8 r7 q4 g2 }& y" b, v9 K6 K+ K% ^
#include <mach/da8xx.h>
8 `! l; C: e- j+ X+ c( K#include <mach/mux.h>- b, I. P' C+ t" E
4 e5 S [7 m& ]6 G) a1 L#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)- ^' z2 N" U8 M5 i1 ]% O7 Q# z9 @1 M
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)- B5 @; y t7 o- ^* j! A$ C
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) R, h& A3 J2 y8 m% O* g3 a, {
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ u, i, U6 m! _0 I
) U. H- L/ G2 }& _ s* |* B/* assign the tl som board LED-GPIOs*/
* q3 D+ s7 ?0 K3 N: [+ Estatic const short da850_evm_tl_user_led_pins[] = {
/ p5 F- t; ]& T) V# g /* These pins are definition at <mach/mux.h> file */, ~) w" X8 D4 F: }7 l0 g: Y
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 O7 {( k* h1 R -1
6 @ @6 O5 a2 R0 {: N};
6 o2 r2 J5 W0 K4 J5 K4 B& s* V2 u
: A+ m k/ A0 Q( C4 q1 dstatic struct gpio_led da850_evm_tl_leds[] = {
6 T S' v) L; R0 @ {2 h! M# o' N4 Z8 L' S
.active_low = 0,
' q" z' i7 l4 V7 ]" t1 l" V .gpio = DA850_USER_LED0,
: i$ T D5 L+ ?8 s1 u+ j .name = "user_led0",9 q5 B- |$ ^& B: @
.default_trigger = "default-on", z# H l8 ~% Q+ D. G4 S- S2 z
},
# e. u$ m9 Q6 V- c+ h/ m {
6 D. ^8 A* F5 S, i* I9 ^# ~1 W3 v$ U .active_low = 0,; L% o! {1 F; E
.gpio = DA850_USER_LED1,
Y& Q* B# e2 o' x! M4 A .name = "user_led1",
- }5 D7 J3 g, l: P .default_trigger = "default-on",5 A7 m1 E- S. F" G! J) w
}," A% l! {0 u% p
{' c' ~; i9 m9 j% C: ~
.active_low = 0,4 n' \( ~! k( w2 e
.gpio = DA850_USER_LED2,4 O& i4 {0 X9 {% Q' x2 b
.name = "user_led2",
% ?& x: }) |' z( U. k .default_trigger = "default-on",
6 X' ?& S% r, z },
2 y9 ?3 \( f8 U$ `& R! z( L {% J8 D2 v9 V8 a/ T( b$ b- o3 M
.active_low = 0,2 x# a" m5 n9 I( M2 w/ q2 |! M
.gpio = DA850_USER_LED3,
# C9 Z2 w, d1 ^1 e$ L0 W .name = "user_led3",
" K+ R7 q( ~0 P1 z+ j5 } .default_trigger = "default-on",% T/ H! q7 Q; o) R0 H! o7 e
},
: J+ v' a _) c5 n2 \& _# a}; K9 _/ L' `5 i2 E
* P8 q& k7 b2 ^3 j
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( f) a/ F x, a% S2 f5 C
.leds = da850_evm_tl_leds,
6 S4 v7 J. b* }3 F1 J .num_leds = ARRAY_SIZE(da850_evm_tl_leds), J( U4 I: C) d5 m( u& a4 }/ c
};( ~, q( U, F4 n8 G# [
5 E- g6 `# {$ ~$ _static void led_dev_release(struct device *dev)+ N9 J, E! r/ i& [( p" e! T* X0 N
{. _( j0 q1 `" l7 T; n4 Y
};1 Z' g6 z! w1 y1 S6 }& Z
7 W& V6 O) q$ ]. }8 z
static struct platform_device da850_evm_tl_leds_device = {1 |3 y, i5 p6 W9 i
.name = "leds-gpio",
/ l4 L) M9 Q, V3 I .id = 1,7 Y7 }% k/ K* F" N/ R
.dev = {
( ~- I* f6 t/ l .platform_data = &da850_evm_tl_leds_pdata,% c/ I- g1 |9 M
.release = led_dev_release,
( r$ G6 j0 _# ?- q, b" X, \- [ }' e) n6 u: I1 a! a
};
; ^/ J0 \7 N4 P) C$ M( c; m8 f$ F8 B8 \4 c `* ?% J
static int __init led_platform_init(void)" {; t: j3 C4 q$ F+ M7 M
{
2 m+ L# M+ c( Z! w& b1 w int ret;. d: `5 [1 S* d) U' Q
#if 0
6 l G4 s9 `2 W$ Z; D* w ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# l$ [* P7 t/ _
if (ret)' E; O8 U/ s" s
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
* D6 H( Z; X q9 o "%d\n", ret); q7 L: K; h/ [
#endif
) f: P6 S' B/ U; i ret = platform_device_register(&da850_evm_tl_leds_device);
1 {: q( G4 A; R) [ if (ret)0 {' ]9 P0 F: q L
pr_warning("Could not register som GPIO expander LEDS"); y, ~( ^* x2 v+ _, w
else
2 k* m2 Q4 f- N6 ] printk(KERN_INFO "LED register sucessful!\n");! e$ w' E. U T$ ^* `9 z, z
6 u# n7 p5 ^* A8 D return ret;( i0 |0 h# {" Q6 y' t
}) _/ t+ B$ O. j5 ?- s( o
# _+ p5 }$ {5 T0 n
static void __exit led_platform_exit(void)7 x$ Z$ s6 e5 J4 I }9 z; s
{
9 F/ P" v$ X* M+ Q8 x) ` platform_device_unregister(&da850_evm_tl_leds_device);
! ? k2 x. w( X* ` j0 m4 j* t: \
8 w" A# u* V6 _% C B printk(KERN_INFO "LED unregister!\n");: m0 j9 m U4 [7 z
}1 Q7 M9 c' t) J% i8 c
: Y; g; Z, O6 w. ?" q7 J
module_init(led_platform_init);
x3 r* ]. T/ N# s4 ?. q2 xmodule_exit(led_platform_exit);1 X- u" i# M: ?' h1 q2 ?) i
/ R1 ^# R9 j, a4 b+ N. nMODULE_DESCRIPTION("Led platform driver");
& r9 ~, H$ F! }: T* y8 X' OMODULE_AUTHOR("Tronlong");# w( `% B8 K7 V1 s: R
MODULE_LICENSE("GPL");
1 E& ?- b$ l6 o& T- u
# m' ]3 Z" Q7 B: d1 @0 T4 @' B6 | |
|