Commit 8484199c authored by Justin Chen's avatar Justin Chen Committed by Vinod Koul
Browse files

phy: usb: Fix clock imbalance for suspend/resume



We should be disabling clocks when wake from USB is not needed. Since
this wasn't done, we had a clock imbalance since clocks were always
being enabled on resume.

Fixes: ae532b2b ("phy: usb: Add "wake on" functionality for newer Synopsis XHCI controllers")
Fixes: b0c0b66c ("phy: usb: Add support for wake and USB low power mode for 7211 S2/S5")
Signed-off-by: default avatarJustin Chen <justinpopo6@gmail.com>
Acked-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Link: https://lore.kernel.org/r/1665005418-15807-7-git-send-email-justinpopo6@gmail.com


Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
parent 700c44b5
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -430,7 +430,6 @@ void brcm_usb_dvr_init_7216(struct brcm_usb_init_params *params)

	params->family_name = "7216";
	params->ops = &bcm7216_ops;
	params->suspend_with_clocks = true;
}

void brcm_usb_dvr_init_7211b0(struct brcm_usb_init_params *params)
@@ -440,5 +439,4 @@ void brcm_usb_dvr_init_7211b0(struct brcm_usb_init_params *params)

	params->family_name = "7211";
	params->ops = &bcm7211b0_ops;
	params->suspend_with_clocks = true;
}
+0 −1
Original line number Diff line number Diff line
@@ -62,7 +62,6 @@ struct brcm_usb_init_params {
	const struct brcm_usb_init_ops *ops;
	struct regmap *syscon_piarbctl;
	bool wake_enabled;
	bool suspend_with_clocks;
};

void brcm_usb_dvr_init_4908(struct brcm_usb_init_params *params);
+5 −3
Original line number Diff line number Diff line
@@ -602,7 +602,7 @@ static int brcm_usb_phy_suspend(struct device *dev)
		 * and newer XHCI->2.0-clks/3.0-clks.
		 */

		if (!priv->ini.suspend_with_clocks) {
		if (!priv->ini.wake_enabled) {
			if (priv->phys[BRCM_USB_PHY_3_0].inited)
				clk_disable_unprepare(priv->usb_30_clk);
			if (priv->phys[BRCM_USB_PHY_2_0].inited ||
@@ -619,8 +619,10 @@ static int brcm_usb_phy_resume(struct device *dev)
{
	struct brcm_usb_phy_data *priv = dev_get_drvdata(dev);

	if (!priv->ini.wake_enabled) {
		clk_prepare_enable(priv->usb_20_clk);
		clk_prepare_enable(priv->usb_30_clk);
	}
	brcm_usb_init_ipp(&priv->ini);

	/*