[U-Boot] [PATCH v7 12/34] sf: probe: Use spi_flash_scan in dm-spi-flash

Simon Glass
2015-11-26T17:50:30Z

Hi Jagan,

On 26 November 2015 at 04:03, Jagan Teki <jteki@openedev.com> wrote:
> This patch add support to use spi_flash_scan in
> dm-spi-flash probe, so-that it can access
> the spi_flash functionalities same as non-dm sf probe.
>
> Signed-off-by: Jagan Teki <jteki@openedev.com>
> ---
> drivers/mtd/spi/sf_probe.c | 28 +++++++++++++++++++++++++---
> 1 file changed, 25 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
> index f2e210d..60856f9 100644
> --- a/drivers/mtd/spi/sf_probe.c
> +++ b/drivers/mtd/spi/sf_probe.c
> @@ -137,14 +137,36 @@ int spi_flash_std_erase(struct udevice *dev, u32 offset, size_t len)
>
> int spi_flash_std_probe(struct udevice *dev)
> {
> - struct spi_slave *slave = dev_get_parent_priv(dev);
> struct dm_spi_slave_platdata *plat = dev_get_parent_platdata(dev);
> + struct spi_slave *slave = dev_get_parent_priv(dev);
> struct spi_flash *flash;
> + int ret;
> +
> + debug("%s: slave=%p, cs=%d\n", __func__, slave, plat->cs);
>
> flash = dev_get_uclass_priv(dev);
> flash->dev = dev;
> - debug("%s: slave=%p, cs=%d\n", __func__, slave, plat->cs);
> - return spi_flash_probe_slave(slave, flash);
> +
> + /* Claim spi bus */
> + ret = spi_claim_bus(slave);
> + if (ret) {
> + debug("SF: Failed to claim SPI bus: %d\n", ret);
> + return ret;
> + }
> +
> + ret = spi_flash_scan(slave, flash);
> + if (ret) {
> + ret = -EINVAL;
> + goto err_read_id;
> + }
> +
> +#ifdef CONFIG_SPI_FLASH_MTD
> + ret = spi_flash_mtd_register(flash);
> +#endif

But you can't call this from driver model code. As far as I can see
the MTD layer does not support driver model. You are going to create a
plate of spaghetti and it will be a big job to untangle it.

> +
> +err_read_id:
> + spi_release_bus(slave);
> + return ret;
> }
>
> static const struct dm_spi_flash_ops spi_flash_std_ops = {
> --
> 1.9.1
>

Regards,
Simon