Commit 0abdb0fb authored by Lars Povlsen's avatar Lars Povlsen Committed by Mark Brown

spi: dw: Fix spi registration for controllers overriding CS

When SPI DW memory ops support was introduced, there was a check for
excluding controllers which supplied their own CS function. Even so,
the mem_ops pointer is *always* presented to the SPI core.

This causes the SPI core sanity check in spi_controller_check_ops() to
refuse registration, since a mem_ops pointer is being supplied without
an exec_op member function.

The end result is failure of the SPI DW driver on sparx5 and similar
platforms.

The fix in the core SPI DW driver is to avoid presenting the mem_ops
pointer if the exec_op function is not set.

Fixes: 6423207e (spi: dw: Add memory operations support)
Signed-off-by: default avatarLars Povlsen <lars.povlsen@microchip.com>
Acked-by: default avatarSerge Semin <fancer.lancer@gmail.com>
Link: https://lore.kernel.org/r/20201120213414.339701-1-lars.povlsen@microchip.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 7cd71202
...@@ -875,7 +875,8 @@ int dw_spi_add_host(struct device *dev, struct dw_spi *dws) ...@@ -875,7 +875,8 @@ int dw_spi_add_host(struct device *dev, struct dw_spi *dws)
master->set_cs = dw_spi_set_cs; master->set_cs = dw_spi_set_cs;
master->transfer_one = dw_spi_transfer_one; master->transfer_one = dw_spi_transfer_one;
master->handle_err = dw_spi_handle_err; master->handle_err = dw_spi_handle_err;
master->mem_ops = &dws->mem_ops; if (dws->mem_ops.exec_op)
master->mem_ops = &dws->mem_ops;
master->max_speed_hz = dws->max_freq; master->max_speed_hz = dws->max_freq;
master->dev.of_node = dev->of_node; master->dev.of_node = dev->of_node;
master->dev.fwnode = dev->fwnode; master->dev.fwnode = dev->fwnode;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment