]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mtd: spinand: winbond: Create a helper to detect the need for the HS bit
authorMiquel Raynal <miquel.raynal@bootlin.com>
Thu, 26 Mar 2026 16:02:29 +0000 (17:02 +0100)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Mon, 4 May 2026 13:25:12 +0000 (15:25 +0200)
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>
drivers/mtd/nand/spi/winbond.c

index 97758f495c736a178e200e671d5c665cdc99c0e9..a73a35adbf08b6f51649c06dc929090c5f483519 100644 (file)
@@ -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)