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;
|
||||
int err = 0;
|
||||
|
||||
if ((SPI_STAT(cfg->reg) & SPI_GD32_ERR_MASK) != 0) {
|
||||
err = spi_gd32_get_err(cfg);
|
||||
} else {
|
||||
err = spi_gd32_get_err(cfg);
|
||||
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 */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue