summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoah.Shen <[email protected]>2026-04-06 15:13:29 -0500
committerDavid Lechner <[email protected]>2026-04-28 13:11:19 -0500
commit3b0a037052a24f8449c9fafd02034307e30a3c97 (patch)
tree4c056842cbe4d4d52f73283d186a15271e0e76c6
parent4eac47d4eb661c019b84723628bab2f0c826403f (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.c24
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;