--- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c @@ -925,29 +925,23 @@ int spi_nor_scan(struct spi_nor *nor, co if (ret) return ret; - info = (void *)id->driver_data; - - if (info->jedec_id) { - const struct spi_device_id *jid; - - jid = nor->read_id(nor); - if (IS_ERR(jid)) { - return PTR_ERR(jid); - } else if (jid != id) { - /* - * 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", - jid->name, id->name); - id = jid; - info = (void *)jid->driver_data; + if (id) { + info = (void *)id->driver_data; + if (info->jedec_id) { + dev_warn(dev, + "passed SPI device ID (%s) contains JEDEC, ignoring it, driver should be fixed!\n", + id->name); + id = NULL; } } + if (!id) { + id = nor->read_id(nor); + if (IS_ERR(id)) + return PTR_ERR(id); + } + info = (void *)id->driver_data; + mutex_init(&nor->lock); /*