|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
# X; r$ i4 }7 D4 y2 o( B- l#include <linux/init.h>
& l, B9 h9 l7 E( a7 B' ]#include <linux/module.h>
- c2 q1 t, U, [4 I. w' N/ Q#include <linux/kernel.h>
/ y' e/ _( j5 S5 `% {8 Q#include <linux/types.h>2 H+ h: [0 e& S2 c: A
#include <linux/gpio.h>) F) v; K- s/ W4 t( A+ c. z% C
#include <linux/leds.h>
% E3 x. w0 S; B* `2 o#include <linux/platform_device.h>
$ n3 y. O9 L: t* P
$ @% L# y1 S( d. s& U1 H' l#include <asm/mach-types.h>% y) J5 r; K, g3 r: Q
#include <asm/mach/arch.h>' {; s- p% W3 c5 M
#include <mach/da8xx.h>1 w9 t: D) R( n3 \
#include <mach/mux.h>" ~( r/ p+ H% Z% e
9 B5 y+ T @, ]* @! g- j#define DA850_USER_LED0 GPIO_TO_PIN(0, 0); `2 P z5 r- W4 }& u0 B
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ L U' f* ^# M' v, x3 a
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)* _7 m' v2 D/ H# u5 c' f
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ b( t% t# n4 W* d, V7 O
# V! f+ j9 V0 @9 Q C+ X& m/* assign the tl som board LED-GPIOs*/8 x* B0 o/ [8 S; C
static const short da850_evm_tl_user_led_pins[] = {3 n1 f) [* a0 k; c" M7 l+ o6 C
/* These pins are definition at <mach/mux.h> file */ k2 {; t9 E" A4 H( S
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ J& ?4 g* v" s -13 I( Q) P; E9 {* n
};1 @- g) X: V6 Z1 |6 D2 z
7 H* P5 J. ^: Z. ~+ a5 F; x
static struct gpio_led da850_evm_tl_leds[] = {
4 l2 P2 u$ U" C g {3 `8 C' j; ]0 d! u. }
.active_low = 0,
B0 [1 ^! X6 B .gpio = DA850_USER_LED0,: l- ?2 _! P E
.name = "user_led0",
/ C$ `2 C3 x- M7 X .default_trigger = "default-on",
+ m5 S3 a, U" E* b1 _ },/ {. ~- F: {: F7 `) t1 r, A: K
{
: i' ?$ ?5 p+ e: o .active_low = 0,$ J* \+ S6 j% l& y R
.gpio = DA850_USER_LED1,0 p; m" Z1 K( X; p9 V7 F
.name = "user_led1",; P% `/ x' B9 R2 F
.default_trigger = "default-on",! j* m8 \1 S! p
}, V4 u4 n$ i! n
{
1 p. N0 A& k( _ .active_low = 0,
. f6 ~1 A) Z- \3 M .gpio = DA850_USER_LED2,/ B; Q& U3 [7 M. _9 h- F
.name = "user_led2",2 |# |3 J3 t4 i8 e `9 a" w- {
.default_trigger = "default-on",' H6 U v: r' H5 ^% C) H
},
$ ]3 _+ u" Y! h. K5 ~2 S# A {
# n9 [/ Y7 P7 n1 D" n. e; Y .active_low = 0,5 k T0 I" \) I% e- \* J/ W
.gpio = DA850_USER_LED3,
( J1 D* O8 W1 O .name = "user_led3",$ d3 D" ^9 {; d
.default_trigger = "default-on",
2 j& b' G3 i) n$ ?3 f- Y. U }, v. d4 [( n1 n0 [ i, {$ X
};
& }% V1 Q6 ]7 f" e; C; ]' o
. a4 _. e% `1 I" \) A* Rstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
0 l, H: [. [( n .leds = da850_evm_tl_leds,% ?+ d8 k( o+ n
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
- U* Q6 O( D0 L# k# Y$ l};! P# L3 J& j/ {# y- s: o
* |# K) R+ l) d, B# X% wstatic void led_dev_release(struct device *dev)4 [, D' E4 ?2 V* N
{
6 l: B3 b& `6 C, E% |};
" |- F4 ?$ u, h
) l" L1 q5 W3 d7 ~0 ?static struct platform_device da850_evm_tl_leds_device = {" t' | k0 Y" z5 b! l
.name = "leds-gpio",8 p' e6 @2 J0 P4 `0 N( @% G- k% ~
.id = 1,+ {$ S& I" z8 C, U/ l6 O
.dev = {9 f/ r6 K2 [+ K+ U4 F
.platform_data = &da850_evm_tl_leds_pdata,
' B7 O8 ?; {7 _, z+ t. w1 m- Z+ V .release = led_dev_release,; x+ D6 T1 {9 @/ r1 t
}
1 K8 |* f0 t7 ]% c};
9 ?# H7 F' w0 c6 l% N8 V; r W2 r" \% F5 B
static int __init led_platform_init(void)
! |) B. V4 w3 u9 [ {{4 q- d1 i2 ] \+ A3 I9 F8 V
int ret;
; M1 {8 V4 i% S$ g#if 0" |5 ~( c9 \, O, g' j2 k" Q; D
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
% r, J `' ]0 \5 a if (ret)0 n u2 q; V. x4 g
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
3 V8 x' [5 }' i/ h9 Z "%d\n", ret);
9 p9 u* d: B# `' {- W* M#endif
4 n4 k4 q8 ^9 W: K, R* Y ret = platform_device_register(&da850_evm_tl_leds_device);
! Y, O0 L/ @* v' I if (ret)
. v3 |7 j+ m7 m* r2 o7 o5 O pr_warning("Could not register som GPIO expander LEDS");
( u" l" Z1 Z3 U else
1 `3 X0 C$ R% A9 J$ _ printk(KERN_INFO "LED register sucessful!\n");5 \( g+ O0 T. r
8 n6 `7 N2 S' p. z5 E+ j return ret;: f* ^7 }$ r/ j+ O3 c$ u
}
- |# @" F+ Q0 H, n% W% ^
2 s- U3 k; B. X& U1 v4 A7 }static void __exit led_platform_exit(void)
: b) e9 f6 s G7 V1 [3 x8 d' b: q- ]{ G- Q8 M9 V7 Q# U0 U, Y- C
platform_device_unregister(&da850_evm_tl_leds_device);2 w% y5 i+ P6 |& v8 P( d3 o
2 C4 J2 F3 Y ?' X
printk(KERN_INFO "LED unregister!\n");, ?, J+ O2 U7 ^5 E. v
}1 V W" l4 f* l1 c; n
5 l7 r1 k' [* p, R6 Y( O
module_init(led_platform_init);# T2 g( N, }7 o; ]0 g. O
module_exit(led_platform_exit);
. T) G7 k% R) Q: v
" |- z7 e4 M9 _MODULE_DESCRIPTION("Led platform driver");
: K0 D1 L3 z2 k& ~7 p$ S. xMODULE_AUTHOR("Tronlong");- B! Q( o0 O- z9 l
MODULE_LICENSE("GPL");/ V7 z7 a) C$ q4 H/ P6 E
1 E7 Y6 h3 F- _6 U. t: {
|
|