summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiquel Raynal <miquel.raynal@bootlin.com>2026-03-26 19:02:29 +0300
committerMiquel Raynal <miquel.raynal@bootlin.com>2026-05-04 16:25:12 +0300
commitca842a62fe993019255b380ab53bed64ef31fe6f (patch)
tree852856cd79a39b497c9ee158c0b991a8a19874de
parent240e65cb4402d62238667d71c0f9298607200b8b (diff)
downloadlinux-ca842a62fe993019255b380ab53bed64ef31fe6f.tar.xz
mtd: spinand: winbond: Create a helper to detect the need for the HS bit
The logic is not complex but might be reused to cleanup a bit the section by moving it to a dedicated helper. Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
-rw-r--r--drivers/mtd/nand/spi/winbond.c31
1 files changed, 17 insertions, 14 deletions
diff --git a/drivers/mtd/nand/spi/winbond.c b/drivers/mtd/nand/spi/winbond.c
index 97758f495c73..a73a35adbf08 100644
--- a/drivers/mtd/nand/spi/winbond.c
+++ b/drivers/mtd/nand/spi/winbond.c
@@ -421,30 +421,33 @@ static int w25n0xjw_set_sr4_hs(struct spinand_device *spinand, bool enable)
return spinand_write_reg_op(spinand, W25N0XJW_SR4, sr4);
}
+/*
+ * SDR dual and quad I/O operations over 104MHz require the HS bit to
+ * enable a few more dummy cycles.
+ */
+static bool w25n0xjw_op_needs_hs(const struct spi_mem_op *op)
+{
+ if (op->cmd.dtr || op->addr.dtr || op->dummy.dtr || op->data.dtr)
+ return false;
+ else if (op->cmd.buswidth != 1 || op->addr.buswidth == 1)
+ return false;
+ else if (op->max_freq && op->max_freq <= 104 * HZ_PER_MHZ)
+ return false;
+
+ return true;
+}
+
static int w25n0xjw_hs_cfg(struct spinand_device *spinand,
enum spinand_bus_interface iface)
{
const struct spi_mem_op *op;
- bool hs;
if (iface != SSDR)
return -EOPNOTSUPP;
- /*
- * SDR dual and quad I/O operations over 104MHz require the HS bit to
- * enable a few more dummy cycles.
- */
op = spinand->op_templates->read_cache;
- if (op->cmd.dtr || op->addr.dtr || op->dummy.dtr || op->data.dtr)
- hs = false;
- else if (op->cmd.buswidth != 1 || op->addr.buswidth == 1)
- hs = false;
- else if (op->max_freq && op->max_freq <= 104 * HZ_PER_MHZ)
- hs = false;
- else
- hs = true;
- return w25n0xjw_set_sr4_hs(spinand, hs);
+ return w25n0xjw_set_sr4_hs(spinand, w25n0xjw_op_needs_hs(op));
}
static int w35n0xjw_write_vcr(struct spinand_device *spinand, u8 reg, u8 val)