Skip to content

Commit 63d9a4d

Browse files
Chengbayibroonie
authored andcommitted
spi: spi-mtk-nor: Unify write buffer on/off
The logical structures of mtk_nor_write_buffer_enable and mtk_nor_write_buffer_disable are very similar, So it is necessary to combine them into one. Signed-off-by: bayi cheng <bayi.cheng@mediatek.com> Link: https://lore.kernel.org/r/20221115124655.10124-1-bayi.cheng@mediatek.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent ec4a04a commit 63d9a4d

1 file changed

Lines changed: 16 additions & 24 deletions

File tree

drivers/spi/spi-mtk-nor.c

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -444,36 +444,28 @@ static int mtk_nor_read_pio(struct mtk_nor *sp, const struct spi_mem_op *op)
444444
return ret;
445445
}
446446

447-
static int mtk_nor_write_buffer_enable(struct mtk_nor *sp)
447+
static int mtk_nor_setup_write_buffer(struct mtk_nor *sp, bool on)
448448
{
449449
int ret;
450450
u32 val;
451451

452-
if (sp->wbuf_en)
452+
if (!(sp->wbuf_en ^ on))
453453
return 0;
454454

455455
val = readl(sp->base + MTK_NOR_REG_CFG2);
456-
writel(val | MTK_NOR_WR_BUF_EN, sp->base + MTK_NOR_REG_CFG2);
457-
ret = readl_poll_timeout(sp->base + MTK_NOR_REG_CFG2, val,
458-
val & MTK_NOR_WR_BUF_EN, 0, 10000);
459-
if (!ret)
460-
sp->wbuf_en = true;
461-
return ret;
462-
}
463-
464-
static int mtk_nor_write_buffer_disable(struct mtk_nor *sp)
465-
{
466-
int ret;
467-
u32 val;
456+
if (on) {
457+
writel(val | MTK_NOR_WR_BUF_EN, sp->base + MTK_NOR_REG_CFG2);
458+
ret = readl_poll_timeout(sp->base + MTK_NOR_REG_CFG2, val,
459+
val & MTK_NOR_WR_BUF_EN, 0, 10000);
460+
} else {
461+
writel(val & ~MTK_NOR_WR_BUF_EN, sp->base + MTK_NOR_REG_CFG2);
462+
ret = readl_poll_timeout(sp->base + MTK_NOR_REG_CFG2, val,
463+
!(val & MTK_NOR_WR_BUF_EN), 0, 10000);
464+
}
468465

469-
if (!sp->wbuf_en)
470-
return 0;
471-
val = readl(sp->base + MTK_NOR_REG_CFG2);
472-
writel(val & ~MTK_NOR_WR_BUF_EN, sp->base + MTK_NOR_REG_CFG2);
473-
ret = readl_poll_timeout(sp->base + MTK_NOR_REG_CFG2, val,
474-
!(val & MTK_NOR_WR_BUF_EN), 0, 10000);
475466
if (!ret)
476-
sp->wbuf_en = false;
467+
sp->wbuf_en = on;
468+
477469
return ret;
478470
}
479471

@@ -483,7 +475,7 @@ static int mtk_nor_pp_buffered(struct mtk_nor *sp, const struct spi_mem_op *op)
483475
u32 val;
484476
int ret, i;
485477

486-
ret = mtk_nor_write_buffer_enable(sp);
478+
ret = mtk_nor_setup_write_buffer(sp, true);
487479
if (ret < 0)
488480
return ret;
489481

@@ -502,7 +494,7 @@ static int mtk_nor_pp_unbuffered(struct mtk_nor *sp,
502494
const u8 *buf = op->data.buf.out;
503495
int ret;
504496

505-
ret = mtk_nor_write_buffer_disable(sp);
497+
ret = mtk_nor_setup_write_buffer(sp, false);
506498
if (ret < 0)
507499
return ret;
508500
writeb(buf[0], sp->base + MTK_NOR_REG_WDATA);
@@ -609,7 +601,7 @@ static int mtk_nor_exec_op(struct spi_mem *mem, const struct spi_mem_op *op)
609601
}
610602

611603
if ((op->data.dir == SPI_MEM_DATA_IN) && mtk_nor_match_read(op)) {
612-
ret = mtk_nor_write_buffer_disable(sp);
604+
ret = mtk_nor_setup_write_buffer(sp, false);
613605
if (ret < 0)
614606
return ret;
615607
mtk_nor_setup_bus(sp, op);

0 commit comments

Comments
 (0)