Merge 3.13-rc5 into usb-next
[platform/adaptation/renesas_rcar/renesas_kernel.git] / drivers / usb / host / ohci-at91.c
index 8c356af..2d0ee5e 100644 (file)
@@ -152,49 +152,42 @@ static int usb_hcd_at91_probe(const struct hc_driver *driver,
                return irq;
        }
 
-       hcd = usb_create_hcd(driver, &pdev->dev, "at91");
+       hcd = usb_create_hcd(driver, dev, "at91");
        if (!hcd)
                return -ENOMEM;
        hcd->rsrc_start = res->start;
        hcd->rsrc_len = resource_size(res);
 
-       if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) {
-               pr_debug("request_mem_region failed\n");
-               retval = -EBUSY;
-               goto err1;
+       hcd->regs = devm_ioremap_resource(dev, res);
+       if (IS_ERR(hcd->regs)) {
+               retval = PTR_ERR(hcd->regs);
+               goto err;
        }
 
-       hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len);
-       if (!hcd->regs) {
-               pr_debug("ioremap failed\n");
-               retval = -EIO;
-               goto err2;
-       }
-
-       iclk = clk_get(&pdev->dev, "ohci_clk");
+       iclk = devm_clk_get(dev, "ohci_clk");
        if (IS_ERR(iclk)) {
-               dev_err(&pdev->dev, "failed to get ohci_clk\n");
+               dev_err(dev, "failed to get ohci_clk\n");
                retval = PTR_ERR(iclk);
-               goto err3;
+               goto err;
        }
-       fclk = clk_get(&pdev->dev, "uhpck");
+       fclk = devm_clk_get(dev, "uhpck");
        if (IS_ERR(fclk)) {
-               dev_err(&pdev->dev, "failed to get uhpck\n");
+               dev_err(dev, "failed to get uhpck\n");
                retval = PTR_ERR(fclk);
-               goto err4;
+               goto err;
        }
-       hclk = clk_get(&pdev->dev, "hclk");
+       hclk = devm_clk_get(dev, "hclk");
        if (IS_ERR(hclk)) {
-               dev_err(&pdev->dev, "failed to get hclk\n");
+               dev_err(dev, "failed to get hclk\n");
                retval = PTR_ERR(hclk);
-               goto err5;
+               goto err;
        }
        if (IS_ENABLED(CONFIG_COMMON_CLK)) {
-               uclk = clk_get(&pdev->dev, "usb_clk");
+               uclk = devm_clk_get(dev, "usb_clk");
                if (IS_ERR(uclk)) {
-                       dev_err(&pdev->dev, "failed to get uclk\n");
+                       dev_err(dev, "failed to get uclk\n");
                        retval = PTR_ERR(uclk);
-                       goto err6;
+                       goto err;
                }
        }
 
@@ -205,27 +198,14 @@ static int usb_hcd_at91_probe(const struct hc_driver *driver,
 
        retval = usb_add_hcd(hcd, irq, IRQF_SHARED);
        if (retval == 0)
+               device_wakeup_enable(hcd->self.controller);
                return retval;
+       }
 
        /* Error handling */
        at91_stop_hc(pdev);
 
-       if (IS_ENABLED(CONFIG_COMMON_CLK))
-               clk_put(uclk);
- err6:
-       clk_put(hclk);
- err5:
-       clk_put(fclk);
- err4:
-       clk_put(iclk);
-
- err3:
-       iounmap(hcd->regs);
-
- err2:
-       release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
-
- err1:
+ err:
        usb_put_hcd(hcd);
        return retval;
 }
@@ -248,16 +228,7 @@ static void usb_hcd_at91_remove(struct usb_hcd *hcd,
 {
        usb_remove_hcd(hcd);
        at91_stop_hc(pdev);
-       iounmap(hcd->regs);
-       release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
        usb_put_hcd(hcd);
-
-       if (IS_ENABLED(CONFIG_COMMON_CLK))
-               clk_put(uclk);
-       clk_put(hclk);
-       clk_put(fclk);
-       clk_put(iclk);
-       fclk = iclk = hclk = NULL;
 }
 
 /*-------------------------------------------------------------------------*/
@@ -639,10 +610,17 @@ ohci_hcd_at91_drv_suspend(struct platform_device *pdev, pm_message_t mesg)
 {
        struct usb_hcd  *hcd = platform_get_drvdata(pdev);
        struct ohci_hcd *ohci = hcd_to_ohci(hcd);
+       bool            do_wakeup = device_may_wakeup(&pdev->dev);
+       int             ret;
 
-       if (device_may_wakeup(&pdev->dev))
+       if (do_wakeup)
                enable_irq_wake(hcd->irq);
 
+       ret = ohci_suspend(hcd, do_wakeup);
+       if (ret) {
+               disable_irq_wake(hcd->irq);
+               return ret;
+       }
        /*
         * The integrated transceivers seem unable to notice disconnect,
         * reconnect, or wakeup without the 48 MHz clock active.  so for
@@ -661,7 +639,7 @@ ohci_hcd_at91_drv_suspend(struct platform_device *pdev, pm_message_t mesg)
                at91_stop_clock();
        }
 
-       return 0;
+       return ret;
 }
 
 static int ohci_hcd_at91_drv_resume(struct platform_device *pdev)