diff options
| author | Noah.Shen <[email protected]> | 2026-04-06 15:13:29 -0500 |
|---|---|---|
| committer | David Lechner <[email protected]> | 2026-04-28 13:11:19 -0500 |
| commit | 3b0a037052a24f8449c9fafd02034307e30a3c97 (patch) | |
| tree | 4c056842cbe4d4d52f73283d186a15271e0e76c6 | |
| parent | 4eac47d4eb661c019b84723628bab2f0c826403f (diff) | |
spi: mtk_snor: conditionally copy tx/rx data
Only write out data for OUT command and read in data for IN commands.
Signed-off-by: Noah.Shen <[email protected]>
Reviewed-by: Julien Stephan <[email protected]>
Link: https://patch.msgid.link/[email protected]
Signed-off-by: David Lechner <[email protected]>
| -rw-r--r-- | drivers/spi/mtk_snor.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/drivers/spi/mtk_snor.c b/drivers/spi/mtk_snor.c index 0ff4a8b23d5..674e723db01 100644 --- a/drivers/spi/mtk_snor.c +++ b/drivers/spi/mtk_snor.c @@ -415,14 +415,16 @@ static int mtk_snor_cmd_program(struct mtk_snor_priv *priv, writeb(val, reg); } - for (i = 0; i < op->dummy.nbytes; i++, reg_offset--) { - reg = priv->base + MTK_NOR_REG_PRGDATA(reg_offset); - writeb(0, reg); - } + if (op->data.dir == SPI_MEM_DATA_OUT) { + for (i = 0; i < op->dummy.nbytes; i++, reg_offset--) { + reg = priv->base + MTK_NOR_REG_PRGDATA(reg_offset); + writeb(0, reg); + } - for (i = 0; i < op->data.nbytes; i++, reg_offset--) { - reg = priv->base + MTK_NOR_REG_PRGDATA(reg_offset); - writeb(((const u8 *)(op->data.buf.out))[i], reg); + for (i = 0; i < op->data.nbytes; i++, reg_offset--) { + reg = priv->base + MTK_NOR_REG_PRGDATA(reg_offset); + writeb(((const u8 *)(op->data.buf.out))[i], reg); + } } for (; reg_offset >= 0; reg_offset--) { @@ -437,9 +439,11 @@ static int mtk_snor_cmd_program(struct mtk_snor_priv *priv, /* fetch read data */ reg_offset = 0; - for (i = op->data.nbytes - 1; i >= 0; i--, reg_offset++) { - reg = priv->base + MTK_NOR_REG_SHIFT(reg_offset); - ((u8 *)(op->data.buf.in))[i] = readb(reg); + if (op->data.dir == SPI_MEM_DATA_IN) { + for (i = op->data.nbytes - 1; i >= 0; i--, reg_offset++) { + reg = priv->base + MTK_NOR_REG_SHIFT(reg_offset); + ((u8 *)(op->data.buf.in))[i] = readb(reg); + } } return 0; |
