--- a/drivers/mtd/devices/m25p80.c
+++ b/drivers/mtd/devices/m25p80.c
@@ -530,6 +530,8 @@ static int m25p80_read(struct mtd_info *
 	if (dummy < 0) {
 		dev_err(&flash->spi->dev, "No valid read command supported\n");
 		return -EINVAL;
+	} else if (dummy == 1) {
+		t[0].dummy = true;
 	}
 
 	t[0].type = SPI_TRANSFER_FLASH_READ_CMD;
--- a/drivers/spi/spi-ath79.c
+++ b/drivers/spi/spi-ath79.c
@@ -262,6 +262,10 @@ static int ath79_spi_do_read_flash_cmd(s
 	sp->read_addr = 0;
 
 	len = t->len - 1;
+
+	if (t->dummy)
+		len -= 1;
+
 	p = t->tx_buf;
 
 	while (len--) {
--- a/include/linux/spi/spi.h
+++ b/include/linux/spi/spi.h
@@ -598,6 +598,7 @@ struct spi_transfer {
 	u16		delay_usecs;
 	u32		speed_hz;
 	enum spi_transfer_type type;
+	bool dummy;
 
 	struct list_head transfer_list;
 };