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>
This commit is contained in:
Linus Walleij 2018-11-27 21:53:57 +01:00 committed by Boris Brezillon
parent c78f59d714
commit b3dd93030c
1 changed files with 12 additions and 2 deletions

View 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]);