You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.1 KiB
Diff
47 lines
1.1 KiB
Diff
10 years ago
|
--- 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);
|
||
|
|
||
|
/*
|