Merge pull request #4036 from Fredrik-Reinholdsen/main

fix: Fix for #3888 async I2C read bug for introduced in #3887
This commit is contained in:
Dario Nieuwenhuis 2025-04-01 20:55:27 +00:00 committed by GitHub
commit 3bc809eb3e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -617,9 +617,10 @@ impl<'d> I2c<'d, Async> {
restart,
timeout,
)?;
} else if remaining_len == 0 {
return Poll::Ready(Ok(()));
} else if !(isr.tcr() || isr.tc()) {
if total_len <= 255 {
return Poll::Ready(Ok(()));
}
} else if isr.tcr() {
// poll_fn was woken without an interrupt present
return Poll::Pending;
} else {
@ -628,6 +629,11 @@ impl<'d> I2c<'d, Async> {
if let Err(e) = Self::master_continue(self.info, remaining_len.min(255), !last_piece, timeout) {
return Poll::Ready(Err(e));
}
// Return here if we are on last chunk,
// end of transfer will be awaited with the DMA below
if last_piece {
return Poll::Ready(Ok(()));
}
self.info.regs.cr1().modify(|w| w.set_tcie(true));
}