usb: host: xhci-plat: Add reset support
authorBiju Das <biju.das.jz@bp.renesas.com>
Sat, 21 Jan 2023 14:58:49 +0000 (14:58 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 25 Jan 2023 14:48:16 +0000 (15:48 +0100)
Add optional reset support. This is in preparation to adding USB xHCI
support for RZ/V2M SoC.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/r/20230121145853.4792-9-biju.das.jz@bp.renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/xhci-plat.c

index 11b3a0d..c5fc175 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/slab.h>
 #include <linux/acpi.h>
 #include <linux/usb/of.h>
+#include <linux/reset.h>
 
 #include "xhci.h"
 #include "xhci-plat.h"
@@ -263,10 +264,20 @@ static int xhci_plat_probe(struct platform_device *pdev)
                goto put_hcd;
        }
 
-       ret = clk_prepare_enable(xhci->reg_clk);
+       xhci->reset = devm_reset_control_array_get_optional_shared(&pdev->dev);
+       if (IS_ERR(xhci->reset)) {
+               ret = PTR_ERR(xhci->reset);
+               goto put_hcd;
+       }
+
+       ret = reset_control_deassert(xhci->reset);
        if (ret)
                goto put_hcd;
 
+       ret = clk_prepare_enable(xhci->reg_clk);
+       if (ret)
+               goto err_reset;
+
        ret = clk_prepare_enable(xhci->clk);
        if (ret)
                goto disable_reg_clk;
@@ -377,6 +388,9 @@ disable_clk:
 disable_reg_clk:
        clk_disable_unprepare(xhci->reg_clk);
 
+err_reset:
+       reset_control_assert(xhci->reset);
+
 put_hcd:
        usb_put_hcd(hcd);
 
@@ -412,6 +426,7 @@ static int xhci_plat_remove(struct platform_device *dev)
 
        clk_disable_unprepare(clk);
        clk_disable_unprepare(reg_clk);
+       reset_control_assert(xhci->reset);
        usb_put_hcd(hcd);
 
        pm_runtime_disable(&dev->dev);