From 891479e62a8db32d5a6351e9e3eb9e5dd570ba9c Mon Sep 17 00:00:00 2001
From: Radomir Dopieralski <openstack@sheep.art.pl>
Date: Thu, 25 Aug 2016 10:42:33 +0200
Subject: [PATCH] esp8266/hspi: Enable duplex operation of hardware SPI

Without this, spi.read(1, 0xff) would use 16 clock cycles,
first to send 0xff and then to receive one byte, as visible
with a logic analyzer.
---
 esp8266/hspi.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/esp8266/hspi.c b/esp8266/hspi.c
index 7315dc8a1..436fb4f6f 100644
--- a/esp8266/hspi.c
+++ b/esp8266/hspi.c
@@ -199,7 +199,11 @@ uint32_t spi_transaction(uint8_t spi_no, uint8_t cmd_bits, uint16_t cmd_data,
     // This is rather inefficient but allows for a very generic function.
     // CMD ADDR and MOSI are set below to save on an extra if statement.
     if (din_bits) {
-        SET_PERI_REG_MASK(SPI_USER(spi_no), SPI_USR_MISO);
+        if (dout_bits) {
+            SET_PERI_REG_MASK(SPI_USER(spi_no), SPI_DOUTDIN);
+        } else {
+            SET_PERI_REG_MASK(SPI_USER(spi_no), SPI_USR_MISO);
+        }
     }
     if (dummy_bits) {
         SET_PERI_REG_MASK(SPI_USER(spi_no), SPI_USR_DUMMY);
-- 
GitLab