--- a/drivers/mtd/devices/m25p80.c +++ b/drivers/mtd/devices/m25p80.c @@ -310,11 +310,21 @@ static const struct spi_device_id m25p_i }; MODULE_DEVICE_TABLE(spi, m25p_ids); +static const struct of_device_id m25p_of_table[] = { + /* + * Generic compatibility for SPI NOR that can be identified by the + * JEDEC READ ID opcode (0x9F). Use this, if possible. + */ + { .compatible = "jedec,spi-nor" }, + {} +}; +MODULE_DEVICE_TABLE(of, m25p_of_table); static struct spi_driver m25p80_driver = { .driver = { .name = "m25p80", .owner = THIS_MODULE, + .of_match_table = m25p_of_table, }, .id_table = m25p_ids, .probe = m25p_probe, --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c @@ -927,8 +927,11 @@ int spi_nor_scan(struct spi_nor *nor, co if (ret) return ret; - id = spi_nor_match_id(name); + if (name) + id = spi_nor_match_id(name); if (!id) + id = nor->read_id(nor); + if (IS_ERR_OR_NULL(id)) return -ENOENT; info = (void *)id->driver_data;