|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
4 P9 }" D3 {8 C1 w#include <linux/init.h>+ Y9 m# h- o/ V$ y2 ^1 c
#include <linux/module.h>
0 G3 C [) |8 g4 s3 g#include <linux/kernel.h>
/ K, E3 M8 D2 f3 G; T$ s+ V2 [#include <linux/types.h>
& J& n% l4 d6 T5 D8 s#include <linux/gpio.h>2 ?* b Q! I" H& ^5 X
#include <linux/leds.h>: @$ K. M3 u/ W1 {) `+ t
#include <linux/platform_device.h>: C8 q& Z8 Q& c" Y" y) X8 F* b
: ?0 e. Q* R8 h% ^
#include <asm/mach-types.h>
# T5 y% r& D2 Z, X5 A#include <asm/mach/arch.h>
1 J) f/ [2 ]6 R B3 g' G0 ^#include <mach/da8xx.h>0 i6 c! f, m8 D" t( n
#include <mach/mux.h>% O& c8 E- ]; u6 G9 P
' [" Q G/ @9 U; h% C9 }0 _#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& Q8 }' p2 R! s' ^0 F, j$ [#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
) Y0 O/ R( K+ G' l- g, j& q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& U3 o3 }- ?9 f" P3 N0 ^
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
: v: B1 t( v! [9 \5 K+ G5 d" J; }( V& O; |9 C. T$ V+ `/ H5 ?
/* assign the tl som board LED-GPIOs*/8 e8 G! Q# u3 Y( g! D C8 i
static const short da850_evm_tl_user_led_pins[] = {' U* v) {6 a- a# M
/* These pins are definition at <mach/mux.h> file */
7 W0 Z8 c, p2 ] DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
8 V7 D# k7 b4 ]& t* z3 U -1
1 B+ k- W7 v M" K9 j};
4 v! O4 K% \5 i4 o- ~
3 R; U3 N/ q- cstatic struct gpio_led da850_evm_tl_leds[] = {& c6 n( Q" @+ a$ G& q3 ]
{1 g+ P$ S: n) I2 C, k5 l- i
.active_low = 0,
0 B" A' M* J, r" g% g0 a .gpio = DA850_USER_LED0,
4 w) E5 F6 J; V# u7 ?% w* k) R L" @ .name = "user_led0",8 |$ k& k8 ^% o$ G
.default_trigger = "default-on",
1 i9 z% f4 A9 A0 n; U },5 A0 ~: s1 ^+ h/ a$ y( D
{5 n' m- o! W6 D8 ?. M" B
.active_low = 0,
- e, z* r n# ~6 B6 ?; ^) P$ t .gpio = DA850_USER_LED1,
) P5 N+ C/ z& I6 p .name = "user_led1",8 M- `$ @/ G8 P" u$ A9 I ]
.default_trigger = "default-on",1 w. G' R$ |1 Q' L0 N
},
6 F' y# y, S4 U {
; [) x7 A% X2 E3 G r; T% T3 | .active_low = 0,
" M% q5 Z# n3 R' s .gpio = DA850_USER_LED2,
; ?% h, V$ l3 }3 T' s. C( L .name = "user_led2",& n( Y F- j" w/ m
.default_trigger = "default-on",0 H2 ^, Z$ c6 ^/ _1 {* B2 R
},
3 O' N/ G) l) M- k* L# w {
! c: C- k6 q4 {9 z. q .active_low = 0,$ W/ r# B; G% `+ A ?: x
.gpio = DA850_USER_LED3," C' }+ `$ {4 K9 h" v8 z
.name = "user_led3",# ^' P" d2 }+ k( L" _
.default_trigger = "default-on",
0 P. W0 L+ {! ?, Q& \& ` },, \3 W: x3 k+ V3 ^6 h
};
6 @/ z9 }1 H& h, S) i' r+ M) [: l3 \+ {
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
* f( y; U2 f& I* V H3 p1 G .leds = da850_evm_tl_leds, ?* T# D$ L; ^1 M2 u/ x4 Z, |
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
2 \ o7 @1 r. ?, `- S};
" n) G# K% Q# a! u
& |* Y2 g, y1 estatic void led_dev_release(struct device *dev)6 n P% Z( j. w/ h* W- G
{5 S( K1 N6 T% w2 f
};
. v3 b# [' ^/ S
( X! y: \( L6 u+ {7 ]6 i# Jstatic struct platform_device da850_evm_tl_leds_device = {* b' ~; K& V# Z5 B% X! X) Z/ e
.name = "leds-gpio",. r" v% |5 e$ O y7 Z% d3 ?
.id = 1,
2 q0 E& e4 c0 j3 J/ x .dev = {
# J' w8 d8 P. ~0 R# j .platform_data = &da850_evm_tl_leds_pdata,- t& N& c8 \( ~! C+ Y
.release = led_dev_release,
. G. b# \7 V S3 x u. s }/ w1 [! V, h- O/ u0 C7 ]% \$ Z. H
};
" L) F2 u" B9 k- H+ d/ Q( G% j0 U0 L, X: v. g/ F% n
static int __init led_platform_init(void)
% O. f- O. W" g% V! u/ ]$ t{7 K- y. Q" h7 C
int ret;( N' ]4 I7 _# ~0 \7 Q0 L; z0 L
#if 0
3 v; W- d& W: z ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);* A" r5 z* A0 a! s7 w, z L
if (ret)
c6 R2 X& Q% T e- K# h pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
; y# z) W! [/ c( j, g M "%d\n", ret);4 c4 z0 O' u/ e4 m( k2 X
#endif
. d `/ h4 }7 D# k ret = platform_device_register(&da850_evm_tl_leds_device);
& C) V8 \4 o( t$ v if (ret)( y1 V4 r( j1 `$ N( q. y/ U8 h
pr_warning("Could not register som GPIO expander LEDS");
6 l7 Y' e: H; q7 j else
9 \$ W) X3 {% f% I printk(KERN_INFO "LED register sucessful!\n");. w" `# B" n/ W# R
! y/ z' x' s2 I7 s) G# t7 G8 e return ret;
( S! D' Z c! ^1 [6 x- b* ]6 }7 N* c}
& p) ^% a0 Z; B- n( F6 [& ~- u% p& u" `2 Y( {( |1 _% n
static void __exit led_platform_exit(void)
' D; u$ `$ C# H! H6 D+ Z5 \{8 a1 j0 G6 v+ |. \ q3 p
platform_device_unregister(&da850_evm_tl_leds_device);! c! b2 C W7 ~0 Q! z) l
0 ?+ r: {" N8 z; D* G I1 x0 f printk(KERN_INFO "LED unregister!\n");
\! j* K" I1 P# ~5 l}
1 J, C5 e- E" i/ r+ G" Z
: |/ h# _* D% r$ `7 A- \module_init(led_platform_init);. m% A |; Z# v. w, S
module_exit(led_platform_exit);
3 @8 H4 C' o6 w6 R; l8 f$ O3 @# h, {2 y
MODULE_DESCRIPTION("Led platform driver");' q) [7 R, S+ _9 X% m( G0 W
MODULE_AUTHOR("Tronlong");/ R% k7 C, l1 x# B
MODULE_LICENSE("GPL");
0 N. F2 H" H# e: a6 G
1 h \; N3 g" m7 v |
|