if (priv->clk)
                clk_put(priv->clk);
 
-       if (priv->mmio)
-               iounmap(priv->mmio);
-
        if (priv->wq)
                destroy_workqueue(priv->wq);
 
        struct platform_device *pdev = to_platform_device(dev);
        struct device_node *node = dev->of_node;
        struct tilcdc_drm_private *priv;
-       struct resource *res;
        u32 bpp = 0;
        int ret;
 
                goto init_failed;
        }
 
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       if (!res) {
-               dev_err(dev, "failed to get memory resource\n");
-               ret = -EINVAL;
-               goto init_failed;
-       }
-
-       priv->mmio = ioremap(res->start, resource_size(res));
-       if (!priv->mmio) {
-               dev_err(dev, "failed to ioremap\n");
-               ret = -ENOMEM;
+       priv->mmio = devm_platform_ioremap_resource(pdev, 0);
+       if (IS_ERR(priv->mmio)) {
+               dev_err(dev, "failed to request / ioremap\n");
+               ret = PTR_ERR(priv->mmio);
                goto init_failed;
        }