- switch (ack) {
- case SWD_ACK_OK:
- if (cmd & SWD_CMD_APNDP)
- bitbang_swd_exchange(true, NULL, 0, ap_delay_clk);
- return;
- case SWD_ACK_WAIT:
- LOG_DEBUG("SWD_ACK_WAIT");
- swd_clear_sticky_errors();
- break;
- case SWD_ACK_FAULT:
- LOG_DEBUG("SWD_ACK_FAULT");
- queued_retval = ack;
- return;
- default:
- LOG_DEBUG("No valid acknowledge: ack=%d", ack);
- queued_retval = ack;
- return;
+ if (check_ack) {
+ if (ack == SWD_ACK_WAIT) {
+ swd_clear_sticky_errors();
+ continue;
+ } else if (ack != SWD_ACK_OK) {
+ queued_retval = swd_ack_to_error_code(ack);
+ return;
+ }