Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
4d74063e
Commit
4d74063e
authored
Apr 20, 2003
by
Andrew Morton
Committed by
Linus Torvalds
Apr 20, 2003
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] irqs: input drivers
Update the input and joystick drivers to the new IRQ API.
parent
2efd7260
Changes
19
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
110 additions
and
71 deletions
+110
-71
drivers/input/joystick/iforce/iforce-serio.c
drivers/input/joystick/iforce/iforce-serio.c
+15
-15
drivers/input/joystick/magellan.c
drivers/input/joystick/magellan.c
+4
-2
drivers/input/joystick/spaceball.c
drivers/input/joystick/spaceball.c
+6
-4
drivers/input/joystick/spaceorb.c
drivers/input/joystick/spaceorb.c
+3
-1
drivers/input/joystick/stinger.c
drivers/input/joystick/stinger.c
+3
-2
drivers/input/joystick/warrior.c
drivers/input/joystick/warrior.c
+3
-1
drivers/input/keyboard/atkbd.c
drivers/input/keyboard/atkbd.c
+15
-11
drivers/input/keyboard/newtonkbd.c
drivers/input/keyboard/newtonkbd.c
+3
-1
drivers/input/keyboard/sunkbd.c
drivers/input/keyboard/sunkbd.c
+9
-6
drivers/input/keyboard/xtkbd.c
drivers/input/keyboard/xtkbd.c
+5
-3
drivers/input/mouse/inport.c
drivers/input/mouse/inport.c
+3
-2
drivers/input/mouse/logibm.c
drivers/input/mouse/logibm.c
+3
-2
drivers/input/mouse/pc110pad.c
drivers/input/mouse/pc110pad.c
+2
-1
drivers/input/mouse/psmouse.c
drivers/input/mouse/psmouse.c
+9
-6
drivers/input/mouse/sermouse.c
drivers/input/mouse/sermouse.c
+3
-1
drivers/input/serio/ct82c710.c
drivers/input/serio/ct82c710.c
+3
-3
drivers/input/serio/serio.c
drivers/input/serio/serio.c
+13
-6
drivers/input/touchscreen/gunze.c
drivers/input/touchscreen/gunze.c
+4
-2
include/linux/serio.h
include/linux/serio.h
+4
-2
No files found.
drivers/input/joystick/iforce/iforce-serio.c
View file @
4d74063e
...
...
@@ -78,40 +78,38 @@ static void iforce_serio_write_wakeup(struct serio *serio)
iforce_serial_xmit
((
struct
iforce
*
)
serio
->
private
);
}
static
void
iforce_serio_irq
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
static
irqreturn_t
iforce_serio_irq
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
{
struct
iforce
*
iforce
=
serio
->
private
;
if
(
!
iforce
->
pkt
)
{
if
(
data
!=
0x2b
)
{
return
;
}
iforce
->
pkt
=
1
;
return
;
if
(
data
==
0x2b
)
iforce
->
pkt
=
1
;
goto
out
;
}
if
(
!
iforce
->
id
)
{
if
(
data
>
3
&&
data
!=
0xff
)
{
if
(
data
>
3
&&
data
!=
0xff
)
iforce
->
pkt
=
0
;
return
;
}
iforce
->
id
=
data
;
return
;
else
iforce
->
id
=
data
;
goto
out
;
}
if
(
!
iforce
->
len
)
{
if
(
data
>
IFORCE_MAX_LENGTH
)
{
iforce
->
pkt
=
0
;
iforce
->
id
=
0
;
return
;
}
else
{
iforce
->
len
=
data
;
}
iforce
->
len
=
data
;
return
;
goto
out
;
}
if
(
iforce
->
idx
<
iforce
->
len
)
{
iforce
->
csum
+=
iforce
->
data
[
iforce
->
idx
++
]
=
data
;
return
;
goto
out
;
}
if
(
iforce
->
idx
==
iforce
->
len
)
{
...
...
@@ -122,6 +120,8 @@ static void iforce_serio_irq(struct serio *serio, unsigned char data, unsigned i
iforce
->
idx
=
0
;
iforce
->
csum
=
0
;
}
out:
return
IRQ_HANDLED
;
}
static
void
iforce_serio_connect
(
struct
serio
*
serio
,
struct
serio_dev
*
dev
)
...
...
drivers/input/joystick/magellan.c
View file @
4d74063e
...
...
@@ -113,7 +113,8 @@ static void magellan_process_packet(struct magellan* magellan, struct pt_regs *r
input_sync
(
dev
);
}
static
void
magellan_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
static
irqreturn_t
magellan_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
{
struct
magellan
*
magellan
=
serio
->
private
;
...
...
@@ -123,7 +124,8 @@ static void magellan_interrupt(struct serio *serio, unsigned char data, unsigned
}
else
{
if
(
magellan
->
idx
<
MAGELLAN_MAX_LENGTH
)
magellan
->
data
[
magellan
->
idx
++
]
=
data
;
}
}
return
IRQ_HANDLED
;
}
/*
...
...
drivers/input/joystick/spaceball.c
View file @
4d74063e
...
...
@@ -149,7 +149,8 @@ static void spaceball_process_packet(struct spaceball* spaceball, struct pt_regs
* can occur in the axis values.
*/
static
void
spaceball_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
static
irqreturn_t
spaceball_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
{
struct
spaceball
*
spaceball
=
serio
->
private
;
...
...
@@ -158,11 +159,11 @@ static void spaceball_interrupt(struct serio *serio, unsigned char data, unsigne
spaceball_process_packet
(
spaceball
,
regs
);
spaceball
->
idx
=
0
;
spaceball
->
escape
=
0
;
return
;
break
;
case
'^'
:
if
(
!
spaceball
->
escape
)
{
spaceball
->
escape
=
1
;
return
;
break
;
}
spaceball
->
escape
=
0
;
case
'M'
:
...
...
@@ -177,8 +178,9 @@ static void spaceball_interrupt(struct serio *serio, unsigned char data, unsigne
spaceball
->
escape
=
0
;
if
(
spaceball
->
idx
<
SPACEBALL_MAX_LENGTH
)
spaceball
->
data
[
spaceball
->
idx
++
]
=
data
;
return
;
break
;
}
return
IRQ_HANDLED
;
}
/*
...
...
drivers/input/joystick/spaceorb.c
View file @
4d74063e
...
...
@@ -130,7 +130,8 @@ static void spaceorb_process_packet(struct spaceorb *spaceorb, struct pt_regs *r
input_sync
(
dev
);
}
static
void
spaceorb_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
static
irqreturn_t
spaceorb_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
{
struct
spaceorb
*
spaceorb
=
serio
->
private
;
...
...
@@ -140,6 +141,7 @@ static void spaceorb_interrupt(struct serio *serio, unsigned char data, unsigned
}
if
(
spaceorb
->
idx
<
SPACEORB_MAX_LENGTH
)
spaceorb
->
data
[
spaceorb
->
idx
++
]
=
data
&
0x7f
;
return
IRQ_HANDLED
;
}
/*
...
...
drivers/input/joystick/stinger.c
View file @
4d74063e
...
...
@@ -98,7 +98,8 @@ static void stinger_process_packet(struct stinger *stinger, struct pt_regs *regs
* packet processing routine.
*/
static
void
stinger_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
static
irqreturn_t
stinger_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
{
struct
stinger
*
stinger
=
serio
->
private
;
...
...
@@ -112,7 +113,7 @@ static void stinger_interrupt(struct serio *serio, unsigned char data, unsigned
stinger
->
idx
=
0
;
}
return
;
return
IRQ_HANDLED
;
}
/*
...
...
drivers/input/joystick/warrior.c
View file @
4d74063e
...
...
@@ -99,7 +99,8 @@ static void warrior_process_packet(struct warrior *warrior, struct pt_regs *regs
* packet processing routine.
*/
static
void
warrior_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
static
irqreturn_t
warrior_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
{
struct
warrior
*
warrior
=
serio
->
private
;
...
...
@@ -117,6 +118,7 @@ static void warrior_interrupt(struct serio *serio, unsigned char data, unsigned
warrior
->
idx
=
0
;
warrior
->
len
=
0
;
}
return
IRQ_HANDLED
;
}
/*
...
...
drivers/input/keyboard/atkbd.c
View file @
4d74063e
...
...
@@ -132,7 +132,8 @@ struct atkbd {
* the keyboard into events.
*/
static
void
atkbd_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
static
irqreturn_t
atkbd_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
{
struct
atkbd
*
atkbd
=
serio
->
private
;
int
code
=
data
;
...
...
@@ -145,7 +146,7 @@ static void atkbd_interrupt(struct serio *serio, unsigned char data, unsigned in
printk
(
"atkbd.c: frame/parity error: %02x
\n
"
,
flags
);
serio_write
(
serio
,
ATKBD_CMD_RESEND
);
atkbd
->
resend
=
1
;
return
;
goto
out
;
}
if
(
!
flags
)
...
...
@@ -154,34 +155,35 @@ static void atkbd_interrupt(struct serio *serio, unsigned char data, unsigned in
switch
(
code
)
{
case
ATKBD_RET_ACK
:
atkbd
->
ack
=
1
;
return
;
goto
out
;
case
ATKBD_RET_NAK
:
atkbd
->
ack
=
-
1
;
return
;
goto
out
;
}
if
(
atkbd
->
cmdcnt
)
{
atkbd
->
cmdbuf
[
--
atkbd
->
cmdcnt
]
=
code
;
return
;
goto
out
;
}
switch
(
atkbd
->
keycode
[
code
])
{
case
ATKBD_KEY_BAT
:
serio_rescan
(
atkbd
->
serio
);
return
;
goto
out
;
case
ATKBD_KEY_EMUL0
:
atkbd
->
emul
=
1
;
return
;
goto
out
;
case
ATKBD_KEY_EMUL1
:
atkbd
->
emul
=
2
;
return
;
goto
out
;
case
ATKBD_KEY_RELEASE
:
atkbd
->
release
=
1
;
return
;
goto
out
;
}
if
(
atkbd
->
emul
)
{
if
(
--
atkbd
->
emul
)
return
;
if
(
--
atkbd
->
emul
)
goto
out
;
code
|=
0x100
;
}
...
...
@@ -197,8 +199,10 @@ static void atkbd_interrupt(struct serio *serio, unsigned char data, unsigned in
input_report_key
(
&
atkbd
->
dev
,
atkbd
->
keycode
[
code
],
!
atkbd
->
release
);
input_sync
(
&
atkbd
->
dev
);
}
atkbd
->
release
=
0
;
out:
return
IRQ_HANDLED
;
}
/*
...
...
drivers/input/keyboard/newtonkbd.c
View file @
4d74063e
...
...
@@ -62,7 +62,8 @@ struct nkbd {
char
phys
[
32
];
};
void
nkbd_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
irqreturn_t
nkbd_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
{
struct
nkbd
*
nkbd
=
serio
->
private
;
...
...
@@ -75,6 +76,7 @@ void nkbd_interrupt(struct serio *serio, unsigned char data, unsigned int flags,
else
if
(
data
==
0xe7
)
/* end of init sequence */
printk
(
KERN_INFO
"input: %s on %s
\n
"
,
nkbd_name
,
serio
->
phys
);
return
IRQ_HANDLED
;
}
...
...
drivers/input/keyboard/sunkbd.c
View file @
4d74063e
...
...
@@ -89,18 +89,19 @@ struct sunkbd {
* is received.
*/
static
void
sunkbd_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
static
irqreturn_t
sunkbd_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
{
struct
sunkbd
*
sunkbd
=
serio
->
private
;
if
(
sunkbd
->
reset
<=
-
1
)
{
/* If cp[i] is 0xff, sunkbd->reset will stay -1. */
sunkbd
->
reset
=
data
;
/* The keyboard sends 0xff 0xff 0xID on powerup */
return
;
goto
out
;
}
if
(
sunkbd
->
layout
==
-
1
)
{
sunkbd
->
layout
=
data
;
return
;
goto
out
;
}
switch
(
data
)
{
...
...
@@ -108,14 +109,14 @@ static void sunkbd_interrupt(struct serio *serio, unsigned char data, unsigned i
case
SUNKBD_RET_RESET
:
schedule_work
(
&
sunkbd
->
tq
);
sunkbd
->
reset
=
-
1
;
return
;
break
;
case
SUNKBD_RET_LAYOUT
:
sunkbd
->
layout
=
-
1
;
return
;
break
;
case
SUNKBD_RET_ALLUP
:
/* All keys released */
return
;
break
;
default:
if
(
sunkbd
->
keycode
[
data
&
SUNKBD_KEY
])
{
...
...
@@ -127,6 +128,8 @@ static void sunkbd_interrupt(struct serio *serio, unsigned char data, unsigned i
data
&
SUNKBD_KEY
,
data
&
SUNKBD_RELEASE
?
"released"
:
"pressed"
);
}
}
out:
return
IRQ_HANDLED
;
}
/*
...
...
drivers/input/keyboard/xtkbd.c
View file @
4d74063e
...
...
@@ -63,14 +63,15 @@ struct xtkbd {
char
phys
[
32
];
};
void
xtkbd_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
irqreturn_t
xtkbd_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
{
struct
xtkbd
*
xtkbd
=
serio
->
private
;
switch
(
data
)
{
case
XTKBD_EMUL0
:
case
XTKBD_EMUL1
:
return
;
break
;
default:
if
(
xtkbd
->
keycode
[
data
&
XTKBD_KEY
])
{
...
...
@@ -81,7 +82,8 @@ void xtkbd_interrupt(struct serio *serio, unsigned char data, unsigned int flags
printk
(
KERN_WARNING
"xtkbd.c: Unknown key (scancode %#x) %s.
\n
"
,
data
&
XTKBD_KEY
,
data
&
XTKBD_RELEASE
?
"released"
:
"pressed"
);
}
}
}
return
IRQ_HANDLED
;
}
void
xtkbd_connect
(
struct
serio
*
serio
,
struct
serio_dev
*
dev
)
...
...
drivers/input/mouse/inport.c
View file @
4d74063e
...
...
@@ -85,7 +85,7 @@ MODULE_PARM(inport_irq, "i");
static
int
inport_irq
=
INPORT_IRQ
;
static
int
inport_used
=
0
;
static
void
inport_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
);
static
irqreturn_t
inport_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
);
static
int
inport_open
(
struct
input_dev
*
dev
)
{
...
...
@@ -124,7 +124,7 @@ static struct input_dev inport_dev = {
},
};
static
void
inport_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
static
irqreturn_t
inport_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
unsigned
char
buttons
;
...
...
@@ -150,6 +150,7 @@ static void inport_interrupt(int irq, void *dev_id, struct pt_regs *regs)
outb
(
INPORT_MODE_IRQ
|
INPORT_MODE_BASE
,
INPORT_DATA_PORT
);
input_sync
(
&
inport_dev
);
return
IRQ_HANDLED
;
}
#ifndef MODULE
...
...
drivers/input/mouse/logibm.c
View file @
4d74063e
...
...
@@ -75,7 +75,7 @@ MODULE_PARM(logibm_irq, "i");
static
int
logibm_irq
=
LOGIBM_IRQ
;
static
int
logibm_used
=
0
;
static
void
logibm_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
);
static
irqreturn_t
logibm_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
);
static
int
logibm_open
(
struct
input_dev
*
dev
)
{
...
...
@@ -114,7 +114,7 @@ static struct input_dev logibm_dev = {
},
};
static
void
logibm_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
static
irqreturn_t
logibm_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
char
dx
,
dy
;
unsigned
char
buttons
;
...
...
@@ -139,6 +139,7 @@ static void logibm_interrupt(int irq, void *dev_id, struct pt_regs *regs)
input_sync
(
&
logibm_dev
);
outb
(
LOGIBM_ENABLE_IRQ
,
LOGIBM_CONTROL_PORT
);
return
IRQ_HANDLED
;
}
#ifndef MODULE
...
...
drivers/input/mouse/pc110pad.c
View file @
4d74063e
...
...
@@ -60,7 +60,7 @@ static int pc110pad_used;
static
char
*
pc110pad_name
=
"IBM PC110 TouchPad"
;
static
char
*
pc110pad_phys
=
"isa15e0/input0"
;
static
void
pc110pad_interrupt
(
int
irq
,
void
*
ptr
,
struct
pt_regs
*
regs
)
static
irqreturn_t
pc110pad_interrupt
(
int
irq
,
void
*
ptr
,
struct
pt_regs
*
regs
)
{
int
value
=
inb_p
(
pc110pad_io
);
int
handshake
=
inb_p
(
pc110pad_io
+
2
);
...
...
@@ -83,6 +83,7 @@ static void pc110pad_interrupt(int irq, void *ptr, struct pt_regs *regs)
input_sync
(
&
pc110pad_dev
);
pc110pad_count
=
0
;
return
IRQ_HANDLED
;
}
static
void
pc110pad_close
(
struct
input_dev
*
dev
)
...
...
drivers/input/mouse/psmouse.c
View file @
4d74063e
...
...
@@ -167,7 +167,8 @@ static void psmouse_process_packet(struct psmouse *psmouse, struct pt_regs *regs
* packets or passing them to the command routine as command output.
*/
static
void
psmouse_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
static
irqreturn_t
psmouse_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
{
struct
psmouse
*
psmouse
=
serio
->
private
;
...
...
@@ -186,12 +187,12 @@ static void psmouse_interrupt(struct serio *serio, unsigned char data, unsigned
break
;
}
psmouse
->
acking
=
0
;
return
;
goto
out
;
}
if
(
psmouse
->
cmdcnt
)
{
psmouse
->
cmdbuf
[
--
psmouse
->
cmdcnt
]
=
data
;
return
;
goto
out
;
}
if
(
psmouse
->
pktcnt
&&
time_after
(
jiffies
,
psmouse
->
last
+
HZ
/
2
))
{
...
...
@@ -205,13 +206,15 @@ static void psmouse_interrupt(struct serio *serio, unsigned char data, unsigned
if
(
psmouse
->
pktcnt
==
3
+
(
psmouse
->
type
>=
PSMOUSE_GENPS
))
{
psmouse_process_packet
(
psmouse
,
regs
);
psmouse
->
pktcnt
=
0
;
return
;
goto
out
;
}
if
(
psmouse
->
pktcnt
==
1
&&
psmouse
->
packet
[
0
]
==
PSMOUSE_RET_BAT
)
{
serio_rescan
(
serio
);
return
;
}
goto
out
;
}
out:
return
IRQ_HANDLED
;
}
/*
...
...
drivers/input/mouse/sermouse.c
View file @
4d74063e
...
...
@@ -204,7 +204,8 @@ static void sermouse_process_ms(struct sermouse *sermouse, signed char data, str
* packets or passing them to the command routine as command output.
*/
static
void
sermouse_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
static
irqreturn_t
sermouse_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
{
struct
sermouse
*
sermouse
=
serio
->
private
;
...
...
@@ -215,6 +216,7 @@ static void sermouse_interrupt(struct serio *serio, unsigned char data, unsigned
sermouse_process_ms
(
sermouse
,
data
,
regs
);
else
sermouse_process_msc
(
sermouse
,
data
,
regs
);
return
IRQ_HANDLED
;
}
/*
...
...
drivers/input/serio/ct82c710.c
View file @
4d74063e
...
...
@@ -64,7 +64,7 @@ static char ct82c710_phys[16];
static
int
ct82c710_data
;
static
int
ct82c710_status
;
static
void
ct82c710_interrupt
(
int
cpl
,
void
*
dev_id
,
struct
pt_regs
*
regs
);
static
irqreturn_t
ct82c710_interrupt
(
int
cpl
,
void
*
dev_id
,
struct
pt_regs
*
regs
);
/*
* Wait for device to send output char and flush any input char.
...
...
@@ -154,9 +154,9 @@ static struct serio ct82c710_port =
* is waiting in the 82C710.
*/
static
void
ct82c710_interrupt
(
int
cpl
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
static
irqreturn_t
ct82c710_interrupt
(
int
cpl
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
serio_interrupt
(
&
ct82c710_port
,
inb
(
ct82c710_data
),
0
,
regs
);
return
serio_interrupt
(
&
ct82c710_port
,
inb
(
ct82c710_data
),
0
,
regs
);
}
/*
...
...
drivers/input/serio/serio.c
View file @
4d74063e
...
...
@@ -135,13 +135,20 @@ void serio_rescan(struct serio *serio)
wake_up
(
&
serio_wait
);
}
void
serio_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
{
if
(
serio
->
dev
&&
serio
->
dev
->
interrupt
)
serio
->
dev
->
interrupt
(
serio
,
data
,
flags
,
regs
);
else
if
(
!
flags
)
irqreturn_t
serio_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
{
irqreturn_t
ret
=
IRQ_NONE
;
if
(
serio
->
dev
&&
serio
->
dev
->
interrupt
)
{
ret
=
serio
->
dev
->
interrupt
(
serio
,
data
,
flags
,
regs
);
}
else
{
if
(
!
flags
)
{
serio_rescan
(
serio
);
ret
=
IRQ_HANDLED
;
}
}
return
ret
;
}
void
serio_register_port
(
struct
serio
*
serio
)
...
...
drivers/input/touchscreen/gunze.c
View file @
4d74063e
...
...
@@ -78,7 +78,8 @@ static void gunze_process_packet(struct gunze* gunze, struct pt_regs *regs)
input_sync
(
dev
);
}
static
void
gunze_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
static
irqreturn_t
gunze_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
)
{
struct
gunze
*
gunze
=
serio
->
private
;
...
...
@@ -88,7 +89,8 @@ static void gunze_interrupt(struct serio *serio, unsigned char data, unsigned in
}
else
{
if
(
gunze
->
idx
<
GUNZE_MAX_LENGTH
)
gunze
->
data
[
gunze
->
idx
++
]
=
data
;
}
}
return
IRQ_HANDLED
;
}
/*
...
...
include/linux/serio.h
View file @
4d74063e
...
...
@@ -10,6 +10,7 @@
*/
#include <linux/ioctl.h>
#include <linux/interrupt.h>
#define SPIOCSTYPE _IOW('q', 0x01, unsigned long)
...
...
@@ -50,7 +51,8 @@ struct serio_dev {
char
*
name
;
void
(
*
write_wakeup
)(
struct
serio
*
);
void
(
*
interrupt
)(
struct
serio
*
,
unsigned
char
,
unsigned
int
,
struct
pt_regs
*
);
irqreturn_t
(
*
interrupt
)(
struct
serio
*
,
unsigned
char
,
unsigned
int
,
struct
pt_regs
*
);
void
(
*
connect
)(
struct
serio
*
,
struct
serio_dev
*
dev
);
void
(
*
disconnect
)(
struct
serio
*
);
void
(
*
cleanup
)(
struct
serio
*
);
...
...
@@ -61,7 +63,7 @@ struct serio_dev {
int
serio_open
(
struct
serio
*
serio
,
struct
serio_dev
*
dev
);
void
serio_close
(
struct
serio
*
serio
);
void
serio_rescan
(
struct
serio
*
serio
);
void
serio_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
);
irqreturn_t
serio_interrupt
(
struct
serio
*
serio
,
unsigned
char
data
,
unsigned
int
flags
,
struct
pt_regs
*
regs
);
void
serio_register_port
(
struct
serio
*
serio
);
void
serio_unregister_port
(
struct
serio
*
serio
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment