|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
& T, F& l G8 ~3 ]#include <linux/init.h>) b3 L' t( A9 e& {" k0 y9 P7 J
#include <linux/module.h>
7 s4 x' X; \3 W# x5 |" a#include <linux/kernel.h>
n4 C' K9 ?& f: `+ y( n#include <linux/types.h>- ]) s9 o) y; \* C. B D% A7 s: l
#include <linux/gpio.h>
- Z6 P4 J& X. ]8 H#include <linux/leds.h>
* j) h- r- R& n3 F) y" I$ f4 W#include <linux/platform_device.h>
' V/ O% Z3 z0 k( X& C( i
! L; F$ C' N8 ?$ X' [#include <asm/mach-types.h>
3 a: s/ b9 m* x" J; V4 L- x#include <asm/mach/arch.h>$ ]( n3 `& R" D* A% o& j
#include <mach/da8xx.h>2 Z& H! ^5 W" w6 E. K
#include <mach/mux.h>
9 @6 P% {- [5 F' p* z4 C1 j7 c
; _& N8 k2 t# {# \6 ]1 q5 u#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
# x5 K# a0 _4 p# C7 D#define DA850_USER_LED1 GPIO_TO_PIN(0, 5), P! [* o- g+ X! |6 N
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1): S1 K' F# p# o9 s
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)/ Y0 S, k9 p6 w3 _& u! x# T
7 d! n. L1 [- s! t& z& s3 B
/* assign the tl som board LED-GPIOs*/; r) E5 R( k4 c; }9 p/ y
static const short da850_evm_tl_user_led_pins[] = {) R- _. e) N, J! t# c. f: @" v
/* These pins are definition at <mach/mux.h> file */7 ?! o; n6 T+ I) U9 Q; a1 g
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
2 u) r; R9 `* {9 M -1
( W) `/ z: ]+ Q# i# [9 F! E: f, b7 P};2 a k$ U4 n- v. r/ G! r
8 I, Y0 _6 ^; k( [. \; F
static struct gpio_led da850_evm_tl_leds[] = {
0 m/ M. [' Y/ A2 B* n2 T {% Y, x" N# Z! T1 ]6 U. ]
.active_low = 0,
, I$ A, u$ N8 a3 M) z .gpio = DA850_USER_LED0,) T( W% B0 C: c0 N+ j7 V- }
.name = "user_led0",9 w& E7 a. }+ H. I; u, I! T
.default_trigger = "default-on",7 _, U( O6 [) y0 s8 u/ b1 d
},% |2 A: I0 @% ?3 [
{
2 D V- o+ ~3 l" |# A( l, }5 y .active_low = 0,! t) n1 T* g4 y+ D$ R' h3 l
.gpio = DA850_USER_LED1,
3 n" s. ~: J. E. F .name = "user_led1",
, L. _% t, d, i6 z .default_trigger = "default-on",
$ ~* l d9 N' v0 J },6 ` r; H1 O1 e
{& S- l, l( o! s- m
.active_low = 0,: y7 W& I# u% t) T9 A. r
.gpio = DA850_USER_LED2,
& t. e/ k2 f6 O4 e+ K6 ` .name = "user_led2",% |* ?4 }: x- z2 V8 z) t) }
.default_trigger = "default-on",( M$ E b: V7 S) H) G2 n
},
0 t. z5 R- \! {& @6 M; Z5 \' Q {! U) C/ _" s1 R0 r, H
.active_low = 0,
. i3 m3 @$ y9 D, u% [+ Y .gpio = DA850_USER_LED3,
0 K' E2 h. e/ i6 ]& n6 @9 } .name = "user_led3"," x9 I2 g3 Q+ E- |' z. t
.default_trigger = "default-on",) E" O2 y% A" j" u
},
5 \, H1 x& M! B' ^4 y/ j};9 g# W3 i: f {2 ]
$ ?+ _2 U Z6 H, O: K
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
$ b: Q" B! ^5 Z0 J8 `7 e, a .leds = da850_evm_tl_leds,3 M9 v5 T! s# o7 S
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),- w- g4 ^1 k7 w( q. | O
};6 M1 p* V& J' l' {) }) e. I) L
* y3 d( l5 X. d# f6 [static void led_dev_release(struct device *dev)
5 C+ `+ A5 l2 s! }* U, Q{. z, ~- }' u, g" r3 n
};
8 J8 U( B {' c d/ J1 i/ A+ G. X" r K7 K
static struct platform_device da850_evm_tl_leds_device = {
2 Q: s, F4 q3 f! q- \6 L& w .name = "leds-gpio",* E/ }1 \/ V8 j
.id = 1,8 `: ` [* e& {# J
.dev = {
: q6 }' }9 N, a5 g+ c" P6 T .platform_data = &da850_evm_tl_leds_pdata,
/ Y. }/ l! y# m .release = led_dev_release,/ g# I8 F7 t" v- x
}* k+ y" E+ I9 y1 o0 B% j) ]
};8 S+ q7 F4 Z4 H# C: x
. ~ a& T$ m' K7 W; I. ]
static int __init led_platform_init(void)
( K0 J6 U9 X5 H/ v5 `* P{
& D4 |, `* j& D int ret;% x* m+ R7 q8 s, Q+ p( w. P
#if 0
9 Q1 l, j3 l! V" ]! Y5 t6 G, V ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);# O: r% C# V5 \( U3 {
if (ret)
9 f4 c; v& W5 j$ Y( T5 ]% | pr_warning("da850_evm_tl_leds_init : User LED mux failed :"2 b0 j4 {6 T' u1 J8 F4 `
"%d\n", ret);6 G9 q3 }* N9 M' `: J9 |3 \. w9 m
#endif
" }# w- Q! z" z ret = platform_device_register(&da850_evm_tl_leds_device);
* T F! z* H# q7 ` if (ret)
, J, i6 F6 a+ B$ R pr_warning("Could not register som GPIO expander LEDS");
! x) S I* y, T else7 R. M5 O. L4 o" z, U6 A
printk(KERN_INFO "LED register sucessful!\n");
: o, z5 p% J0 O& n! E, ~( Q6 B4 H S
return ret;: O" g" f8 A1 d9 E; ?+ H) y
}3 X# w P8 I' `% o+ Z% q3 K
# U; Z, c4 x0 T! B# l# X" l& D ~static void __exit led_platform_exit(void)
+ \3 @- l, w7 |/ _{5 u4 ^7 X7 A7 m* f* ^4 i! J
platform_device_unregister(&da850_evm_tl_leds_device);
" ^/ B' p2 V ~5 J$ ?3 B
$ c9 P' E, @. B9 g/ \& E& u printk(KERN_INFO "LED unregister!\n");
9 Y; G% Q* |6 c1 |2 r/ i8 Z}& y' W! R0 i# F! x
6 o8 j7 Z& M7 v) J
module_init(led_platform_init);
( v/ l$ \- E6 _7 umodule_exit(led_platform_exit);; o2 H) Y- T6 O1 `/ T0 i
1 y8 g% P) Q$ e: mMODULE_DESCRIPTION("Led platform driver"); H2 i. A2 W f A \. {) L) Q& q
MODULE_AUTHOR("Tronlong");
9 t8 R# |5 V s+ x% VMODULE_LICENSE("GPL");
0 Q$ k' n! Y- X3 m/ v
1 |! u9 H5 m8 a% O1 Q: H9 h1 M I |
|