SPI bus provide support dual and quad wire data transfers for tx and rx. This information is parsed from device tree and passed to slave device via set_mode of dm_spi_ops.
Implement set_mode i.e. fsl_qspi_set_mode to store mode information in fsl_qspi_priv structure. Signed-off-by: Prabhakar Kushwaha <prabhakar.kushw...@nxp.com> --- drivers/spi/fsl_qspi.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/drivers/spi/fsl_qspi.c b/drivers/spi/fsl_qspi.c index 0f3f7d9..7ec222a 100644 --- a/drivers/spi/fsl_qspi.c +++ b/drivers/spi/fsl_qspi.c @@ -120,6 +120,7 @@ struct fsl_qspi_platdata { * @cur_amba_base: Base address of QSPI memory mapping of current CS * @flash_num: Number of active slave devices * @num_chipselect: Number of QSPI chipselect signals + * @mode: I/O lines * @regs: Point to QSPI register structure for I/O access */ struct fsl_qspi_priv { @@ -133,6 +134,7 @@ struct fsl_qspi_priv { u32 cur_amba_base; u32 flash_num; u32 num_chipselect; + u32 mode; struct fsl_qspi_regs *regs; }; @@ -1212,7 +1214,33 @@ static int fsl_qspi_set_speed(struct udevice *bus, uint speed) static int fsl_qspi_set_mode(struct udevice *bus, uint mode) { - /* Nothing to do */ + struct fsl_qspi_priv *priv = dev_get_priv(bus); + + if (mode & SPI_RX_QUAD) + priv->mode |= SPI_RX_QUAD; + else if (mode & SPI_RX_DUAL) + priv->mode |= SPI_RX_DUAL; + else + priv->mode &= ~(SPI_RX_QUAD | SPI_RX_DUAL); + + priv->mode &= ~(SPI_TX_QUAD | SPI_TX_DUAL); + + debug("%s: mode=%d rx: ", __func__, mode); + + if (mode & SPI_RX_QUAD) + debug("quad, tx: "); + else if (mode & SPI_RX_DUAL) + debug("dual, tx: "); + else + debug("single, tx: "); + + if (mode & SPI_TX_QUAD) + debug("quad\n"); + else if (mode & SPI_TX_DUAL) + debug("dual\n"); + else + debug("single\n"); + return 0; } -- 2.7.4 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot