Do the clock initialization as the first thing. Signed-off-by: Sebastian Andrzej Siewior <sebastian@xxxxxxxxxxxxx> --- drivers/usb/host/ehci-sh.c | 51 ++++++++++++++++++++----------------------- 1 files changed, 24 insertions(+), 27 deletions(-) diff --git a/drivers/usb/host/ehci-sh.c b/drivers/usb/host/ehci-sh.c index 86a95bb..a1a6935 100644 --- a/drivers/usb/host/ehci-sh.c +++ b/drivers/usb/host/ehci-sh.c @@ -106,6 +106,24 @@ static int ehci_hcd_sh_probe(struct platform_device *pdev) if (usb_disabled()) return -ENODEV; + priv = kmalloc(sizeof(struct ehci_sh_priv), GFP_KERNEL); + if (!priv) { + dev_dbg(&pdev->dev, "error allocating priv data\n"); + return -ENOMEM; + } + + /* These are optional, we don't care if they fail */ + priv->fclk = clk_get(&pdev->dev, "usb_fck"); + if (IS_ERR(priv->fclk)) + priv->fclk = NULL; + + priv->iclk = clk_get(&pdev->dev, "usb_ick"); + if (IS_ERR(priv->iclk)) + priv->iclk = NULL; + + clk_enable(priv->fclk); + clk_enable(priv->iclk); + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) { dev_err(&pdev->dev, @@ -149,25 +167,6 @@ static int ehci_hcd_sh_probe(struct platform_device *pdev) goto fail_ioremap; } - priv = kmalloc(sizeof(struct ehci_sh_priv), GFP_KERNEL); - if (!priv) { - dev_dbg(&pdev->dev, "error allocating priv data\n"); - ret = -ENOMEM; - goto fail_alloc; - } - - /* These are optional, we don't care if they fail */ - priv->fclk = clk_get(&pdev->dev, "usb_fck"); - if (IS_ERR(priv->fclk)) - priv->fclk = NULL; - - priv->iclk = clk_get(&pdev->dev, "usb_ick"); - if (IS_ERR(priv->iclk)) - priv->iclk = NULL; - - clk_enable(priv->fclk); - clk_enable(priv->iclk); - ret = usb_add_hcd(hcd, irq, IRQF_DISABLED | IRQF_SHARED); if (ret != 0) { dev_err(&pdev->dev, "Failed to add hcd"); @@ -180,14 +179,6 @@ static int ehci_hcd_sh_probe(struct platform_device *pdev) return ret; fail_add_hcd: - clk_disable(priv->iclk); - clk_disable(priv->fclk); - - clk_put(priv->iclk); - clk_put(priv->fclk); - - kfree(priv); -fail_alloc: iounmap(hcd->regs); fail_ioremap: release_mem_region(hcd->rsrc_start, hcd->rsrc_len); @@ -196,6 +187,12 @@ fail_request_resource: fail_create_hcd: dev_err(&pdev->dev, "init %s fail, %d\n", dev_name(&pdev->dev), ret); + clk_disable(priv->iclk); + clk_disable(priv->fclk); + + clk_put(priv->iclk); + clk_put(priv->fclk); + kfree(priv); return ret; } -- 1.7.5.4 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html