summaryrefslogtreecommitdiffstats
path: root/drivers/mtd/maps
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2018-11-27 21:53:57 +0100
committerBoris Brezillon <boris.brezillon@bootlin.com>2018-12-06 16:57:13 +0100
commitb3dd93030c3cdd3f191aa170ccafc2b4d316f4cc (patch)
tree0ecdf1c3a734defbaa55d01aff9d76febf34c50f /drivers/mtd/maps
parentmtd: use DEFINE_SHOW_ATTRIBUTE() instead of open-coding it (diff)
downloadlinux-b3dd93030c3cdd3f191aa170ccafc2b4d316f4cc.tar.xz
linux-b3dd93030c3cdd3f191aa170ccafc2b4d316f4cc.zip
mtd: maps: physmap: Leave assigned complex mappings
SoC-specific drivers might provide their own map->xxx() implementations, and calling simple_map_init() unconditionally will override those implementations. Make sure map->read is NULL before calling simple_map_init(). Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
Diffstat (limited to 'drivers/mtd/maps')
-rw-r--r--drivers/mtd/maps/physmap-core.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/mtd/maps/physmap-core.c b/drivers/mtd/maps/physmap-core.c
index e8c3b250d842..d9a3e4bebe5d 100644
--- a/drivers/mtd/maps/physmap-core.c
+++ b/drivers/mtd/maps/physmap-core.c
@@ -514,10 +514,20 @@ static int physmap_flash_probe(struct platform_device *dev)
err = physmap_addr_gpios_map_init(&info->maps[i]);
if (err)
goto err_out;
- } else {
- simple_map_init(&info->maps[i]);
}
+#ifdef CONFIG_MTD_COMPLEX_MAPPINGS
+ /*
+ * Only use the simple_map implementation if map hooks are not
+ * implemented. Since map->read() is mandatory checking for its
+ * presence is enough.
+ */
+ if (!info->maps[i].read)
+ simple_map_init(&info->maps[i]);
+#else
+ simple_map_init(&info->maps[i]);
+#endif
+
if (info->probe_type) {
info->mtds[i] = do_map_probe(info->probe_type,
&info->maps[i]);