|
@@ -938,13 +938,21 @@ int spi_nor_scan(struct spi_nor *nor, const char *name, enum read_mode mode)
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
|
|
|
- id = spi_nor_match_id(name);
|
|
|
- if (!id)
|
|
|
+ /* Try to auto-detect if chip name wasn't specified */
|
|
|
+ if (!name)
|
|
|
+ id = spi_nor_read_id(nor);
|
|
|
+ else
|
|
|
+ id = spi_nor_match_id(name);
|
|
|
+ if (IS_ERR_OR_NULL(id))
|
|
|
return -ENOENT;
|
|
|
|
|
|
info = (void *)id->driver_data;
|
|
|
|
|
|
- if (info->id_len) {
|
|
|
+ /*
|
|
|
+ * 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 spi_device_id *jid;
|
|
|
|
|
|
jid = spi_nor_read_id(nor);
|