plat-ram driver
Sascha Hauer
s.hauer at pengutronix.de
Mon Nov 28 08:30:03 EST 2005
Hi list and Ben,
I was half way through implementing a mapping driver which allows
initialization of a mtd device using a platform_device when I found the
plat-ram.c driver. With some small changes one could use the driver for
flash devices as well.
Would a patch like this be acceptible? Maybe we should rename the driver
to something like plat-mtd. I did not do this to keep the patch small,
but I would do the changes if there is a chance to get this upstream.
BTW there is a goto exit_free missing when add_mtd_device fails, the
attached patch fixes this.
Sascha Hauer
Index: include/linux/mtd/plat-ram.h
===================================================================
--- a/include/linux/mtd/plat-ram.h (revision 1061)
+++ b/include/linux/mtd/plat-ram.h (working copy)
@@ -22,7 +22,8 @@
struct platdata_mtd_ram {
char *mapname;
- char **probes;
+ char **mtd_probes;
+ char **part_probes;
struct mtd_partition *partitions;
int nr_partitions;
int bankwidth;
Index: drivers/mtd/maps/plat-ram.c
===================================================================
--- a/drivers/mtd/maps/plat-ram.c (revision 1061)
+++ b/drivers/mtd/maps/plat-ram.c (working copy)
@@ -134,6 +134,7 @@
struct platdata_mtd_ram *pdata;
struct platram_info *info;
struct resource *res;
+ char **type;
int err = 0;
dev_dbg(dev, "probe entered\n");
@@ -202,9 +203,14 @@
dev_dbg(dev, "initialised map, probing for mtd\n");
- /* probe for the right mtd map driver */
+ /* probe for the right map driver */
+ if(pdata->mtd_probes) {
+ type = pdata->mtd_probes;
+ for(; !info->mtd && *type; type++)
+ info->mtd = do_map_probe(*type, &info->map);
+ } else
+ do_map_probe("map_ram", &info->map);
- info->mtd = do_map_probe("map_ram" , &info->map);
if (info->mtd == NULL) {
dev_err(dev, "failed to probe for map_ram\n");
err = -ENOMEM;
@@ -219,11 +225,11 @@
* to add this device whole */
#ifdef CONFIG_MTD_PARTITIONS
- if (pdata->nr_partitions > 0) {
+ {
const char **probes = { NULL };
- if (pdata->probes)
- probes = (const char **)pdata->probes;
+ if (pdata->part_probes)
+ probes = (const char **)pdata->part_probes;
err = parse_mtd_partitions(info->mtd, probes,
&info->partitions, 0);
@@ -237,6 +243,7 @@
if (add_mtd_device(info->mtd)) {
dev_err(dev, "add_mtd_device() failed\n");
err = -ENOMEM;
+ goto exit_free;
}
dev_info(dev, "registered mtd device\n");
More information about the linux-mtd
mailing list