yes
All checks were successful
Build kernel module / build (1:6.18.34-1+rpt1, trixie) (pull_request) Successful in 1m23s
Build kernel module / build (1:6.12.93-1+rpt1, bookworm) (pull_request) Successful in 1m24s
Build kernel module / package (pull_request) Successful in 17s
Build kernel module / release (pull_request) Has been skipped

This commit is contained in:
Christian Werner 2026-06-20 17:25:00 +02:00
parent b2e4f9710d
commit 63adefea86

View File

@ -242,7 +242,16 @@ static enum iec_rx receive_byte(u8 *out, bool *eoi, bool data_phase)
value |= (1u << i); value |= (1u << i);
} }
/* 4. BYTE ACKNOWLEDGE: pull DATA low (Tf), hold for the next RFD */ /* 4. BYTE ACKNOWLEDGE: wait for the talker to pull CLK low at end of
* byte (mirrors the reference listener), THEN pull DATA low (Tf).
* Without this wait we would assert the ack while CLK is still high
* from bit 7, racing the talker's end-of-byte edge and desyncing the
* handshake. The next receive_byte() releases DATA after CLK goes high
* again (RFD), completing the per-byte handshake. */
rc = wait_clk(true /* asserted: talker finished the byte */,
IEC_CLK_TIMEOUT_US, data_phase);
if (rc != IEC_RX_OK)
goto out;
iec_data_assert(); iec_data_assert();
*out = value; *out = value;
rc = IEC_RX_OK; rc = IEC_RX_OK;