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;
int err = 0;
if ((SPI_STAT(cfg->reg) & SPI_GD32_ERR_MASK) != 0) {
err = spi_gd32_get_err(cfg);
} else {
if (err) {
spi_gd32_complete(dev, err);
return;
}
if (spi_gd32_transfer_ongoing(data)) {
err = spi_gd32_frame_exchange(dev);
}
if (err || !spi_gd32_transfer_ongoing(data)) {
spi_gd32_complete(dev, err);
}
SPI_STAT(cfg->reg) = 0;
}
#endif /* SPI_GD32_INTERRUPT */