goto exit;
        }
 
-       if (!request_mem_region(res_mem->start, resource_size(res_mem),
-                               dev_name(&pdev->dev))) {
-               err = -EBUSY;
-               goto exit;
-       }
-
        /* request peripheral pins */
        err = peripheral_request_list(pdata, dev_name(&pdev->dev));
        if (err)
-               goto exit_mem_release;
+               goto exit;
 
        dev = alloc_bfin_candev();
        if (!dev) {
        }
 
        priv = netdev_priv(dev);
-       priv->membase = (void __iomem *)res_mem->start;
+
+       priv->membase = devm_ioremap_resource(&pdev->dev, res_mem);
+       if (IS_ERR(priv->membase)) {
+               err = PTR_ERR(priv->membase);
+               goto exit_peri_pin_free;
+       }
+
        priv->rx_irq = rx_irq->start;
        priv->tx_irq = tx_irq->start;
        priv->err_irq = err_irq->start;
        free_candev(dev);
 exit_peri_pin_free:
        peripheral_free_list(pdata);
-exit_mem_release:
-       release_mem_region(res_mem->start, resource_size(res_mem));
 exit:
        return err;
 }
 {
        struct net_device *dev = platform_get_drvdata(pdev);
        struct bfin_can_priv *priv = netdev_priv(dev);
-       struct resource *res;
 
        bfin_can_set_reset_mode(dev);
 
        unregister_candev(dev);
 
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       release_mem_region(res->start, resource_size(res));
-
        peripheral_free_list(priv->pin_list);
 
        free_candev(dev);