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

Jagan Teki jagannadh.teki at gmail.com
Thu Apr 23 11:55:10 CEST 2015


On 23 April 2015 at 02:12, Simon Glass <sjg at chromium.org> wrote:
> 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.

Applied to u-boot-spi/master

thanks!
-- 
Jagan.


More information about the U-Boot mailing list