|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
; F. a# D& f' H9 R1 i#include <linux/init.h>
! L7 \* f/ K) u) u( o! A#include <linux/module.h>
0 ~" H8 O5 Z3 D4 c, R/ Z/ E- e#include <linux/kernel.h>2 k2 s9 k) r" V" {
#include <linux/types.h> `9 ?# B, m2 [7 ` v4 R+ {$ s3 R
#include <linux/gpio.h>
; l, z( h! L* U#include <linux/leds.h>( A* b$ h, T' q" Z) T( ^/ U1 j
#include <linux/platform_device.h>5 R) E1 P6 ^! h3 ^' Q
9 r! p! V- @/ l' O
#include <asm/mach-types.h>1 k, }+ W9 P! G+ v
#include <asm/mach/arch.h>
5 v1 R( k3 s0 z) |#include <mach/da8xx.h>
0 N0 |9 g/ w( M3 G4 I#include <mach/mux.h>
* ?; G& g% B' V) m! l. q8 i( h; O: `$ `, `' N
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; Y1 @; g/ p) ]7 ~#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)+ C a1 \6 F' _4 ?
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)# @$ }. ^* z5 K4 }+ y- U- P7 k
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)+ p, _! x+ K3 i. Z" i# P( c0 C
# X j( ]2 O3 m+ c8 ~& ?
/* assign the tl som board LED-GPIOs*/! k+ n+ r. V: S3 Z$ G! J9 J0 i
static const short da850_evm_tl_user_led_pins[] = {
& }. M. v* I% T- i: p /* These pins are definition at <mach/mux.h> file */8 `; ] g- V5 u
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ t1 B' ^* s E. O -1* D( I- q% N m- e# d- Z
};* I, E* n5 p; M w! V
* g2 c0 W. o9 y/ Y+ Bstatic struct gpio_led da850_evm_tl_leds[] = {7 H$ |; n0 b. B* l! \
{
/ l9 \' m. i- p1 T3 s1 B .active_low = 0,
# T, F: ?- p6 v .gpio = DA850_USER_LED0,8 l* v/ ]- I; i2 A( ]2 X
.name = "user_led0",3 F& g4 L$ B+ ~0 i1 t
.default_trigger = "default-on", f+ Z8 d% m8 y# f, ~
},1 X6 h* x3 e& G- M& V
{
2 Z, o0 v- t+ o& N, p* O: b .active_low = 0,
, E6 j% \4 b- a( J .gpio = DA850_USER_LED1,
1 g, O% N8 d% W" G) X .name = "user_led1",
! n9 \# D- ^, d" l8 G# ^ .default_trigger = "default-on", a6 @& R6 d: z
},
5 X [ m' [8 J( X r! z; L {
, \2 i! \( K* S- Q& f .active_low = 0,
9 j* | A o; r: e# l .gpio = DA850_USER_LED2,2 ?4 u& z. G0 w
.name = "user_led2",
! a$ [" `8 p: U .default_trigger = "default-on",1 g& O/ x( K* Q" J" E
},6 A. `: C4 Z. P, [4 G
{% A4 @2 B% M/ j( w0 D
.active_low = 0,4 F6 i0 R* L7 I" ?' Q* v
.gpio = DA850_USER_LED3,
7 V6 y! D* z. U# y3 M; W .name = "user_led3",
5 N0 m3 i7 ]! Q b) ^ .default_trigger = "default-on",4 i6 }5 @* F/ j5 }* S6 v
},
+ D4 d. A! k/ r};, B* ^ _2 [% u2 C8 K
4 t! n* P# Y0 r- a: O. g
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {) \5 M0 u. v$ U4 p. D% [
.leds = da850_evm_tl_leds,7 q" b# G( W6 z2 N1 c4 I9 Z
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),( n$ H$ V: f5 }8 M7 G% v' W# `% Q
};
6 a( p% U! s) j1 \
; f+ h G4 {0 s2 |static void led_dev_release(struct device *dev)
3 G* U0 J; y4 G! O ^6 e{
; i% R) t- U. J" P};( p$ c- n9 ]* I4 C2 K9 N
( |" m. u% A+ j- A' o5 Ostatic struct platform_device da850_evm_tl_leds_device = {0 k8 a- t L) n+ Z8 Z: v
.name = "leds-gpio",
' N! s( ?6 V0 y# L9 G .id = 1,& w) K _# ~7 s {* u
.dev = {4 x8 @) w T9 {7 E1 x
.platform_data = &da850_evm_tl_leds_pdata,
0 t. h% |/ y- q1 ?0 V0 y .release = led_dev_release,
7 c# v0 T( r/ T9 l' I" J# ^ }' o" b: \" ^0 Z) V
};
l) ~0 v4 x8 P! ]: o' i$ ~; a! ~ s3 ?8 L, \
static int __init led_platform_init(void)
* J% ~+ ~% j/ x( H$ ?{
u$ a* s! D1 ^$ U int ret;+ _$ N+ b$ }: h* ]
#if 0
, Y- a _+ |' ?. D7 O ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);9 b4 p# k: Z% S+ v' r( g4 W
if (ret)
2 l N; S6 I* ^; F pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
4 e5 x/ m/ K% y h3 S6 M+ _5 V "%d\n", ret);4 u H& i$ E( k$ |& h
#endif
4 c P; w6 Q/ R- h( S) q" e ret = platform_device_register(&da850_evm_tl_leds_device);/ Z# t. V* y. K1 Z
if (ret)+ j1 k; ~ Q; p
pr_warning("Could not register som GPIO expander LEDS");" o* A# r0 t! k+ h1 x, ?
else. }" @1 C# V v# z
printk(KERN_INFO "LED register sucessful!\n");
9 s, u' d8 R+ S, K, P+ D& V- p
M' l3 q b* N# Y% i6 w, i' t return ret;2 T# [9 B4 g# `8 x7 G* Y* Y
}" R9 O' n6 x; W8 o) N( y
& x* k7 ` I( e: g T! Istatic void __exit led_platform_exit(void)# Z% J/ C& d$ V( `6 g
{6 F4 F0 z2 d8 `
platform_device_unregister(&da850_evm_tl_leds_device);5 ?$ y- k) F$ \. k) w x
0 f) J# S7 c# ?4 g8 W5 T4 L
printk(KERN_INFO "LED unregister!\n");$ Y( E. m- H1 z7 b% `, p5 a0 A
}
5 _# |: u( A2 P u1 x7 k5 Z) J. u- K% G; r! a2 b
module_init(led_platform_init);. Y5 O* ~1 s/ e4 c7 f2 r) F
module_exit(led_platform_exit);2 O+ S6 Y( s* N* O) W d
9 F& K* H/ e9 S5 ~, E4 J9 K0 z, C7 SMODULE_DESCRIPTION("Led platform driver");* L3 H# n8 Z% F2 \' [( B
MODULE_AUTHOR("Tronlong");
Q/ k" Q5 ]* o/ x% NMODULE_LICENSE("GPL");
& ~" t3 F/ g* @; _- }0 n( H1 H) z0 Y$ G C
|
|