spi_flash_probe_tail code looks not in proper shape to add more functionalities. hence refactorized so-that it's more readable and hence we may extend more functionalies to it.
Cc: Bin Meng <bmeng...@gmail.com> Cc: Troy Kisky <troy.ki...@boundarydevices.com> Signed-off-by: Jagan Teki <jt...@openedev.com> --- drivers/mtd/spi/sf_internal.h | 3 +- drivers/mtd/spi/sf_ops.c | 7 ++-- drivers/mtd/spi/sf_probe.c | 74 ++++++++++++++++++------------------------- 3 files changed, 34 insertions(+), 50 deletions(-) diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h index acf76e1..fda49e9 100644 --- a/drivers/mtd/spi/sf_internal.h +++ b/drivers/mtd/spi/sf_internal.h @@ -209,7 +209,6 @@ void spi_flash_mtd_unregister(void); /** * spi_flash_scan - scan the SPI FLASH - * @spi: the spi slave structure * @flash: the spi flash structure * * The drivers can use this fuction to scan the SPI FLASH. @@ -218,6 +217,6 @@ void spi_flash_mtd_unregister(void); * * Return: 0 for success, others for failure. */ -int spi_flash_scan(struct spi_slave *spi, struct spi_flash *flash); +int spi_flash_scan(struct spi_flash *flash); #endif /* _SF_INTERNAL_H_ */ diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c index 1ee8a7c..3705534 100644 --- a/drivers/mtd/spi/sf_ops.c +++ b/drivers/mtd/spi/sf_ops.c @@ -896,7 +896,7 @@ int spi_flash_decode_fdt(const void *blob, struct spi_flash *flash) } #endif /* CONFIG_IS_ENABLED(OF_CONTROL) */ -int spi_flash_scan(struct spi_slave *spi, struct spi_flash *flash) +int spi_flash_scan(struct spi_flash *flash) { const struct spi_flash_params *params; u16 jedec, ext_jedec; @@ -905,7 +905,7 @@ int spi_flash_scan(struct spi_slave *spi, struct spi_flash *flash) int ret; /* Read the ID codes */ - ret = spi_flash_cmd(spi, CMD_READ_ID, idcode, sizeof(idcode)); + ret = spi_flash_cmd(flash->spi, CMD_READ_ID, idcode, sizeof(idcode)); if (ret) { printf("SF: Failed to get idcodes\n"); return -EINVAL; @@ -946,9 +946,8 @@ int spi_flash_scan(struct spi_slave *spi, struct spi_flash *flash) write_sr(flash, 0); /* Assign spi data */ - flash->spi = spi; flash->name = params->name; - flash->memory_map = spi->memory_map; + flash->memory_map = flash->spi->memory_map; flash->dual_flash = flash->spi->option; /* Assign spi flash flags */ diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c index 60856f9..ea24fa0 100644 --- a/drivers/mtd/spi/sf_probe.c +++ b/drivers/mtd/spi/sf_probe.c @@ -17,49 +17,11 @@ #include "sf_internal.h" -/** - * spi_flash_probe_slave() - Probe for a SPI flash device on a bus - * - * @spi: Bus to probe - * @flashp: Pointer to place to put flash info, which may be NULL if the - * space should be allocated - */ -int spi_flash_probe_slave(struct spi_slave *spi, struct spi_flash *flash) -{ - int ret; - - /* Setup spi_slave */ - if (!spi) { - printf("SF: Failed to set up slave\n"); - return -ENODEV; - } - - /* Claim spi bus */ - ret = spi_claim_bus(spi); - if (ret) { - debug("SF: Failed to claim SPI bus: %d\n", ret); - return ret; - } - - ret = spi_flash_scan(spi, flash); - if (ret) { - ret = -EINVAL; - goto err_read_id; - } - -#ifdef CONFIG_SPI_FLASH_MTD - ret = spi_flash_mtd_register(flash); -#endif - -err_read_id: - spi_release_bus(spi); - return ret; -} - #ifndef CONFIG_DM_SPI_FLASH struct spi_flash *spi_flash_probe_tail(struct spi_slave *bus) { struct spi_flash *flash; + int ret; /* Allocate space if needed (not used by sf-uclass */ flash = calloc(1, sizeof(*flash)); @@ -68,13 +30,37 @@ struct spi_flash *spi_flash_probe_tail(struct spi_slave *bus) return NULL; } - if (spi_flash_probe_slave(bus, flash)) { - spi_free_slave(bus); - free(flash); - return NULL; + flash->spi = bus; + + /* Claim spi bus */ + ret = spi_claim_bus(bus); + if (ret) { + debug("SF: Failed to claim SPI bus: %d\n", ret); + goto err_claim; } + ret = spi_flash_scan(flash); + if (ret) + goto err_scan; + +#ifdef CONFIG_SPI_FLASH_MTD + ret = spi_flash_mtd_register(flash); + if (ret) { + printf("SF: failed to register mtd device: %d\n", ret); + goto err_mtd; + } +#endif return flash; + +#ifdef CONFIG_SPI_FLASH_MTD +err_mtd: + spi_free_slave(bus); +#endif +err_scan: + spi_release_bus(bus); +err_claim: + free(flash); + return NULL; } struct spi_flash *spi_flash_probe(unsigned int busnum, unsigned int cs, @@ -154,7 +140,7 @@ int spi_flash_std_probe(struct udevice *dev) return ret; } - ret = spi_flash_scan(slave, flash); + ret = spi_flash_scan(flash); if (ret) { ret = -EINVAL; goto err_read_id; -- 1.9.1 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot