--- /dev/null
+--- a/drivers/mtd/devices/m25p80.c
++++ b/drivers/mtd/devices/m25p80.c
+@@ -192,6 +192,7 @@ static ssize_t m25p80_read(struct spi_no
+ */
+ static int m25p_probe(struct spi_device *spi)
+ {
++ struct mtd_part_parser_data ppdata = {0,};
+ struct flash_platform_data *data;
+ struct m25p *flash;
+ struct spi_nor *nor;
+@@ -244,8 +245,11 @@ static int m25p_probe(struct spi_device
+ if (ret)
+ return ret;
+
+- return mtd_device_register(&nor->mtd, data ? data->parts : NULL,
+- data ? data->nr_parts : 0);
++ return mtd_device_parse_register(&nor->mtd,
++ data ? data->part_probes : NULL,
++ &ppdata,
++ data ? data->parts : NULL,
++ data ? data->nr_parts : 0);
+ }
+
+
+--- a/include/linux/spi/flash.h
++++ b/include/linux/spi/flash.h
+@@ -24,6 +24,7 @@ struct flash_platform_data {
+ unsigned int nr_parts;
+
+ char *type;
++ const char **part_probes;
+
+ /* we'll likely add more ... use JEDEC IDs, etc */
+ };