mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 12:42:02 +00:00
mtd: spi-nor: Introduce spi_nor_set_mtd_info()
Used to init all the mtd_info fields. Move the mtd_info init the last thing in the spi_nor_scan(), so that we avoid superfluous initialization of the mtd_info fields in case of errors. While here use common naming scheme for functions that are setting mtd_info fields: s/spi_nor_register_locking_ops/spi_nor_set_mtd_locking_ops s/spi_nor_otp_init/spi_nor_set_mtd_otp_ops The functions names are self explanatory, get rid of the comment for the OTP function. Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com> Reviewed-by: Michael Walle <michael@walle.cc> Reviewed-by: Pratyush Yadav <p.yadav@ti.com> Link: https://lore.kernel.org/r/20211207140254.87681-4-tudor.ambarus@microchip.com
This commit is contained in:
parent
eb726c3220
commit
ff67592cbd
@ -3080,6 +3080,35 @@ static const struct flash_info *spi_nor_get_flash_info(struct spi_nor *nor,
|
||||
return info;
|
||||
}
|
||||
|
||||
static void spi_nor_set_mtd_info(struct spi_nor *nor)
|
||||
{
|
||||
struct mtd_info *mtd = &nor->mtd;
|
||||
struct device *dev = nor->dev;
|
||||
|
||||
spi_nor_set_mtd_locking_ops(nor);
|
||||
spi_nor_set_mtd_otp_ops(nor);
|
||||
|
||||
mtd->dev.parent = dev;
|
||||
if (!mtd->name)
|
||||
mtd->name = dev_name(dev);
|
||||
mtd->type = MTD_NORFLASH;
|
||||
mtd->flags = MTD_CAP_NORFLASH;
|
||||
if (nor->info->flags & SPI_NOR_NO_ERASE)
|
||||
mtd->flags |= MTD_NO_ERASE;
|
||||
mtd->writesize = nor->params->writesize;
|
||||
mtd->writebufsize = nor->params->page_size;
|
||||
mtd->size = nor->params->size;
|
||||
mtd->_erase = spi_nor_erase;
|
||||
mtd->_read = spi_nor_read;
|
||||
/* Might be already set by some SST flashes. */
|
||||
if (!mtd->_write)
|
||||
mtd->_write = spi_nor_write;
|
||||
mtd->_suspend = spi_nor_suspend;
|
||||
mtd->_resume = spi_nor_resume;
|
||||
mtd->_get_device = spi_nor_get_device;
|
||||
mtd->_put_device = spi_nor_put_device;
|
||||
}
|
||||
|
||||
int spi_nor_scan(struct spi_nor *nor, const char *name,
|
||||
const struct spi_nor_hwcaps *hwcaps)
|
||||
{
|
||||
@ -3134,26 +3163,11 @@ int spi_nor_scan(struct spi_nor *nor, const char *name,
|
||||
if (info->flags & SPI_NOR_HAS_LOCK)
|
||||
nor->flags |= SNOR_F_HAS_LOCK;
|
||||
|
||||
mtd->_write = spi_nor_write;
|
||||
|
||||
/* Init flash parameters based on flash_info struct and SFDP */
|
||||
ret = spi_nor_init_params(nor);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (!mtd->name)
|
||||
mtd->name = dev_name(dev);
|
||||
mtd->type = MTD_NORFLASH;
|
||||
mtd->writesize = nor->params->writesize;
|
||||
mtd->flags = MTD_CAP_NORFLASH;
|
||||
mtd->size = nor->params->size;
|
||||
mtd->_erase = spi_nor_erase;
|
||||
mtd->_read = spi_nor_read;
|
||||
mtd->_suspend = spi_nor_suspend;
|
||||
mtd->_resume = spi_nor_resume;
|
||||
mtd->_get_device = spi_nor_get_device;
|
||||
mtd->_put_device = spi_nor_put_device;
|
||||
|
||||
if (info->flags & USE_FSR)
|
||||
nor->flags |= SNOR_F_USE_FSR;
|
||||
if (info->flags & SPI_NOR_HAS_TB) {
|
||||
@ -3175,12 +3189,6 @@ int spi_nor_scan(struct spi_nor *nor, const char *name,
|
||||
nor->flags |= SNOR_F_HAS_SR_BP3_BIT6;
|
||||
}
|
||||
|
||||
if (info->flags & SPI_NOR_NO_ERASE)
|
||||
mtd->flags |= MTD_NO_ERASE;
|
||||
|
||||
mtd->dev.parent = dev;
|
||||
mtd->writebufsize = nor->params->page_size;
|
||||
|
||||
if (of_property_read_bool(np, "broken-flash-reset"))
|
||||
nor->flags |= SNOR_F_BROKEN_RESET;
|
||||
|
||||
@ -3204,15 +3212,13 @@ int spi_nor_scan(struct spi_nor *nor, const char *name,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
spi_nor_register_locking_ops(nor);
|
||||
|
||||
/* Send all the required SPI flash commands to initialize device */
|
||||
ret = spi_nor_init(nor);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Configure OTP parameters and ops */
|
||||
spi_nor_otp_init(nor);
|
||||
/* No mtd_info fields should be used up to this point. */
|
||||
spi_nor_set_mtd_info(nor);
|
||||
|
||||
dev_info(dev, "%s (%lld Kbytes)\n", info->name,
|
||||
(long long)mtd->size >> 10);
|
||||
|
@ -552,8 +552,8 @@ int spi_nor_post_bfpt_fixups(struct spi_nor *nor,
|
||||
|
||||
void spi_nor_init_default_locking_ops(struct spi_nor *nor);
|
||||
void spi_nor_try_unlock_all(struct spi_nor *nor);
|
||||
void spi_nor_register_locking_ops(struct spi_nor *nor);
|
||||
void spi_nor_otp_init(struct spi_nor *nor);
|
||||
void spi_nor_set_mtd_locking_ops(struct spi_nor *nor);
|
||||
void spi_nor_set_mtd_otp_ops(struct spi_nor *nor);
|
||||
|
||||
static inline struct spi_nor *mtd_to_spi_nor(struct mtd_info *mtd)
|
||||
{
|
||||
|
@ -480,7 +480,7 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
void spi_nor_otp_init(struct spi_nor *nor)
|
||||
void spi_nor_set_mtd_otp_ops(struct spi_nor *nor)
|
||||
{
|
||||
struct mtd_info *mtd = &nor->mtd;
|
||||
|
||||
|
@ -414,7 +414,7 @@ void spi_nor_try_unlock_all(struct spi_nor *nor)
|
||||
dev_dbg(nor->dev, "Failed to unlock the entire flash memory array\n");
|
||||
}
|
||||
|
||||
void spi_nor_register_locking_ops(struct spi_nor *nor)
|
||||
void spi_nor_set_mtd_locking_ops(struct spi_nor *nor)
|
||||
{
|
||||
struct mtd_info *mtd = &nor->mtd;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user