|
|
求大神给下面的程序做注解,请稍详细些,谢谢。9 A$ `7 Z7 t* W Z5 g
#include <linux/init.h>
/ S0 ]8 k1 t" K% z$ T#include <linux/module.h>
: G. M) m$ X. B5 A- n( x+ F$ v) M#include <linux/kernel.h>
9 u% p. S+ b# x, |3 J8 P$ ~5 O/ z#include <linux/types.h>8 K0 z- _; w5 g4 W
#include <linux/gpio.h>
8 A; r' @# A3 e6 [' Q#include <linux/leds.h>
/ \9 [ P( k Z; w, {2 E) b#include <linux/platform_device.h>
) q$ y8 C( J! P, f! z5 i; i# l5 E; Y4 I( k& |4 x% ?$ k1 }; f. F/ F
#include <asm/mach-types.h>( }0 \+ M2 Z! U2 ]3 q8 S
#include <asm/mach/arch.h> F$ s; b) M- X+ j8 x
#include <mach/da8xx.h>" b7 f. }1 `% R3 ?! B1 J0 i
#include <mach/mux.h>
# ^" a% s% z& _/ ]! x" S$ M. o/ x# R8 e
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 n2 c9 Z' }0 G* ?- c$ P
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
& L1 s8 h* C3 H. u3 }1 F#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)% c3 S" i: F, F" {7 X Q( f
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
' I7 ]4 l6 S% m* K" m
2 V; `3 ~9 }. k3 l2 {/* assign the tl som board LED-GPIOs*/$ k7 _& @9 u G& C, H( U
static const short da850_evm_tl_user_led_pins[] = {& Q% V9 m* U# M8 D; F4 t0 q3 ^
/* These pins are definition at <mach/mux.h> file */
: b9 q% A5 L( G DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,* C7 G$ z0 {, ~" d7 F
-1
* S& `% _" @! w$ v Q! a2 P; j: a3 ~5 R% n};; O4 w" F% Q; [& X* }6 j ~0 j$ u0 G% T
$ ?! M9 b3 \2 P# ^& W2 y( N- Lstatic struct gpio_led da850_evm_tl_leds[] = {
9 i6 B' i7 b/ t5 u, p V; I {) f1 z \* K: a! K; q' E8 T7 C
.active_low = 0,) i$ x& r' O [" n5 }) T+ }
.gpio = DA850_USER_LED0,1 ]. |. x( \: m L6 z, ]" v4 i. S) \
.name = "user_led0",
+ o3 g9 s. k3 M, S* b* z" \ .default_trigger = "default-on",
6 v* _6 i7 k$ T. z9 h },! S' J" c# K: w; x3 Z* O3 C
{
. o+ B U. N+ |% w .active_low = 0,. c$ a" r- F/ p4 M
.gpio = DA850_USER_LED1,$ p7 w) C5 z' D4 q" Y
.name = "user_led1",
( n8 b& q- d# P- ]( J/ a, j5 G/ W* {& r .default_trigger = "default-on",7 N3 x5 U2 y% N1 p( j
},4 D8 C( g) Q* C, t1 h* e" v
{
" Q) Z/ c) T' S .active_low = 0,
7 L8 P/ [( d9 S: v .gpio = DA850_USER_LED2,7 @; s" N# x; Z3 {" Q6 p- i# E/ T! q
.name = "user_led2"," q" _: {; S; n# q* P
.default_trigger = "default-on",; R* Y" h& o* o: O. q
},4 i* W. ]& J w' X) f3 q
{
. [* \) m- S: k/ W) I4 D .active_low = 0,
1 _- v( F8 T, r& |; K .gpio = DA850_USER_LED3,
: D8 `& ^1 b$ ~( k- ?/ C/ _ .name = "user_led3",
# T x7 H. ~2 F, D .default_trigger = "default-on",; l9 w# K5 G @9 P1 X6 Q$ q
},
; o) E0 z1 T( M s0 [};) H, m D6 p$ H1 X- a3 u7 X/ W# R4 m
% J' O( }/ }8 H* f9 x; ~7 istatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {& J. r r$ {$ O4 I0 i6 E3 ` }! G
.leds = da850_evm_tl_leds," x3 e) d6 s9 f% e/ g' U. y
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
) a: X5 w: @8 E- y8 F& t% \1 a};
: j* T0 B/ X7 |* F
4 z. o/ X: D; d$ v5 c. V+ Rstatic void led_dev_release(struct device *dev)
- |& n& } L7 r{
9 ~" z" ?2 ~, l. l0 @};' A" r2 I* p$ ?$ v, W
6 C2 {8 P- }8 w" ]) I4 Y8 [
static struct platform_device da850_evm_tl_leds_device = {: G1 b; E+ e+ c; N0 Y3 Z
.name = "leds-gpio",
; P3 c- s! a* ]' [ .id = 1,
) Y4 I( b$ ?' ]0 G" \3 F" B7 Y .dev = {
9 G* \( P u, ] .platform_data = &da850_evm_tl_leds_pdata,1 R8 `# ~5 ~$ y1 ]$ l3 w0 ^, b
.release = led_dev_release,
' }7 ~+ C, j" u9 O( Z } ?% _% C: Q. }4 f' H
};
9 v! Z% _& Q* D( q2 B& }+ { J
% _: g. x4 \# x' q9 D; Qstatic int __init led_platform_init(void)( }7 c& K$ u% G, R& ~1 B. y
{
+ g$ [8 u5 p% J% {9 D int ret;
4 p2 j* l2 |! Y8 P: {#if 0! H; L# M6 \. C- j6 i; k$ G
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);! w" B$ j' c% I, Z
if (ret)$ F t3 o2 ~6 g( H6 \0 {. V% k
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 e1 N9 _7 W7 \ "%d\n", ret);
; B( u% S+ I3 {1 B2 u+ o# S7 b1 G! d#endif
* k2 H; J" B5 c. g& B ret = platform_device_register(&da850_evm_tl_leds_device);! @6 {4 P" O9 t) a7 G8 q. ?$ N# ]) n
if (ret)5 S- }& j9 W# x9 d; ~- _; X' s
pr_warning("Could not register som GPIO expander LEDS");1 p# Q, y9 O& \7 U' }! R
else
+ z# @: i4 {; f printk(KERN_INFO "LED register sucessful!\n");
5 {9 q. b8 j. f# W! ?
) c5 Q" y6 u7 ]$ ?" T( A return ret;
6 ^$ b+ A# I; r8 P) L+ h2 A}
! h Z; e' Z1 \4 g% b
$ d8 T: |+ d5 k" s) bstatic void __exit led_platform_exit(void)( }5 |8 A. B: \, h# y8 D
{5 [5 D1 K; d' B0 C& e
platform_device_unregister(&da850_evm_tl_leds_device);$ S! t$ @4 f# e! y, _' N$ y
. D/ G$ L. y- t& R3 p9 a7 d e8 { printk(KERN_INFO "LED unregister!\n");' `+ W- y* u j. M
}/ h, D4 x( L, V/ e
8 s) f7 O2 F$ n' v
module_init(led_platform_init);
- e$ r8 q5 w/ R1 L" i! H' A- Wmodule_exit(led_platform_exit); G A. {4 r! J, i& s0 x. x7 k
/ ^! w6 ~* Q2 ]5 a7 _) W+ ]& AMODULE_DESCRIPTION("Led platform driver");/ n: A. W, q9 y4 U' \( ?
MODULE_AUTHOR("Tronlong");* G6 B9 Z' k. ]) n2 b
MODULE_LICENSE("GPL");
. k& l0 v! M: Q4 q# ], [7 H& _6 V+ `! |6 }7 Z
|
|