|
|
求大神给下面的程序做注解,请稍详细些,谢谢。" F" A2 o+ D5 ?. i! L% z0 m
#include <linux/init.h>
3 W* o( s4 q/ n3 N8 q( x f0 A& \1 q7 x#include <linux/module.h>
0 m9 v4 e5 J' p2 c#include <linux/kernel.h>8 V4 t& z7 X: j2 N9 x) y
#include <linux/types.h>& ~, X \* m U l- v
#include <linux/gpio.h>
; P3 y0 E& i/ x/ m. p0 z#include <linux/leds.h>* e# e4 j7 @" }' m5 O3 R
#include <linux/platform_device.h>
; M3 d, T2 ?+ z* L b
) B. J+ h8 {- W, o! o#include <asm/mach-types.h>
. G5 S$ D- s, k" z& u$ ?#include <asm/mach/arch.h>
/ o4 f- H1 k; P#include <mach/da8xx.h>
. W$ P$ q. K6 g- Q7 h+ J#include <mach/mux.h>4 f: m9 S$ q8 T- F0 I* V* t
! Q5 U+ D2 ? [, E- @' |#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)0 }- V5 _6 t7 b+ ^
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
- D" {7 r. T6 n7 M#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ N2 V, b ]7 f+ P' X1 I/ }
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
% x$ X9 D4 m) [/ I0 y1 v( _, `0 I: b0 Y3 T, U0 ?1 {- d# m {" [
/* assign the tl som board LED-GPIOs*/6 e2 ?$ S9 s+ c
static const short da850_evm_tl_user_led_pins[] = {
" r$ n4 e$ N- |$ W /* These pins are definition at <mach/mux.h> file */' s& Y$ F% M2 ]5 s
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,( P" P) H+ p7 h7 s) p
-1) L, y+ c4 w% `: F$ a w
};
: |3 w1 h8 s2 U7 B5 k3 C, d7 n6 E% s7 y" k; O+ h# s' R
static struct gpio_led da850_evm_tl_leds[] = {% Z6 n& _' T7 g& p0 s
{
6 O7 ~* W/ {4 ^* _4 g6 ?+ Q7 P& K; k .active_low = 0,
0 `- k6 n4 K6 z7 h% Y .gpio = DA850_USER_LED0,
5 D, Q/ u% Y/ R- X& }$ ^ .name = "user_led0"," ]& N7 P- {) G: b/ j9 A
.default_trigger = "default-on",
W$ e- ~8 C4 i3 Y/ B },4 P" a" l8 J% P% S# z( t
{. S/ g$ M1 C. c$ V
.active_low = 0,% `% w ~% @+ i" \* W* o" \
.gpio = DA850_USER_LED1,
4 \) ^% m/ l. B6 u& u$ v) n* ^ .name = "user_led1",9 W& E- V% t* e; J0 |( }4 T3 V7 g
.default_trigger = "default-on",' i$ \6 z( C/ I* o5 Y3 j1 c
},% P6 Z& H; C" ?* U! u K
{
& q! L8 X" {9 P# Z4 |6 F" p .active_low = 0,' @4 f) |& ^! Y$ k& i& S6 ~7 ~
.gpio = DA850_USER_LED2,9 H; \4 |+ ~3 b# X6 X7 m' p2 f0 p- o
.name = "user_led2",9 J, z* F$ b! ]7 ~ X3 Y0 `* U4 ]
.default_trigger = "default-on",5 @& F2 Z: W& r# a3 c
},
% l! O0 \6 n2 @+ E$ B/ ~ k" X6 B { w4 {$ q6 e# a6 `# v' Q
.active_low = 0,
7 l. B9 K# \( O5 l2 | .gpio = DA850_USER_LED3,; ]) W' q# T* J3 j6 H+ Y/ v
.name = "user_led3",
# G( Z' F/ b* X7 j s .default_trigger = "default-on"," e- ]& b6 c$ r. |$ T! C2 @
},
( c; R! U# e3 ]/ V& h$ L3 P};
. B0 _) W$ o" z& O& E/ T7 C9 g5 e& m/ c$ g6 e% ]# i0 k
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
: y( j* ]3 w3 k% a. L$ O .leds = da850_evm_tl_leds,
, ]. @- H3 l( c" C .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
& i( ~3 e6 u) p& x};
6 I7 _% u. [0 f) @) L4 L! j+ C
+ ]7 N. r% [. s5 n6 i$ S- V: Zstatic void led_dev_release(struct device *dev); V/ h, k+ o/ {
{6 B" t+ i+ C$ s
};$ O* i# H2 L; X8 [7 g' x
( D% Q* m9 t. E/ w) wstatic struct platform_device da850_evm_tl_leds_device = {
2 j% e9 I0 Q9 z" |0 r2 k* } .name = "leds-gpio",5 Y" i/ _; S' l; k0 Q* n- N
.id = 1,
8 U3 W! m( _* `' Q9 F .dev = {
& t P! ]/ f2 s% x1 v .platform_data = &da850_evm_tl_leds_pdata,/ l' C4 S$ _6 _8 [% |) L6 o* }/ g
.release = led_dev_release,9 i& j8 Y2 D7 f; {
}; s9 j2 J J4 Z% ~
};
2 l' D B8 b- r0 t* N% e/ X- r, e9 U7 B8 o k& Z
static int __init led_platform_init(void)
7 Q& C d; |4 o/ }3 ?{& O( t) c1 n6 L5 G% \5 s
int ret;8 F5 A" _, r \) o) ~% W# P
#if 0
X R: s5 I& [! v ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
( Y6 K, t6 V- k8 n if (ret)
' d! G; ^# Q6 ]8 D+ C pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
- N, t' L3 P: { "%d\n", ret);
% }* [3 u1 l" M. [- J#endif
6 V$ n# v9 n b1 G" r+ c ret = platform_device_register(&da850_evm_tl_leds_device);
- C9 A/ c( L, ]' y" R% ?+ p if (ret)1 q6 p2 Z7 F# F
pr_warning("Could not register som GPIO expander LEDS");
5 }+ |1 a- h2 l) W& d# x3 k' ]: ] else
- P7 x. p$ i8 m8 {2 F( C printk(KERN_INFO "LED register sucessful!\n");& }$ [7 \ C) v* a @7 u/ M
3 o b3 N. N! o' I+ E3 I, `7 c return ret;0 L# H( Q) n1 |/ v G* r# \
}; X2 l% ~! y& Q3 e4 E- T/ a+ T3 z
; Y: b2 x& ?3 \, {$ H
static void __exit led_platform_exit(void)
% T3 j/ Q& C( K% ~) \{0 Q6 y$ }" ~) o, y
platform_device_unregister(&da850_evm_tl_leds_device);& B; H9 E1 N. n7 J$ `
0 G1 Y5 g2 L& |9 r3 D
printk(KERN_INFO "LED unregister!\n");! O3 d% P4 p G$ S
}
& D+ `- ^; h9 |3 U
& a t0 f" h3 }2 z- M8 {/ Cmodule_init(led_platform_init);7 D( I9 G1 ^; ? @7 ~- Y
module_exit(led_platform_exit);
+ e+ W1 }9 a, ?
% g y8 A$ s( T0 H* EMODULE_DESCRIPTION("Led platform driver");
9 s% s! S/ `# [% ~- S* Y' w+ WMODULE_AUTHOR("Tronlong");1 a3 z2 V/ @3 U( O# B' D* x/ I
MODULE_LICENSE("GPL");
# Q+ [" A( u" H
/ |' `# ?$ i2 a2 y |
|