#include "qemu/osdep.h"
#include "qemu/log.h"
+#include "hw/irq.h"
#include "hw/sysbus.h"
#include "hw/input/ps2.h"
#include "migration/vmstate.h"
static void ps2_raise_irq(PS2State *s)
{
- s->update_irq(s->update_arg, 1);
+ if (qemu_irq_is_connected(s->irq)) {
+ qemu_set_irq(s->irq, 1);
+ } else {
+ s->update_irq(s->update_arg, 1);
+ }
}
static void ps2_lower_irq(PS2State *s)
{
- s->update_irq(s->update_arg, 0);
+ if (qemu_irq_is_connected(s->irq)) {
+ qemu_set_irq(s->irq, 0);
+ } else {
+ s->update_irq(s->update_arg, 0);
+ }
}
void ps2_queue(PS2State *s, int b)
.class_init = ps2_mouse_class_init
};
+static void ps2_init(Object *obj)
+{
+ PS2State *s = PS2_DEVICE(obj);
+
+ qdev_init_gpio_out(DEVICE(obj), &s->irq, 1);
+}
+
static void ps2_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
static const TypeInfo ps2_info = {
.name = TYPE_PS2_DEVICE,
.parent = TYPE_SYS_BUS_DEVICE,
+ .instance_init = ps2_init,
.instance_size = sizeof(PS2State),
.class_init = ps2_class_init,
.class_size = sizeof(PS2DeviceClass),