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:
parent
5e803297f7
commit
3d5de8920b
1 changed files with 7 additions and 5 deletions
|
@ -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 */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue