diff options
| author | Miquel Raynal <miquel.raynal@bootlin.com> | 2026-03-26 19:02:29 +0300 |
|---|---|---|
| committer | Miquel Raynal <miquel.raynal@bootlin.com> | 2026-05-04 16:25:12 +0300 |
| commit | ca842a62fe993019255b380ab53bed64ef31fe6f (patch) | |
| tree | 852856cd79a39b497c9ee158c0b991a8a19874de | |
| parent | 240e65cb4402d62238667d71c0f9298607200b8b (diff) | |
| download | linux-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.c | 31 |
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) |
