@@ -765,6 +765,7 @@ static int __devinit m25p_probe(struct spi_device *spi)
struct m25p *flash;
struct flash_info *info;
unsigned i;
+ int ret;
/* Platform data helps sort out which chip type we have, as
* well as how this board partitions it. If we don't have
@@ -924,13 +925,23 @@ static int __devinit m25p_probe(struct spi_device *spi)
(long long)(parts[i].size >> 10));
}
flash->partitioned = 1;
- return add_mtd_partitions(&flash->mtd, parts, nr_parts);
+ ret = add_mtd_partitions(&flash->mtd, parts, nr_parts);
+ if (!ret)
+ goto out;
+
+ return ret;
}
} else if (data && data->nr_parts)
dev_warn(&spi->dev, "ignoring %d default partitions on %s\n",
data->nr_parts, data->name);
- return add_mtd_device(&flash->mtd) == 1 ? -ENODEV : 0;
+ ret = add_mtd_device(&flash->mtd);
+
+out:
+ if (data->setup && !ret)
+ (data->setup)(&flash->mtd, (void *)data->context);
+
+ return (ret == 1) ? -ENODEV : 0;
}
@@ -24,6 +24,8 @@ struct flash_platform_data {
unsigned int nr_parts;
char *type;
+ void (*setup)(struct mtd_info *, void *context);
+ void *context;
/* we'll likely add more ... use JEDEC IDs, etc */
};