forked from luck/tmp_suning_uos_patched
spi/bfin_spi: handle error/status changes after data interrupts
The error interrupt on the BF537 SIC cannot be enabled on a per-peripheral basis. Once the error interrupt is enabled for one peripheral, it is automatically enabled for all. So in the Blackfin on-chip SPI driver, we need to clear out these known errors in the data interrupt once we've successfully finished processing all of the pending data. Signed-off-by: Michael Hennerich <michael.hennerich@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
This commit is contained in:
parent
2b9603a0d7
commit
782a895693
@ -504,6 +504,15 @@ static irqreturn_t bfin_spi_dma_irq_handler(int irq, void *dev_id)
|
|||||||
"in dma_irq_handler dmastat:0x%x spistat:0x%x\n",
|
"in dma_irq_handler dmastat:0x%x spistat:0x%x\n",
|
||||||
dmastat, spistat);
|
dmastat, spistat);
|
||||||
|
|
||||||
|
if (drv_data->rx != NULL) {
|
||||||
|
u16 cr = read_CTRL(drv_data);
|
||||||
|
/* discard old RX data and clear RXS */
|
||||||
|
bfin_spi_dummy_read(drv_data);
|
||||||
|
write_CTRL(drv_data, cr & ~BIT_CTL_ENABLE); /* Disable SPI */
|
||||||
|
write_CTRL(drv_data, cr & ~BIT_CTL_TIMOD); /* Restore State */
|
||||||
|
write_STAT(drv_data, BIT_STAT_CLR); /* Clear Status */
|
||||||
|
}
|
||||||
|
|
||||||
clear_dma_irqstat(drv_data->dma_channel);
|
clear_dma_irqstat(drv_data->dma_channel);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user