From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peng Fan Date: Mon, 20 Apr 2015 12:41:55 +0800 Subject: [U-Boot] [PATCH] dm: spi: Correct SPI claim/release_bus() methods In-Reply-To: <1429455941-14223-1-git-send-email-sjg@chromium.org> References: <1429455941-14223-1-git-send-email-sjg@chromium.org> Message-ID: <55348393.1080206@freescale.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 > Signed-off-by: Simon Glass > --- > > 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 Regards, Peng.