static irqreturn_t dspi_interrupt(int irq, void *dev_id) { struct fsl_dspi *dspi = (struct fsl_dspi *)dev_id; writel(SPI_SR_EOQF, dspi->base + SPI_SR); dspi_transfer_read(dspi); if (!dspi->len) { if (dspi->dataflags & TRAN_STATE_WORD_ODD_NUM) set_bit_mode(dspi, 16); dspi->waitflags = 1; wake_up_interruptible(&dspi->waitq); } else { dspi_transfer_write(dspi); return IRQ_HANDLED; } return IRQ_HANDLED; }
static irqreturn_t dspi_interrupt(int irq, void *dev_id) { struct fsl_dspi *dspi = (struct fsl_dspi *)dev_id; regmap_write(dspi->regmap, SPI_SR, SPI_SR_EOQF); dspi_transfer_read(dspi); if (!dspi->len) { if (dspi->dataflags & TRAN_STATE_WORD_ODD_NUM) regmap_update_bits(dspi->regmap, SPI_CTAR(dspi->cs), SPI_FRAME_BITS_MASK, SPI_FRAME_BITS(16)); dspi->waitflags = 1; wake_up_interruptible(&dspi->waitq); } else { dspi_transfer_write(dspi); return IRQ_HANDLED; } return IRQ_HANDLED; }