[U-Boot] [PATCH] dm: spi: Correct SPI claim/release_bus() methods
Simon Glass
sjg at chromium.org
Wed Apr 22 22:42:02 CEST 2015
Hi Jagan,
On 19 April 2015 at 23:27, Jagan Teki <jagannadh.teki at gmail.com> wrote:
> On 20 April 2015 at 10:11, Peng Fan <Peng.Fan at freescale.com> wrote:
>> 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>
>
> I'm picking on -spi/master! any concerns?
That's fine with me.
Regards,
Simon
More information about the U-Boot
mailing list