mtd: spi-nor: spansion: add octal DTR support in RD_ANY_REG_OP
authorTakahiro Kuwano <Takahiro.Kuwano@infineon.com>
Wed, 26 Jul 2023 07:52:53 +0000 (10:52 +0300)
committerTudor Ambarus <tudor.ambarus@linaro.org>
Wed, 26 Jul 2023 09:39:11 +0000 (12:39 +0300)
S28HS02GT uses RD_ANY_REG_OP to read status of each die. In Octal DTR
mode, RD_ANY_REG_OP needs dummy cycles (same as params->rdsr_dummy) and
data length should be 2.

Signed-off-by: Takahiro Kuwano <Takahiro.Kuwano@infineon.com>
Link: https://lore.kernel.org/r/20230726075257.12985-8-tudor.ambarus@linaro.org
Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
drivers/mtd/spi-nor/spansion.c

index b3a710985f84bb84f7060e4d8c9ff16fa253e067..d7aa0a90949ae9b695be98e32fe2abc3f5546b32 100644 (file)
@@ -102,11 +102,17 @@ static void spansion_nor_clear_sr(struct spi_nor *nor)
 
 static int cypress_nor_sr_ready_and_clear_reg(struct spi_nor *nor, u64 addr)
 {
+       struct spi_nor_flash_parameter *params = nor->params;
        struct spi_mem_op op =
-               CYPRESS_NOR_RD_ANY_REG_OP(nor->params->addr_mode_nbytes, addr,
+               CYPRESS_NOR_RD_ANY_REG_OP(params->addr_mode_nbytes, addr,
                                          0, nor->bouncebuf);
        int ret;
 
+       if (nor->reg_proto == SNOR_PROTO_8_8_8_DTR) {
+               op.dummy.nbytes = params->rdsr_dummy;
+               op.data.nbytes = 2;
+       }
+
        ret = spi_nor_read_any_reg(nor, &op, nor->reg_proto);
        if (ret)
                return ret;