diff --git a/plugins/ebitdo/ebitdo.quirk b/plugins/ebitdo/ebitdo.quirk index fb1981c36..c31bae778 100644 --- a/plugins/ebitdo/ebitdo.quirk +++ b/plugins/ebitdo/ebitdo.quirk @@ -8,7 +8,7 @@ Flags = is-bootloader InstallDuration = 120 [DeviceInstanceId=USB\VID_0483&PID_5760] Plugin = ebitdo -Flags = is-bootloader +Flags = is-bootloader,will-disappear InstallDuration = 120 # FC30 diff --git a/plugins/ebitdo/fu-ebitdo-device.c b/plugins/ebitdo/fu-ebitdo-device.c index 4fd789ffc..e7900df37 100644 --- a/plugins/ebitdo/fu-ebitdo-device.c +++ b/plugins/ebitdo/fu-ebitdo-device.c @@ -362,6 +362,7 @@ fu_ebitdo_device_write_firmware (FuDevice *device, guint32 payload_len; guint32 serial_new[3]; g_autoptr(GBytes) fw = NULL; + g_autoptr(GError) error_local = NULL; const guint32 app_key_index[16] = { 0x186976e5, 0xcac67acd, 0x38f27fee, 0x0a4948f1, 0xb75b7753, 0x1f8ffa5c, 0xbff8cf43, 0xc4936167, @@ -524,8 +525,14 @@ fu_ebitdo_device_write_firmware (FuDevice *device, g_prefix_error (error, "failed to mark firmware as successful: "); return FALSE; } - if (!fu_ebitdo_device_receive (self, NULL, 0, error)) { - g_prefix_error (error, "failed to get ACK for mark firmware as successful: "); + if (!fu_ebitdo_device_receive (self, NULL, 0, &error_local)) { + g_prefix_error (&error_local, "failed to get ACK for mark firmware as successful: "); + if (fu_device_has_flag (device, FWUPD_DEVICE_FLAG_WILL_DISAPPEAR)) { + fu_device_set_remove_delay (device, 0); + g_debug ("%s", error_local->message); + return TRUE; + } + g_propagate_error (error, g_steal_pointer (&error_local)); return FALSE; }