mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-24 07:46:48 +00:00
52 lines
2.0 KiB
Diff
52 lines
2.0 KiB
Diff
|
From 6597af4e4835ec0709638d48f73c11b5c624790f Mon Sep 17 00:00:00 2001
|
||
|
From: Al Cooper <alcooperx@gmail.com>
|
||
|
Date: Fri, 3 Jan 2020 13:18:01 -0500
|
||
|
Subject: [PATCH] phy: usb: Put USB phys into IDDQ on suspend to save power in
|
||
|
S2 mode
|
||
|
|
||
|
Currently the Phy driver will put the USB phys into the max
|
||
|
power saving mode (IDDQ) when there is no corresponding XHCI, EHCI
|
||
|
or OHCI client (through rmmod, unbind or if the driver is not
|
||
|
builtin). This change will also put the Phys into IDDQ mode
|
||
|
on suspend so that S2 will get the additional power savings.
|
||
|
|
||
|
Signed-off-by: Al Cooper <alcooperx@gmail.com>
|
||
|
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
|
||
|
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
|
||
|
---
|
||
|
drivers/phy/broadcom/phy-brcm-usb-init.c | 2 --
|
||
|
drivers/phy/broadcom/phy-brcm-usb.c | 11 +++++++++--
|
||
|
2 files changed, 9 insertions(+), 4 deletions(-)
|
||
|
|
||
|
--- a/drivers/phy/broadcom/phy-brcm-usb-init.c
|
||
|
+++ b/drivers/phy/broadcom/phy-brcm-usb-init.c
|
||
|
@@ -1002,8 +1002,6 @@ void brcm_usb_uninit_common(struct brcm_
|
||
|
|
||
|
void brcm_usb_uninit_eohci(struct brcm_usb_init_params *params)
|
||
|
{
|
||
|
- if (USB_CTRL_MASK_FAMILY(params, USB_PM, USB20_HC_RESETB))
|
||
|
- USB_CTRL_UNSET_FAMILY(params, USB_PM, USB20_HC_RESETB);
|
||
|
}
|
||
|
|
||
|
void brcm_usb_uninit_xhci(struct brcm_usb_init_params *params)
|
||
|
--- a/drivers/phy/broadcom/phy-brcm-usb.c
|
||
|
+++ b/drivers/phy/broadcom/phy-brcm-usb.c
|
||
|
@@ -381,8 +381,15 @@ static int brcm_usb_phy_suspend(struct d
|
||
|
struct brcm_usb_phy_data *priv = dev_get_drvdata(dev);
|
||
|
|
||
|
if (priv->init_count) {
|
||
|
- clk_disable_unprepare(priv->usb_20_clk);
|
||
|
- clk_disable_unprepare(priv->usb_30_clk);
|
||
|
+ if (priv->phys[BRCM_USB_PHY_3_0].inited)
|
||
|
+ brcm_usb_uninit_xhci(&priv->ini);
|
||
|
+ if (priv->phys[BRCM_USB_PHY_2_0].inited)
|
||
|
+ brcm_usb_uninit_eohci(&priv->ini);
|
||
|
+ brcm_usb_uninit_common(&priv->ini);
|
||
|
+ 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)
|
||
|
+ clk_disable_unprepare(priv->usb_20_clk);
|
||
|
}
|
||
|
return 0;
|
||
|
}
|