From 47dd60f2edd0361d4b0c3b932a56eb6b7562ec79 Mon Sep 17 00:00:00 2001 From: Pratham Pratap Date: Tue, 24 Mar 2020 19:06:50 +0530 Subject: [PATCH] usb: phy: qmp: Disable LDOs and clocks in error handling path This change disables regulators and clocks in the error handling path if phy initialization fails. Change-Id: I14f67d9704e01e4e047d9f1890b87f3fbd319b3d Signed-off-by: Pratham Pratap --- drivers/usb/phy/phy-msm-ssusb-qmp.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/usb/phy/phy-msm-ssusb-qmp.c b/drivers/usb/phy/phy-msm-ssusb-qmp.c index d8f27da371d5..ef46c1dfc474 100644 --- a/drivers/usb/phy/phy-msm-ssusb-qmp.c +++ b/drivers/usb/phy/phy-msm-ssusb-qmp.c @@ -528,7 +528,7 @@ static int msm_ssphy_qmp_init(struct usb_phy *uphy) ret = configure_phy_regs(uphy, reg); if (ret) { dev_err(uphy->dev, "Failed the main PHY configuration\n"); - return ret; + goto fail; } /* perform software reset of PCS/Serdes */ @@ -553,9 +553,18 @@ static int msm_ssphy_qmp_init(struct usb_phy *uphy) dev_err(uphy->dev, "USB3_PHY_PCS_STATUS:%x\n", readl_relaxed(phy->base + phy->phy_reg[USB3_PHY_PCS_STATUS])); - return -EBUSY; + ret = -EBUSY; + goto fail; } + return ret; +fail: + phy->in_suspend = true; + writel_relaxed(0x00, + phy->base + phy->phy_reg[USB3_PHY_POWER_DOWN_CONTROL]); + msm_ssphy_qmp_enable_clks(phy, false); + msm_ssusb_qmp_ldo_enable(phy, 0); + return ret; }