[U-Boot] [PATCH] dm: spi: Correct SPI claim/release_bus() methods

Peng Fan Peng.Fan at freescale.com
Mon Apr 20 06:41:55 CEST 2015


Hi, Simon

On 4/19/2015 11:05 PM, Simon Glass wrote:
> These methods should be passed a slave device, not a bus. This matches the
> old SPI interface. It is important to know which device is claiming the bus
> so passing a bus is not that useful.
>
> Reported-by: Haikun Wang <haikun.wang at freescale.com>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
>   drivers/spi/exynos_spi.c     |  6 ++++--
>   drivers/spi/spi-uclass.c     |  4 ++--
>   drivers/spi/tegra114_spi.c   |  3 ++-
>   drivers/spi/tegra20_sflash.c |  3 ++-
>   drivers/spi/tegra20_slink.c  |  3 ++-
>   include/spi.h                | 10 +++++-----
>   6 files changed, 17 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/spi/exynos_spi.c b/drivers/spi/exynos_spi.c
> index a46d8c1..67f6b2d 100644
> --- a/drivers/spi/exynos_spi.c
> +++ b/drivers/spi/exynos_spi.c
> @@ -296,8 +296,9 @@ static int exynos_spi_probe(struct udevice *bus)
>   	return 0;
>   }
>   
> -static int exynos_spi_claim_bus(struct udevice *bus)
> +static int exynos_spi_claim_bus(struct udevice *dev)
>   {
> +	struct udevice *bus = dev->parent;
>   	struct exynos_spi_priv *priv = dev_get_priv(bus);
>   
>   	exynos_pinmux_config(priv->periph_id, PINMUX_FLAG_NONE);
> @@ -308,8 +309,9 @@ static int exynos_spi_claim_bus(struct udevice *bus)
>   	return 0;
>   }
>   
> -static int exynos_spi_release_bus(struct udevice *bus)
> +static int exynos_spi_release_bus(struct udevice *dev)
>   {
> +	struct udevice *bus = dev->parent;
>   	struct exynos_spi_priv *priv = dev_get_priv(bus);
>   
>   	spi_flush_fifo(priv->regs);
> diff --git a/drivers/spi/spi-uclass.c b/drivers/spi/spi-uclass.c
> index 866c48f..83fe8e0 100644
> --- a/drivers/spi/spi-uclass.c
> +++ b/drivers/spi/spi-uclass.c
> @@ -67,7 +67,7 @@ int spi_claim_bus(struct spi_slave *slave)
>   	if (ret)
>   		return ret;
>   
> -	return ops->claim_bus ? ops->claim_bus(bus) : 0;
> +	return ops->claim_bus ? ops->claim_bus(dev) : 0;
>   }
>   
>   void spi_release_bus(struct spi_slave *slave)
> @@ -77,7 +77,7 @@ void spi_release_bus(struct spi_slave *slave)
>   	struct dm_spi_ops *ops = spi_get_ops(bus);
>   
>   	if (ops->release_bus)
> -		ops->release_bus(bus);
> +		ops->release_bus(dev);
>   }
>   
>   int spi_xfer(struct spi_slave *slave, unsigned int bitlen,
> diff --git a/drivers/spi/tegra114_spi.c b/drivers/spi/tegra114_spi.c
> index 53ff9ea..4bec663 100644
> --- a/drivers/spi/tegra114_spi.c
> +++ b/drivers/spi/tegra114_spi.c
> @@ -153,8 +153,9 @@ static int tegra114_spi_probe(struct udevice *bus)
>   	return 0;
>   }
>   
> -static int tegra114_spi_claim_bus(struct udevice *bus)
> +static int tegra114_spi_claim_bus(struct udevice *dev)
>   {
> +	struct udevice *bus = dev->parent;
>   	struct tegra114_spi_priv *priv = dev_get_priv(bus);
>   	struct spi_regs *regs = priv->regs;
>   
> diff --git a/drivers/spi/tegra20_sflash.c b/drivers/spi/tegra20_sflash.c
> index 78c74cd..82c1b84 100644
> --- a/drivers/spi/tegra20_sflash.c
> +++ b/drivers/spi/tegra20_sflash.c
> @@ -125,8 +125,9 @@ static int tegra20_sflash_probe(struct udevice *bus)
>   	return 0;
>   }
>   
> -static int tegra20_sflash_claim_bus(struct udevice *bus)
> +static int tegra20_sflash_claim_bus(struct udevice *dev)
>   {
> +	struct udevice *bus = dev->parent;
>   	struct tegra20_sflash_priv *priv = dev_get_priv(bus);
>   	struct spi_regs *regs = priv->regs;
>   	u32 reg;
> diff --git a/drivers/spi/tegra20_slink.c b/drivers/spi/tegra20_slink.c
> index 597d6ad..f6fb89b 100644
> --- a/drivers/spi/tegra20_slink.c
> +++ b/drivers/spi/tegra20_slink.c
> @@ -141,8 +141,9 @@ static int tegra30_spi_probe(struct udevice *bus)
>   	return 0;
>   }
>   
> -static int tegra30_spi_claim_bus(struct udevice *bus)
> +static int tegra30_spi_claim_bus(struct udevice *dev)
>   {
> +	struct udevice *bus = dev->parent;
>   	struct tegra30_spi_priv *priv = dev_get_priv(bus);
>   	struct spi_regs *regs = priv->regs;
>   	u32 reg;
> diff --git a/include/spi.h b/include/spi.h
> index c58e453..863e6db 100644
> --- a/include/spi.h
> +++ b/include/spi.h
> @@ -385,12 +385,12 @@ struct dm_spi_ops {
>   	 * allowed to claim the same bus for several slaves without releasing
>   	 * the bus in between.
>   	 *
> -	 * @bus:	The SPI slave
> +	 * @dev:	The SPI slave
>   	 *
>   	 * Returns: 0 if the bus was claimed successfully, or a negative value
>   	 * if it wasn't.
>   	 */
> -	int (*claim_bus)(struct udevice *bus);
> +	int (*claim_bus)(struct udevice *dev);
>   
>   	/**
>   	 * Release the SPI bus
> @@ -399,9 +399,9 @@ struct dm_spi_ops {
>   	 * all transfers have finished. It may disable any SPI hardware as
>   	 * appropriate.
>   	 *
> -	 * @bus:	The SPI slave
> +	 * @dev:	The SPI slave
>   	 */
> -	int (*release_bus)(struct udevice *bus);
> +	int (*release_bus)(struct udevice *dev);
>   
>   	/**
>   	 * Set the word length for SPI transactions
> @@ -413,7 +413,7 @@ struct dm_spi_ops {
>   	 *
>   	 * Returns: 0 on success, -ve on failure.
>   	 */
> -	int (*set_wordlen)(struct udevice *bus, unsigned int wordlen);
> +	int (*set_wordlen)(struct udevice *dev, unsigned int wordlen);
>   
>   	/**
>   	 * SPI transfer

After applying this patch, qspi flashes can be correctly probed and 
read/write on i.MX platform. I original posted a patch 
https://patchwork.ozlabs.org/patch/461034/ which seems in wrong way:)

Tested-by: Peng Fan <Peng.Fan at freescale.com>

Regards,
Peng.


More information about the U-Boot mailing list