struct spdif_in_dev *host;
        struct spear_spdif_platform_data *pdata;
        struct resource *res, *res_fifo;
+       void __iomem *io_base;
        int ret;
 
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       if (!res)
-               return -EINVAL;
+       io_base = devm_ioremap_resource(&pdev->dev, res);
+       if (IS_ERR(io_base))
+               return PTR_ERR(io_base);
 
        res_fifo = platform_get_resource(pdev, IORESOURCE_IO, 0);
        if (!res_fifo)
                return -EINVAL;
 
-       if (!devm_request_mem_region(&pdev->dev, res->start,
-                               resource_size(res), pdev->name)) {
-               dev_warn(&pdev->dev, "Failed to get memory resourse\n");
-               return -ENOENT;
-       }
-
        host = devm_kzalloc(&pdev->dev, sizeof(*host), GFP_KERNEL);
        if (!host) {
                dev_warn(&pdev->dev, "kzalloc fail\n");
                return -ENOMEM;
        }
 
-       host->io_base = devm_ioremap(&pdev->dev, res->start,
-                               resource_size(res));
-       if (!host->io_base) {
-               dev_warn(&pdev->dev, "ioremap failed\n");
-               return -ENOMEM;
-       }
-
+       host->io_base = io_base;
        host->irq = platform_get_irq(pdev, 0);
        if (host->irq < 0)
                return -EINVAL;