From 8b1ca083320b7de49b45508971a9fdd1908ea58b Mon Sep 17 00:00:00 2001 From: Richard Hughes Date: Tue, 12 Jan 2021 13:50:41 +0000 Subject: [PATCH] synaptics-rmi: Write bus select zero when detaching This has no effect for HID devices. --- plugins/synaptics-rmi/fu-synaptics-rmi-device.c | 9 +++++++++ plugins/synaptics-rmi/fu-synaptics-rmi-device.h | 6 ++++++ plugins/synaptics-rmi/fu-synaptics-rmi-v5-device.c | 4 ++++ 3 files changed, 19 insertions(+) diff --git a/plugins/synaptics-rmi/fu-synaptics-rmi-device.c b/plugins/synaptics-rmi/fu-synaptics-rmi-device.c index 0c27dda6b..4500f5476 100644 --- a/plugins/synaptics-rmi/fu-synaptics-rmi-device.c +++ b/plugins/synaptics-rmi/fu-synaptics-rmi-device.c @@ -171,6 +171,15 @@ fu_synaptics_rmi_device_set_page (FuSynapticsRmiDevice *self, guint8 page, GErro return TRUE; } +gboolean +fu_synaptics_rmi_device_write_bus_select (FuSynapticsRmiDevice *self, guint8 bus, GError **error) +{ + FuSynapticsRmiDeviceClass *klass_rmi = FU_SYNAPTICS_RMI_DEVICE_GET_CLASS (self); + if (klass_rmi->write_bus_select == NULL) + return TRUE; + return klass_rmi->write_bus_select (self, bus, error); +} + gboolean fu_synaptics_rmi_device_reset (FuSynapticsRmiDevice *self, GError **error) { diff --git a/plugins/synaptics-rmi/fu-synaptics-rmi-device.h b/plugins/synaptics-rmi/fu-synaptics-rmi-device.h index 0a6f05dc6..a4b5b56b8 100644 --- a/plugins/synaptics-rmi/fu-synaptics-rmi-device.h +++ b/plugins/synaptics-rmi/fu-synaptics-rmi-device.h @@ -40,6 +40,9 @@ struct _FuSynapticsRmiDeviceClass GError **error); gboolean (*disable_sleep) (FuSynapticsRmiDevice *self, GError **error); + gboolean (*write_bus_select) (FuSynapticsRmiDevice *self, + guint8 bus, + GError **error); }; typedef struct { @@ -109,3 +112,6 @@ guint16 fu_synaptics_rmi_device_get_sig_size (FuSynapticsRmiDevice *self); void fu_synaptics_rmi_device_set_max_page (FuSynapticsRmiDevice *self, guint8 max_page); guint8 fu_synaptics_rmi_device_get_max_page (FuSynapticsRmiDevice *self); +gboolean fu_synaptics_rmi_device_write_bus_select (FuSynapticsRmiDevice *self, + guint8 bus, + GError **error); diff --git a/plugins/synaptics-rmi/fu-synaptics-rmi-v5-device.c b/plugins/synaptics-rmi/fu-synaptics-rmi-v5-device.c index 04ed2d216..590d6ab37 100644 --- a/plugins/synaptics-rmi/fu-synaptics-rmi-v5-device.c +++ b/plugins/synaptics-rmi/fu-synaptics-rmi-v5-device.c @@ -44,6 +44,10 @@ fu_synaptics_rmi_v5_device_detach (FuDevice *device, GError **error) /* disable interrupts */ if (!fu_synaptics_rmi_device_disable_irqs (self, error)) return FALSE; + if (!fu_synaptics_rmi_device_write_bus_select (self, 0, error)) { + g_prefix_error (error, "failed to write bus select: "); + return FALSE; + } /* unlock bootloader and rebind kernel driver */ if (!fu_synaptics_rmi_device_write_bootloader_id (self, error))