Merge tag 'usb-5.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
[linux-2.6-microblaze.git] / drivers / usb / gadget / udc / bdc / bdc_core.c
index 0bef6b3..fa1a390 100644 (file)
@@ -488,27 +488,14 @@ static int bdc_probe(struct platform_device *pdev)
        int irq;
        u32 temp;
        struct device *dev = &pdev->dev;
-       struct clk *clk;
        int phy_num;
 
        dev_dbg(dev, "%s()\n", __func__);
 
-       clk = devm_clk_get_optional(dev, "sw_usbd");
-       if (IS_ERR(clk))
-               return PTR_ERR(clk);
-
-       ret = clk_prepare_enable(clk);
-       if (ret) {
-               dev_err(dev, "could not enable clock\n");
-               return ret;
-       }
-
        bdc = devm_kzalloc(dev, sizeof(*bdc), GFP_KERNEL);
        if (!bdc)
                return -ENOMEM;
 
-       bdc->clk = clk;
-
        bdc->regs = devm_platform_ioremap_resource(pdev, 0);
        if (IS_ERR(bdc->regs))
                return PTR_ERR(bdc->regs);
@@ -545,10 +532,20 @@ static int bdc_probe(struct platform_device *pdev)
                }
        }
 
+       bdc->clk = devm_clk_get_optional(dev, "sw_usbd");
+       if (IS_ERR(bdc->clk))
+               return PTR_ERR(bdc->clk);
+
+       ret = clk_prepare_enable(bdc->clk);
+       if (ret) {
+               dev_err(dev, "could not enable clock\n");
+               return ret;
+       }
+
        ret = bdc_phy_init(bdc);
        if (ret) {
                dev_err(bdc->dev, "BDC phy init failure:%d\n", ret);
-               return ret;
+               goto disable_clk;
        }
 
        temp = bdc_readl(bdc->regs, BDC_BDCCAP1);
@@ -560,7 +557,8 @@ static int bdc_probe(struct platform_device *pdev)
                if (ret) {
                        dev_err(dev,
                                "No suitable DMA config available, abort\n");
-                       return -ENOTSUPP;
+                       ret = -ENOTSUPP;
+                       goto phycleanup;
                }
                dev_dbg(dev, "Using 32-bit address\n");
        }
@@ -580,6 +578,8 @@ cleanup:
        bdc_hw_exit(bdc);
 phycleanup:
        bdc_phy_exit(bdc);
+disable_clk:
+       clk_disable_unprepare(bdc->clk);
        return ret;
 }