diff options
author | Andrew Duggan <aduggan@synaptics.com> | 2015-06-23 15:56:49 -0700 |
---|---|---|
committer | Andrew Duggan <aduggan@synaptiics.com> | 2015-06-23 16:41:31 -0700 |
commit | 1129d67c8fa6c511d5d71df8a0e288235b7e5760 (patch) | |
tree | 8542c9fab1e672114c42b4c9cdf56d5360de3c0c | |
parent | a0d74e0b84f067dc88190f78e79df968e414c72d (diff) | |
download | platform_external_rmi4utils-1129d67c8fa6c511d5d71df8a0e288235b7e5760.tar.gz platform_external_rmi4utils-1129d67c8fa6c511d5d71df8a0e288235b7e5760.tar.bz2 platform_external_rmi4utils-1129d67c8fa6c511d5d71df8a0e288235b7e5760.zip |
Reset and rebind the driver even if update fails
-rw-r--r-- | rmi4update/rmi4update.cpp | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/rmi4update/rmi4update.cpp b/rmi4update/rmi4update.cpp index ffb9445..a3a97d1 100644 --- a/rmi4update/rmi4update.cpp +++ b/rmi4update/rmi4update.cpp @@ -118,15 +118,15 @@ int RMI4Update::UpdateFirmware(bool force, bool performLockdown) rc = EnterFlashProgramming(); if (rc != UPDATE_SUCCESS) { fprintf(stderr, "%s: %s\n", __func__, update_err_to_string(rc)); - return rc; + goto reset; } if (!force && m_firmwareImage.HasIO()) { if (m_firmwareImage.GetFirmwareID() <= m_device.GetFirmwareID()) { - m_device.Reset(); fprintf(stderr, "Firmware image (%ld) is not newer then the firmware on the device (%ld)\n", m_firmwareImage.GetFirmwareID(), m_device.GetFirmwareID()); - return UPDATE_FAIL_FIRMWARE_IMAGE_IS_OLDER; + rc = UPDATE_FAIL_FIRMWARE_IMAGE_IS_OLDER; + goto reset; } } @@ -139,7 +139,7 @@ int RMI4Update::UpdateFirmware(bool force, bool performLockdown) RMI_F34_WRITE_LOCKDOWN_BLOCK); if (rc != UPDATE_SUCCESS) { fprintf(stderr, "%s: %s\n", __func__, update_err_to_string(rc)); - return rc; + goto reset; } clock_gettime(CLOCK_MONOTONIC, &end); duration_us = diff_time(&start, &end); @@ -149,7 +149,7 @@ int RMI4Update::UpdateFirmware(bool force, bool performLockdown) rc = EnterFlashProgramming(); if (rc != UPDATE_SUCCESS) { fprintf(stderr, "%s: %s\n", __func__, update_err_to_string(rc)); - return rc; + goto reset; } } @@ -157,7 +157,7 @@ int RMI4Update::UpdateFirmware(bool force, bool performLockdown) rc = WriteBootloaderID(); if (rc != UPDATE_SUCCESS) { fprintf(stderr, "%s: %s\n", __func__, update_err_to_string(rc)); - return rc; + goto reset; } fprintf(stdout, "Erasing FW...\n"); @@ -165,13 +165,14 @@ int RMI4Update::UpdateFirmware(bool force, bool performLockdown) rc = m_device.Write(m_f34StatusAddr, &eraseAll, 1); if (rc < 0) { fprintf(stderr, "%s: %s\n", __func__, update_err_to_string(UPDATE_FAIL_ERASE_ALL)); - return UPDATE_FAIL_ERASE_ALL; + rc = UPDATE_FAIL_ERASE_ALL; + goto reset; } rc = WaitForIdle(RMI_F34_ERASE_WAIT_MS); if (rc != UPDATE_SUCCESS) { fprintf(stderr, "%s: %s\n", __func__, update_err_to_string(rc)); - return rc; + goto reset; } clock_gettime(CLOCK_MONOTONIC, &end); duration_us = diff_time(&start, &end); @@ -184,7 +185,7 @@ int RMI4Update::UpdateFirmware(bool force, bool performLockdown) RMI_F34_WRITE_FW_BLOCK); if (rc != UPDATE_SUCCESS) { fprintf(stderr, "%s: %s\n", __func__, update_err_to_string(rc)); - return rc; + goto reset; } clock_gettime(CLOCK_MONOTONIC, &end); duration_us = diff_time(&start, &end); @@ -198,16 +199,17 @@ int RMI4Update::UpdateFirmware(bool force, bool performLockdown) RMI_F34_WRITE_CONFIG_BLOCK); if (rc != UPDATE_SUCCESS) { fprintf(stderr, "%s: %s\n", __func__, update_err_to_string(rc)); - return rc; + goto reset; } clock_gettime(CLOCK_MONOTONIC, &end); duration_us = diff_time(&start, &end); fprintf(stdout, "Done writing config, time: %lld us.\n", duration_us); } + +reset: m_device.Reset(); m_device.RebindDriver(); - - return UPDATE_SUCCESS; + return rc; } @@ -504,4 +506,4 @@ int RMI4Update::WaitForIdle(int timeout_ms) fprintf(stderr, "Idle: %d\n", !m_f34Command && !m_f34Status); return UPDATE_FAIL_NOT_IN_IDLE_STATE; -}
\ No newline at end of file +} |