Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 04b95d2f authored by Mike Frysinger's avatar Mike Frysinger Committed by Linus Torvalds
Browse files

Blackfin SPI Driver: pass DMA overflow error to the higher level



If the SPI bus registers a receive overflow error, pass the result back up
to the higher levels.

Signed-off-by: default avatarMike Frysinger <vapier.adi@gmail.com>
Signed-off-by: default avatarBryan Wu <cooloney@kernel.org>
Acked-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
Cc: David Brownell <david-b@pacbell.net>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent ace32865
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -559,6 +559,7 @@ static irqreturn_t dma_irq_handler(int irq, void *dev_id)
	struct driver_data *drv_data = dev_id;
	struct chip_data *chip = drv_data->cur_chip;
	struct spi_message *msg = drv_data->cur_msg;
	u16 spistat = read_STAT(drv_data);

	dev_dbg(&drv_data->pdev->dev, "in dma_irq_handler\n");
	clear_dma_irqstat(drv_data->dma_channel);
@@ -582,6 +583,10 @@ static irqreturn_t dma_irq_handler(int irq, void *dev_id)
	while (!(read_STAT(drv_data) & SPIF))
		cpu_relax();

	if (spistat & RBSY) {
		msg->state = ERROR_STATE;
		dev_err(&drv_data->pdev->dev, "dma receive: fifo/buffer overflow\n");
	} else {
		msg->actual_length += drv_data->len_in_bytes;

		if (drv_data->cs_change)
@@ -589,6 +594,7 @@ static irqreturn_t dma_irq_handler(int irq, void *dev_id)

		/* Move to next transfer */
		msg->state = next_transfer(drv_data);
	}

	/* Schedule transfer tasklet */
	tasklet_schedule(&drv_data->pump_transfers);