Commit c7f6dc60 authored by Boris Brezillon's avatar Boris Brezillon

mtd: maps: physmap: Use platform_get_resource() to retrieve iomem resources

Stop manipulating the dev->resource array directly and use the
platform_get_resource() helper instead.

While at it, fix the loop check so that we never overflow the info->maps
and info->mtds array even if the number of resources attached to the
platform dev is higher than MAX_RESOURCES.
Signed-off-by: default avatarBoris Brezillon <boris.brezillon@bootlin.com>
Reviewed-by: default avatarRicardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 00142d6f
...@@ -122,23 +122,28 @@ static int physmap_flash_probe(struct platform_device *dev) ...@@ -122,23 +122,28 @@ static int physmap_flash_probe(struct platform_device *dev)
platform_set_drvdata(dev, info); platform_set_drvdata(dev, info);
for (i = 0; i < dev->num_resources; i++) { for (i = 0; i < MAX_RESOURCES; i++) {
struct resource *res;
res = platform_get_resource(dev, IORESOURCE_MEM, i);
if (!res)
break;
printk(KERN_NOTICE "physmap platform flash device: %.8llx at %.8llx\n", printk(KERN_NOTICE "physmap platform flash device: %.8llx at %.8llx\n",
(unsigned long long)resource_size(&dev->resource[i]), (unsigned long long)resource_size(res),
(unsigned long long)dev->resource[i].start); (unsigned long long)res->start);
if (!devm_request_mem_region(&dev->dev, if (!devm_request_mem_region(&dev->dev, res->start,
dev->resource[i].start, resource_size(res),
resource_size(&dev->resource[i]), dev_name(&dev->dev))) {
dev_name(&dev->dev))) {
dev_err(&dev->dev, "Could not reserve memory region\n"); dev_err(&dev->dev, "Could not reserve memory region\n");
err = -ENOMEM; err = -ENOMEM;
goto err_out; goto err_out;
} }
info->maps[i].name = dev_name(&dev->dev); info->maps[i].name = dev_name(&dev->dev);
info->maps[i].phys = dev->resource[i].start; info->maps[i].phys = res->start;
info->maps[i].size = resource_size(&dev->resource[i]); info->maps[i].size = resource_size(res);
info->maps[i].bankwidth = physmap_data->width; info->maps[i].bankwidth = physmap_data->width;
info->maps[i].set_vpp = physmap_set_vpp; info->maps[i].set_vpp = physmap_set_vpp;
info->maps[i].pfow_base = physmap_data->pfow_base; info->maps[i].pfow_base = physmap_data->pfow_base;
...@@ -172,9 +177,11 @@ static int physmap_flash_probe(struct platform_device *dev) ...@@ -172,9 +177,11 @@ static int physmap_flash_probe(struct platform_device *dev)
info->mtds[i]->dev.parent = &dev->dev; info->mtds[i]->dev.parent = &dev->dev;
} }
if (devices_found == 1) { if (!devices_found) {
err = -ENODEV;
} else if (devices_found == 1) {
info->cmtd = info->mtds[0]; info->cmtd = info->mtds[0];
} else if (devices_found > 1) { } else {
/* /*
* We detected multiple devices. Concatenate them together. * We detected multiple devices. Concatenate them together.
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment