}
 
        /* usb private data */
-       priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+       priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
        if (!priv) {
                dev_err(&pdev->dev, "Could not allocate priv\n");
                return -ENOMEM;
        }
 
-       priv->base = ioremap_nocache(res->start, resource_size(res));
+       priv->base = devm_request_and_ioremap(&pdev->dev, res);
        if (!priv->base) {
                dev_err(&pdev->dev, "ioremap error.\n");
-               ret = -ENOMEM;
-               goto probe_end_kfree;
+               return -ENOMEM;
        }
 
        /*
        /* call pipe and module init */
        ret = usbhs_pipe_probe(priv);
        if (ret < 0)
-               goto probe_end_iounmap;
+               return ret;
 
        ret = usbhs_fifo_probe(priv);
        if (ret < 0)
        usbhs_fifo_remove(priv);
 probe_end_pipe_exit:
        usbhs_pipe_remove(priv);
-probe_end_iounmap:
-       iounmap(priv->base);
-probe_end_kfree:
-       kfree(priv);
 
        dev_info(&pdev->dev, "probe failed\n");
 
        usbhs_mod_remove(priv);
        usbhs_fifo_remove(priv);
        usbhs_pipe_remove(priv);
-       iounmap(priv->base);
-       kfree(priv);
 
        return 0;
 }