From: Angus Clark <angus.cl...@st.com>

Update the configuration of the Macronix 'QE' bit, such that
we only set or clear the bit if required.

Signed-off-by: Angus Clark <angus.cl...@st.com>
Signed-off-by: Lee Jones <lee.jo...@linaro.org>
---
 drivers/mtd/devices/st_spi_fsm.c | 23 +++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/drivers/mtd/devices/st_spi_fsm.c b/drivers/mtd/devices/st_spi_fsm.c
index 31bbf28..fabba2c 100644
--- a/drivers/mtd/devices/st_spi_fsm.c
+++ b/drivers/mtd/devices/st_spi_fsm.c
@@ -1163,12 +1163,27 @@ static int stfsm_mx25_config(struct stfsm *fsm)
                                              CFG_ERASESEC_TOGGLE_32BIT_ADDR);
        }
 
-       /* For QUAD mode, set 'QE' STATUS bit */
+       /* Check status of 'QE' bit */
+       stfsm_read_status(fsm, FLASH_CMD_RDSR, &sta);
        data_pads = ((fsm->stfsm_seq_read.seq_cfg >> 16) & 0x3) + 1;
        if (data_pads == 4) {
-               stfsm_read_status(fsm, FLASH_CMD_RDSR, &sta);
-               sta |= MX25_STATUS_QE;
-               stfsm_write_status(fsm, sta, 1);
+               if (!(sta & MX25_STATUS_QE)) {
+                       /* Set 'QE' */
+                       sta |= MX25_STATUS_QE;
+
+                       stfsm_write_status(fsm, sta, 1);
+
+                       stfsm_wait_busy(fsm);
+               }
+       } else {
+               if (sta & MX25_STATUS_QE) {
+                       /* Clear 'QE' */
+                       sta &= ~MX25_STATUS_QE;
+
+                       stfsm_write_status(fsm, sta, 1);
+
+                       stfsm_wait_busy(fsm);
+               }
        }
 
        return 0;
-- 
1.8.3.2

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to