diff --git a/drivers/media/platform/rockchip/isp/dev.c b/drivers/media/platform/rockchip/isp/dev.c index fb9816b83135..27253a83b25f 100644 --- a/drivers/media/platform/rockchip/isp/dev.c +++ b/drivers/media/platform/rockchip/isp/dev.c @@ -34,6 +34,7 @@ #include #include +#include #include #include #include @@ -992,9 +993,21 @@ static int rkisp_plat_probe(struct platform_device *pdev) dev_warn(dev, "Missing rockchip,grf property\n"); res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (!res) { + dev_err(dev, "get resource failed\n"); + return -EINVAL; + } isp_dev->base_addr = devm_ioremap_resource(dev, res); - if (IS_ERR(isp_dev->base_addr)) + if (PTR_ERR(isp_dev->base_addr) == -EBUSY) { + resource_size_t offset = res->start; + resource_size_t size = resource_size(res); + + isp_dev->base_addr = devm_ioremap(dev, offset, size); + } + if (IS_ERR(isp_dev->base_addr)) { + dev_err(dev, "ioremap failed\n"); return PTR_ERR(isp_dev->base_addr); + } match_data = match->data; isp_dev->mipi_irq = -1; diff --git a/drivers/media/platform/rockchip/ispp/dev.c b/drivers/media/platform/rockchip/ispp/dev.c index 63e737b6ebd0..124dc024b892 100644 --- a/drivers/media/platform/rockchip/ispp/dev.c +++ b/drivers/media/platform/rockchip/ispp/dev.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -324,9 +325,19 @@ static int rkispp_plat_probe(struct platform_device *pdev) match_data = match->data; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - ispp_dev->base_addr = devm_ioremap_resource(dev, res); - if (IS_ERR(ispp_dev->base_addr)) { + if (!res) { dev_err(dev, "get resource failed\n"); + return -EINVAL; + } + ispp_dev->base_addr = devm_ioremap_resource(dev, res); + if (PTR_ERR(ispp_dev->base_addr) == -EBUSY) { + resource_size_t offset = res->start; + resource_size_t size = resource_size(res); + + ispp_dev->base_addr = devm_ioremap(dev, offset, size); + } + if (IS_ERR(ispp_dev->base_addr)) { + dev_err(dev, "ioremap failed\n"); return PTR_ERR(ispp_dev->base_addr); }