diff --git a/plugins/synaptics-cxaudio/fu-synaptics-cxaudio-device.c b/plugins/synaptics-cxaudio/fu-synaptics-cxaudio-device.c index 51d40d778..76a8f09b7 100644 --- a/plugins/synaptics-cxaudio/fu-synaptics-cxaudio-device.c +++ b/plugins/synaptics-cxaudio/fu-synaptics-cxaudio-device.c @@ -310,39 +310,6 @@ fu_synaptics_cxaudio_device_eeprom_read_string (FuSynapticsCxaudioDevice *self, return g_steal_pointer (&str); } -static gboolean -fu_synaptics_cxaudio_device_reset (FuSynapticsCxaudioDevice *self, GError **error) -{ - guint8 tmp = 1 << 6; - g_autoptr(GError) error_local = NULL; - - /* is disabled on EVK board using jumper */ - if (!self->sw_reset_supported) { - g_set_error_literal (error, - FWUPD_ERROR, - FWUPD_ERROR_NOT_SUPPORTED, - "software reset is not supported"); - return FALSE; - } - - /* this fails on success */ - if (!fu_synaptics_cxaudio_device_operation (self, - FU_SYNAPTICS_CXAUDIO_OPERATION_WRITE, - FU_SYNAPTICS_CXAUDIO_MEM_KIND_CPX_RAM, - FU_SYNAPTICS_CXAUDIO_REG_RESET_ADDR, &tmp, sizeof(tmp), - FU_SYNAPTICS_CXAUDIO_OPERATION_FLAG_NONE, - error)) { - if (g_error_matches (error_local, - G_USB_DEVICE_ERROR, - G_USB_DEVICE_ERROR_FAILED)) { - return TRUE; - } - g_propagate_error (error, g_steal_pointer (&error_local)); - return FALSE; - } - return TRUE; -} - static gboolean fu_synaptics_cxaudio_device_ensure_patch_level (FuSynapticsCxaudioDevice *self, GError **error) { @@ -718,17 +685,44 @@ fu_synaptics_cxaudio_device_write_firmware (FuDevice *device, 7, error)) return FALSE; - /* if supported, self reset */ - if (self->sw_reset_supported) { - fu_device_set_status (device, FWUPD_STATUS_DEVICE_RESTART); - fu_device_add_flag (device, FWUPD_DEVICE_FLAG_WAIT_FOR_REPLUG); - return fu_synaptics_cxaudio_device_reset (self, error); - } - /* success */ return TRUE; } + +static gboolean +fu_synaptics_cxaudio_device_attach (FuDevice *device, GError **error) +{ + FuSynapticsCxaudioDevice *self = FU_SYNAPTICS_CXAUDIO_DEVICE (device); + guint8 tmp = 1 << 6; + g_autoptr(GError) error_local = NULL; + + /* is disabled on EVK board using jumper */ + if (!self->sw_reset_supported) + return TRUE; + + /* wait for re-enumeration */ + fu_device_set_status (device, FWUPD_STATUS_DEVICE_RESTART); + fu_device_add_flag (device, FWUPD_DEVICE_FLAG_WAIT_FOR_REPLUG); + + /* this fails on success */ + if (!fu_synaptics_cxaudio_device_operation (self, + FU_SYNAPTICS_CXAUDIO_OPERATION_WRITE, + FU_SYNAPTICS_CXAUDIO_MEM_KIND_CPX_RAM, + FU_SYNAPTICS_CXAUDIO_REG_RESET_ADDR, &tmp, sizeof(tmp), + FU_SYNAPTICS_CXAUDIO_OPERATION_FLAG_NONE, + error)) { + if (g_error_matches (error_local, + G_USB_DEVICE_ERROR, + G_USB_DEVICE_ERROR_FAILED)) { + return TRUE; + } + g_propagate_error (error, g_steal_pointer (&error_local)); + return FALSE; + } + return TRUE; +} + static gboolean fu_synaptics_cxaudio_device_set_quirk_kv (FuDevice *device, const gchar *key, @@ -779,5 +773,6 @@ fu_synaptics_cxaudio_device_class_init (FuSynapticsCxaudioDeviceClass *klass) klass_device->set_quirk_kv = fu_synaptics_cxaudio_device_set_quirk_kv; klass_device->setup = fu_synaptics_cxaudio_device_setup; klass_device->write_firmware = fu_synaptics_cxaudio_device_write_firmware; + klass_device->attach = fu_synaptics_cxaudio_device_attach; klass_device->prepare_firmware = fu_synaptics_cxaudio_device_prepare_firmware; }