OSDN Git Service

mtd: maps: physmap: Leave assigned complex mappings
authorLinus Walleij <linus.walleij@linaro.org>
Tue, 27 Nov 2018 20:53:57 +0000 (21:53 +0100)
committerBoris Brezillon <boris.brezillon@bootlin.com>
Thu, 6 Dec 2018 15:57:13 +0000 (16:57 +0100)
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>
drivers/mtd/maps/physmap-core.c

index e8c3b25..d9a3e4b 100644 (file)
@@ -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]);