adb: add property to disable direct reg 3 writes
MacOS 9 has a bug in its PMU driver whereby after configuring the ADB bus devices it sends another write to reg 3 on both devices resetting them both back to the same address. Add a new disable_direct_reg3_writes property to ADBDevice to disable these direct writes which can enabled just for the upcoming pmu-adb support. Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
fb6649f172
commit
84051eb400
@ -261,18 +261,21 @@ static int adb_kbd_request(ADBDevice *d, uint8_t *obuf,
|
||||
trace_adb_kbd_request_change_addr(d->devaddr);
|
||||
break;
|
||||
default:
|
||||
d->devaddr = buf[1] & 0xf;
|
||||
/* we support handlers:
|
||||
* 1: Apple Standard Keyboard
|
||||
* 2: Apple Extended Keyboard (LShift = RShift)
|
||||
* 3: Apple Extended Keyboard (LShift != RShift)
|
||||
*/
|
||||
if (buf[2] == 1 || buf[2] == 2 || buf[2] == 3) {
|
||||
d->handler = buf[2];
|
||||
}
|
||||
if (!d->disable_direct_reg3_writes) {
|
||||
d->devaddr = buf[1] & 0xf;
|
||||
|
||||
trace_adb_kbd_request_change_addr_and_handler(d->devaddr,
|
||||
d->handler);
|
||||
/* we support handlers:
|
||||
* 1: Apple Standard Keyboard
|
||||
* 2: Apple Extended Keyboard (LShift = RShift)
|
||||
* 3: Apple Extended Keyboard (LShift != RShift)
|
||||
*/
|
||||
if (buf[2] == 1 || buf[2] == 2 || buf[2] == 3) {
|
||||
d->handler = buf[2];
|
||||
}
|
||||
|
||||
trace_adb_kbd_request_change_addr_and_handler(d->devaddr,
|
||||
d->handler);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -142,24 +142,27 @@ static int adb_mouse_request(ADBDevice *d, uint8_t *obuf,
|
||||
trace_adb_mouse_request_change_addr(d->devaddr);
|
||||
break;
|
||||
default:
|
||||
d->devaddr = buf[1] & 0xf;
|
||||
/* we support handlers:
|
||||
* 0x01: Classic Apple Mouse Protocol / 100 cpi operations
|
||||
* 0x02: Classic Apple Mouse Protocol / 200 cpi operations
|
||||
* we don't support handlers (at least):
|
||||
* 0x03: Mouse systems A3 trackball
|
||||
* 0x04: Extended Apple Mouse Protocol
|
||||
* 0x2f: Microspeed mouse
|
||||
* 0x42: Macally
|
||||
* 0x5f: Microspeed mouse
|
||||
* 0x66: Microspeed mouse
|
||||
*/
|
||||
if (buf[2] == 1 || buf[2] == 2) {
|
||||
d->handler = buf[2];
|
||||
}
|
||||
if (!d->disable_direct_reg3_writes) {
|
||||
d->devaddr = buf[1] & 0xf;
|
||||
|
||||
trace_adb_mouse_request_change_addr_and_handler(d->devaddr,
|
||||
d->handler);
|
||||
/* we support handlers:
|
||||
* 0x01: Classic Apple Mouse Protocol / 100 cpi operations
|
||||
* 0x02: Classic Apple Mouse Protocol / 200 cpi operations
|
||||
* we don't support handlers (at least):
|
||||
* 0x03: Mouse systems A3 trackball
|
||||
* 0x04: Extended Apple Mouse Protocol
|
||||
* 0x2f: Microspeed mouse
|
||||
* 0x42: Macally
|
||||
* 0x5f: Microspeed mouse
|
||||
* 0x66: Microspeed mouse
|
||||
*/
|
||||
if (buf[2] == 1 || buf[2] == 2) {
|
||||
d->handler = buf[2];
|
||||
}
|
||||
|
||||
trace_adb_mouse_request_change_addr_and_handler(
|
||||
d->devaddr, d->handler);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -113,11 +113,18 @@ static void adb_device_realizefn(DeviceState *dev, Error **errp)
|
||||
bus->devices[bus->nb_devices++] = d;
|
||||
}
|
||||
|
||||
static Property adb_device_properties[] = {
|
||||
DEFINE_PROP_BOOL("disable-direct-reg3-writes", ADBDevice,
|
||||
disable_direct_reg3_writes, false),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
};
|
||||
|
||||
static void adb_device_class_init(ObjectClass *oc, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(oc);
|
||||
|
||||
dc->realize = adb_device_realizefn;
|
||||
dc->props = adb_device_properties;
|
||||
dc->bus_type = TYPE_ADB_BUS;
|
||||
}
|
||||
|
||||
|
@ -49,6 +49,7 @@ struct ADBDevice {
|
||||
|
||||
int devaddr;
|
||||
int handler;
|
||||
bool disable_direct_reg3_writes;
|
||||
};
|
||||
|
||||
#define ADB_DEVICE_CLASS(cls) \
|
||||
|
Loading…
Reference in New Issue
Block a user