synaptics-rmi: Write bus select zero when detaching

This has no effect for HID devices.
This commit is contained in:
Richard Hughes 2021-01-12 13:50:41 +00:00
parent ff82d005d7
commit 8b1ca08332
3 changed files with 19 additions and 0 deletions

View File

@ -171,6 +171,15 @@ fu_synaptics_rmi_device_set_page (FuSynapticsRmiDevice *self, guint8 page, GErro
return TRUE; 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 gboolean
fu_synaptics_rmi_device_reset (FuSynapticsRmiDevice *self, GError **error) fu_synaptics_rmi_device_reset (FuSynapticsRmiDevice *self, GError **error)
{ {

View File

@ -40,6 +40,9 @@ struct _FuSynapticsRmiDeviceClass
GError **error); GError **error);
gboolean (*disable_sleep) (FuSynapticsRmiDevice *self, gboolean (*disable_sleep) (FuSynapticsRmiDevice *self,
GError **error); GError **error);
gboolean (*write_bus_select) (FuSynapticsRmiDevice *self,
guint8 bus,
GError **error);
}; };
typedef struct { 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, void fu_synaptics_rmi_device_set_max_page (FuSynapticsRmiDevice *self,
guint8 max_page); guint8 max_page);
guint8 fu_synaptics_rmi_device_get_max_page (FuSynapticsRmiDevice *self); guint8 fu_synaptics_rmi_device_get_max_page (FuSynapticsRmiDevice *self);
gboolean fu_synaptics_rmi_device_write_bus_select (FuSynapticsRmiDevice *self,
guint8 bus,
GError **error);

View File

@ -44,6 +44,10 @@ fu_synaptics_rmi_v5_device_detach (FuDevice *device, GError **error)
/* disable interrupts */ /* disable interrupts */
if (!fu_synaptics_rmi_device_disable_irqs (self, error)) if (!fu_synaptics_rmi_device_disable_irqs (self, error))
return FALSE; 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 */ /* unlock bootloader and rebind kernel driver */
if (!fu_synaptics_rmi_device_write_bootloader_id (self, error)) if (!fu_synaptics_rmi_device_write_bootloader_id (self, error))