[<prev] [next>] [day] [month] [year] [list]
Message-ID: <1573698791-24310-1-git-send-email-chunfeng.yun@mediatek.com>
Date: Thu, 14 Nov 2019 10:33:11 +0800
From: Chunfeng Yun <chunfeng.yun@...iatek.com>
To: Tianping Fang <tianping.fang@...iatek.com>
CC: Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Matthias Brugger <matthias.bgg@...il.com>,
Chunfeng Yun <chunfeng.yun@...iatek.com>,
<linux-usb@...r.kernel.org>, <devicetree@...r.kernel.org>,
<linux-kernel@...r.kernel.org>,
<linux-arm-kernel@...ts.infradead.org>,
<linux-mediatek@...ts.infradead.org>
Subject: [RFC PATCH] usb: mtu3: fix random remote wakeup
Wakeup_signal will toggle status according to ssusb_ip_sleep signal
after debounce time, so need add a delay time and wait for wakeup_signal
toggle to complete, then enable the remote wakeup. Meanwhile reduce the
debounce time of wakeup_signal. These will avoid spurious wakeup event.
Signed-off-by: Tianping Fang <tianping.fang@...iatek.com>
Signed-off-by: Chunfeng Yun <chunfeng.yun@...iatek.com>
---
Note, depends on following patch not merged:
[v3,3/7] usb: mtu3: support ip-sleep wakeup for MT8183
https://patchwork.kernel.org/patch/11123151/
---
drivers/usb/mtu3/mtu3_host.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/mtu3/mtu3_host.c b/drivers/usb/mtu3/mtu3_host.c
index 182c9439c15a..ca48ff751c8b 100644
--- a/drivers/usb/mtu3/mtu3_host.c
+++ b/drivers/usb/mtu3/mtu3_host.c
@@ -53,12 +53,12 @@ static void ssusb_wakeup_ip_sleep_set(struct ssusb_mtk *ssusb, bool enable)
case SSUSB_UWK_V0:
reg = ssusb->uwk_reg_base + PERI_WK_CTRL0;
msk = (u32)(WC0_IS_EN | WC0_IS_C(0xf) | WC0_IS_P);
- val = enable ? (WC0_IS_EN | WC0_IS_C(0x8)) : 0;
+ val = enable ? (WC0_IS_EN | WC0_IS_C(0x3)) : 0;
break;
case SSUSB_UWK_V1:
reg = ssusb->uwk_reg_base + PERI_WK_CTRL1;
msk = WC1_IS_EN | WC1_IS_C(0xf) | WC1_IS_P;
- val = enable ? (WC1_IS_EN | WC1_IS_C(0x8)) : 0;
+ val = enable ? (WC1_IS_EN | WC1_IS_C(0x3)) : 0;
break;
case SSUSB_UWK_V2:
reg = ssusb->uwk_reg_base + PERI_SSUSB_SPM_CTRL;
@@ -197,6 +197,8 @@ int ssusb_host_disable(struct ssusb_mtk *ssusb, bool suspend)
(value & SSUSB_IP_SLEEP_STS), 100, 100000);
if (ret)
dev_err(ssusb->dev, "ip sleep failed!!!\n");
+ else /* wait for wakeup_signal toggle done after enter ip-sleep */
+ usleep_range(245, 255);
return ret;
}
--
2.23.0
Powered by blists - more mailing lists