lkml.org 
[lkml]   [2019]   [Aug]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RESEND PATCH v3 19/20] mtd: spi-nor: Introduce spi_nor_get_flash_info()
    Date
    From: Tudor Ambarus <tudor.ambarus@microchip.com>

    Dedicate a function for getting the pointer to the flash_info
    const struct. Trim a bit the spi_nor_scan() huge function.

    Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com>
    Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
    ---
    v3: no changes

    drivers/mtd/spi-nor/spi-nor.c | 76 +++++++++++++++++++++++++------------------
    1 file changed, 44 insertions(+), 32 deletions(-)

    diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
    index d13317d1f372..ec70b58294ec 100644
    --- a/drivers/mtd/spi-nor/spi-nor.c
    +++ b/drivers/mtd/spi-nor/spi-nor.c
    @@ -4766,10 +4766,50 @@ static int spi_nor_set_addr_width(struct spi_nor *nor)
    return 0;
    }

    +static const struct flash_info *spi_nor_get_flash_info(struct spi_nor *nor,
    + const char *name)
    +{
    + const struct flash_info *info = NULL;
    +
    + if (name)
    + info = spi_nor_match_id(name);
    + /* Try to auto-detect if chip name wasn't specified or not found */
    + if (!info)
    + info = spi_nor_read_id(nor);
    + if (IS_ERR_OR_NULL(info))
    + return ERR_PTR(-ENOENT);
    +
    + /*
    + * If caller has specified name of flash model that can normally be
    + * detected using JEDEC, let's verify it.
    + */
    + if (name && info->id_len) {
    + const struct flash_info *jinfo;
    +
    + jinfo = spi_nor_read_id(nor);
    + if (IS_ERR(jinfo)) {
    + return jinfo;
    + } else if (jinfo != info) {
    + /*
    + * JEDEC knows better, so overwrite platform ID. We
    + * can't trust partitions any longer, but we'll let
    + * mtd apply them anyway, since some partitions may be
    + * marked read-only, and we don't want to lose that
    + * information, even if it's not 100% accurate.
    + */
    + dev_warn(nor->dev, "found %s, expected %s\n",
    + jinfo->name, info->name);
    + info = jinfo;
    + }
    + }
    +
    + return info;
    +}
    +
    int spi_nor_scan(struct spi_nor *nor, const char *name,
    const struct spi_nor_hwcaps *hwcaps)
    {
    - const struct flash_info *info = NULL;
    + const struct flash_info *info;
    struct device *dev = nor->dev;
    struct mtd_info *mtd = &nor->mtd;
    struct device_node *np = spi_nor_get_flash_node(nor);
    @@ -4800,37 +4840,9 @@ int spi_nor_scan(struct spi_nor *nor, const char *name,
    if (!nor->bouncebuf)
    return -ENOMEM;

    - if (name)
    - info = spi_nor_match_id(name);
    - /* Try to auto-detect if chip name wasn't specified or not found */
    - if (!info)
    - info = spi_nor_read_id(nor);
    - if (IS_ERR_OR_NULL(info))
    - return -ENOENT;
    -
    - /*
    - * If caller has specified name of flash model that can normally be
    - * detected using JEDEC, let's verify it.
    - */
    - if (name && info->id_len) {
    - const struct flash_info *jinfo;
    -
    - jinfo = spi_nor_read_id(nor);
    - if (IS_ERR(jinfo)) {
    - return PTR_ERR(jinfo);
    - } else if (jinfo != info) {
    - /*
    - * JEDEC knows better, so overwrite platform ID. We
    - * can't trust partitions any longer, but we'll let
    - * mtd apply them anyway, since some partitions may be
    - * marked read-only, and we don't want to lose that
    - * information, even if it's not 100% accurate.
    - */
    - dev_warn(dev, "found %s, expected %s\n",
    - jinfo->name, info->name);
    - info = jinfo;
    - }
    - }
    + info = spi_nor_get_flash_info(nor, name);
    + if (IS_ERR(info))
    + return PTR_ERR(info);

    nor->info = info;

    --
    2.9.5
    \
     
     \ /
      Last update: 2019-08-26 14:09    [W:5.155 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site