drivers: spi: gd32 fix a transceive error

There have an extral TBE interrupt event though we have cleared the
SPI_CTL1_TBEIE bit. To cover this situation, add a on_going check
before enter exchange function.

Signed-off-by: HaiLong Yang <hailong.yang@brainco.cn>
This commit is contained in:
HaiLong Yang 2023-04-04 22:28:04 +08:00 committed by Fabio Baltieri
commit 3d5de8920b

View file

@ -471,17 +471,19 @@ static void spi_gd32_isr(struct device *dev)
struct spi_gd32_data *data = dev->data; struct spi_gd32_data *data = dev->data;
int err = 0; int err = 0;
if ((SPI_STAT(cfg->reg) & SPI_GD32_ERR_MASK) != 0) { err = spi_gd32_get_err(cfg);
err = spi_gd32_get_err(cfg); if (err) {
} else { spi_gd32_complete(dev, err);
return;
}
if (spi_gd32_transfer_ongoing(data)) {
err = spi_gd32_frame_exchange(dev); err = spi_gd32_frame_exchange(dev);
} }
if (err || !spi_gd32_transfer_ongoing(data)) { if (err || !spi_gd32_transfer_ongoing(data)) {
spi_gd32_complete(dev, err); spi_gd32_complete(dev, err);
} }
SPI_STAT(cfg->reg) = 0;
} }
#endif /* SPI_GD32_INTERRUPT */ #endif /* SPI_GD32_INTERRUPT */