The designware spi driver doesn't support dual/quad/octal modes, but
the driver still tries using these modes when it sees a capable flash
chip in the devicetree. Add a supports_op function to this driver to
prevent this from happening and force single lane operation.

Signed-off-by: Anirudh Srinivasan <[email protected]>
---
 drivers/spi/designware_spi.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/drivers/spi/designware_spi.c b/drivers/spi/designware_spi.c
index 0df9a4f5abd..2f6dbeb1d94 100644
--- a/drivers/spi/designware_spi.c
+++ b/drivers/spi/designware_spi.c
@@ -694,8 +694,22 @@ static int dw_spi_adjust_op_size(struct spi_slave *slave, 
struct spi_mem_op *op)
        return 0;
 }
 
+/*
+ * This driver only supports 1-1-1 transfers. Reject all other modes.
+ */
+static bool dw_spi_supports_op(struct spi_slave *slave,
+                              const struct spi_mem_op *op)
+{
+       if (op->cmd.buswidth > 1 || op->addr.buswidth > 1 ||
+           op->dummy.buswidth > 1 || op->data.buswidth > 1)
+               return false;
+
+       return spi_mem_default_supports_op(slave, op);
+}
+
 static const struct spi_controller_mem_ops dw_spi_mem_ops = {
        .exec_op = dw_spi_exec_op,
+       .supports_op = dw_spi_supports_op,
        .adjust_op_size = dw_spi_adjust_op_size,
 };
 

-- 
2.43.0

Reply via email to