|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
# h0 l$ X+ X- V: T& I. ?' ~4 w#include <linux/init.h>8 i* n9 [% [+ [9 T4 l
#include <linux/module.h>
/ M1 r' u2 d, v0 _5 Q) Y#include <linux/kernel.h>
7 ?0 s( k$ K: ~' {: F; p#include <linux/types.h>( W( j3 c3 `. P5 K
#include <linux/gpio.h>% C6 n& W( ]9 U/ t8 T1 }9 b9 g
#include <linux/leds.h>! ~9 d( o. P1 Y, H# } |
#include <linux/platform_device.h>
. D) d2 N0 M6 T, A! h& j( s* t( a# t0 D: u6 W" T4 r
#include <asm/mach-types.h>
! Q3 Y" ?( C: e9 G0 n/ l) [#include <asm/mach/arch.h>
~1 B- b5 \8 e' _; T#include <mach/da8xx.h>
- z/ n1 L. x' S8 `! e#include <mach/mux.h>6 J* {! }$ J5 L) X
% C! f, j# U6 P4 k+ n8 i#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)5 R% O6 J ?8 U) A$ v
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
, W" c# l! A5 S5 o$ P7 E4 W2 `#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) I) {+ j9 Z% J3 K% Y
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* ~( e& D" V4 P
+ s5 a+ Y" ^. y0 k" h. T8 X/* assign the tl som board LED-GPIOs*/ }+ r( P/ d: P( v
static const short da850_evm_tl_user_led_pins[] = {
4 J3 v, a# X* P" B8 @# s L /* These pins are definition at <mach/mux.h> file */
: d" y/ @2 t" S( W; l- Y0 P* \ DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,6 }8 Q, L, s9 V2 G3 v% X
-1
! e$ u+ }, r+ A* c" \; L};
0 Z9 p8 j. s2 g: Y, z" A$ S- ~% J, p5 g
static struct gpio_led da850_evm_tl_leds[] = {/ F; E! e, p0 B/ `* _6 C/ ]/ [. s
{
* V3 P# S# P2 Q) J$ L+ o. w- {8 m .active_low = 0,
$ ]& A' m \ Z( L# O .gpio = DA850_USER_LED0,. w9 [- \1 A3 ?# `5 t/ w
.name = "user_led0",
( U5 |( o0 J, l/ L .default_trigger = "default-on",
{3 w: o9 F+ P, E0 }8 r& e },' [) v, Z) E* ?9 z1 r
{
$ f: d9 y- C3 X% w5 F .active_low = 0,
# `4 j5 g6 |' i/ Q5 k$ }. | .gpio = DA850_USER_LED1," a' [2 [) y! t; L2 F5 d# T
.name = "user_led1",' U2 z: b4 o- {2 x0 h! R
.default_trigger = "default-on",, T, L9 d( [) o
},
0 O, P3 A9 q1 I( z {% U: A: C$ H7 v' p! q9 `; n2 |- X9 Q% ^
.active_low = 0,: i6 V, ~. A+ W+ W, r; L
.gpio = DA850_USER_LED2,
Y/ `* @2 D4 F5 X& n. a .name = "user_led2",
( V. }7 `* D: w/ a4 j+ Z, T .default_trigger = "default-on",0 Z* A# F/ H) ]/ T9 \$ g* O
},+ K# \9 U9 F2 M) M) \( w( P& T. Z5 k
{+ p8 R+ Y- j2 J0 M+ C
.active_low = 0,& ^& B4 ]; E3 @! O/ c! f( {' O* L- s
.gpio = DA850_USER_LED3,7 e3 X/ c1 i* x- |9 d* v
.name = "user_led3",
1 E1 x0 W5 B6 H" p0 t .default_trigger = "default-on",8 b L9 v+ G% q, k! |, n! e2 S5 J/ f
},
8 n" u" {* v* N, d& s};: Q! e/ S, h( N5 T, Q% v
( C2 U" V; x7 D9 {
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {( l, k. `! D4 s2 b
.leds = da850_evm_tl_leds,8 k' N/ J ^$ ^" Y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 u& v' V F/ q};
; d3 ]: q; r8 w# {* P: {; Q0 E0 r6 h
static void led_dev_release(struct device *dev)
, c, S9 }/ ~7 o: s6 }{3 C1 D% ]. T: ]5 f
};
6 e2 J! L2 _- \/ N, l' C0 P& n, a
. A8 }6 D" B2 r% M9 ]static struct platform_device da850_evm_tl_leds_device = {5 y5 [8 G* D3 k7 {8 q, \7 o
.name = "leds-gpio",
+ q" n3 \- F6 i8 d, J6 R8 G; ` .id = 1,5 s9 i u% ]4 a
.dev = {6 N( `9 Z7 T; t+ A: P
.platform_data = &da850_evm_tl_leds_pdata,
! ]# o. z+ F; B' h x) r .release = led_dev_release,
) `5 u, h" Y; V+ ? }# l' u3 w; H1 M# e. N( ^
};
" Y: a( a' F" }6 @1 i: N
. {# K1 ]! M" y a% Estatic int __init led_platform_init(void)" e4 @ Q7 v( x$ e
{
6 z1 d2 ]! j2 S: E int ret;
0 D- }: I9 y5 A#if 0
% W6 \, C0 W# ]" ]5 O ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
/ O1 H2 ]& `' Q* |4 B7 r% [ if (ret)
- C/ H% }4 y$ [! G; r6 f4 ? pr_warning("da850_evm_tl_leds_init : User LED mux failed :"* @' G+ {) s3 a/ E' s
"%d\n", ret);
# n! S5 }. j/ i( a; u; _#endif2 K* J1 x* ]% e" d! K' Q
ret = platform_device_register(&da850_evm_tl_leds_device);
# Z! v' k; {' j# t7 G$ V if (ret)
3 D# k$ X' @6 C' u3 P pr_warning("Could not register som GPIO expander LEDS");4 |* K/ i; D- G3 K: E
else! ?3 j3 R8 Q& P
printk(KERN_INFO "LED register sucessful!\n");' g7 X; y. R3 E/ A# A g
4 g+ g5 z+ ]% M return ret;
- F4 Y P+ N5 Q# N; ]}
, Q- f& [( M |/ y2 k: m
% T1 g' J- s7 U% B- N/ {3 Kstatic void __exit led_platform_exit(void)% p O, V6 k% s5 W5 X, K8 O
{
3 Y- L. H( K; C platform_device_unregister(&da850_evm_tl_leds_device);
# A9 [3 K) C3 |; V6 h+ K. Y2 s n# Z5 c' Z& F
printk(KERN_INFO "LED unregister!\n");4 Q3 D7 _3 ]3 a) }" y
}# }3 N+ q" H' p9 r; J
3 z& a. p& f; X$ @$ D
module_init(led_platform_init);7 v* _0 O6 ^% N, V
module_exit(led_platform_exit);
* }; S4 q! A) P8 U. G5 }3 \" C8 n' j9 }9 F$ V
MODULE_DESCRIPTION("Led platform driver");
- o* @3 r+ H7 r" X7 A! U0 W. TMODULE_AUTHOR("Tronlong");
9 W, W) V! K* w9 Z: UMODULE_LICENSE("GPL");: w! l+ y5 I" f/ L, z* o% O
1 g" K+ `, v. B7 Z6 n+ X+ b6 H; p
|
|