]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
usb: ohci-nxp: Use helper function devm_clk_get_enabled()
authorZhang Zekun <zhangzekun11@huawei.com>
Tue, 30 Dec 2025 13:41:22 +0000 (08:41 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 19 Jan 2026 12:12:03 +0000 (13:12 +0100)
[ Upstream commit c146ede472717f352b7283a525bd9a1a2b15e2cf ]

devm_clk_get() and clk_prepare_enable() can be replaced by helper
function devm_clk_get_enabled(). Let's use devm_clk_get_enabled() to
simplify code and avoid calling clk_disable_unprepare().

Signed-off-by: Zhang Zekun <zhangzekun11@huawei.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Link: https://lore.kernel.org/r/20240902123020.29267-3-zhangzekun11@huawei.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Stable-dep-of: b4c61e542faf ("usb: ohci-nxp: fix device leak on probe failure")
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/ohci-nxp.c

index 106a6bcefb0871991099c0e229e8b379151ae0d0..f7f85fc9ce8f61f092a7577d966d98b1892c0bbc 100644 (file)
@@ -51,8 +51,6 @@ static struct hc_driver __read_mostly ohci_nxp_hc_driver;
 
 static struct i2c_client *isp1301_i2c_client;
 
-static struct clk *usb_host_clk;
-
 static void isp1301_configure_lpc32xx(void)
 {
        /* LPC32XX only supports DAT_SE0 USB mode */
@@ -155,6 +153,7 @@ static int ohci_hcd_nxp_probe(struct platform_device *pdev)
        struct resource *res;
        int ret = 0, irq;
        struct device_node *isp1301_node;
+       struct clk *usb_host_clk;
 
        if (pdev->dev.of_node) {
                isp1301_node = of_parse_phandle(pdev->dev.of_node,
@@ -180,26 +179,20 @@ static int ohci_hcd_nxp_probe(struct platform_device *pdev)
        }
 
        /* Enable USB host clock */
-       usb_host_clk = devm_clk_get(&pdev->dev, NULL);
+       usb_host_clk = devm_clk_get_enabled(&pdev->dev, NULL);
        if (IS_ERR(usb_host_clk)) {
-               dev_err(&pdev->dev, "failed to acquire USB OHCI clock\n");
+               dev_err(&pdev->dev, "failed to acquire and start USB OHCI clock\n");
                ret = PTR_ERR(usb_host_clk);
                goto fail_disable;
        }
 
-       ret = clk_prepare_enable(usb_host_clk);
-       if (ret < 0) {
-               dev_err(&pdev->dev, "failed to start USB OHCI clock\n");
-               goto fail_disable;
-       }
-
        isp1301_configure();
 
        hcd = usb_create_hcd(driver, &pdev->dev, dev_name(&pdev->dev));
        if (!hcd) {
                dev_err(&pdev->dev, "Failed to allocate HC buffer\n");
                ret = -ENOMEM;
-               goto fail_hcd;
+               goto fail_disable;
        }
 
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -230,8 +223,6 @@ static int ohci_hcd_nxp_probe(struct platform_device *pdev)
        ohci_nxp_stop_hc();
 fail_resource:
        usb_put_hcd(hcd);
-fail_hcd:
-       clk_disable_unprepare(usb_host_clk);
 fail_disable:
        isp1301_i2c_client = NULL;
        return ret;
@@ -244,7 +235,6 @@ static int ohci_hcd_nxp_remove(struct platform_device *pdev)
        usb_remove_hcd(hcd);
        ohci_nxp_stop_hc();
        usb_put_hcd(hcd);
-       clk_disable_unprepare(usb_host_clk);
        isp1301_i2c_client = NULL;
 
        return 0;