From patchwork Sat Dec 9 08:45:33 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?Q2h1bmZlbmcgWXVuICjkupHmmKXls7Ap?= X-Patchwork-Id: 10103623 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 734C160329 for ; Sat, 9 Dec 2017 08:48:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 62ACA28FF6 for ; Sat, 9 Dec 2017 08:48:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5779E29011; Sat, 9 Dec 2017 08:48:40 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, RCVD_IN_DNSWL_MED, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id BF32129002 for ; Sat, 9 Dec 2017 08:48:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=cNBUZRXqy6D700gvfCbfkSYf1ZLOx5syMZjy/EUTQd8=; b=NfPmQMAzTnm4Ro aOOze9hXAcl4x9p2eicIukMlO/T15Fisi30nHZwXvPFJR6aEvs+Jc4JbAvdvD8pJK76ar2TWYh/ZF WJnpVI2VIYXv8QzuZy3FkMQJ62q032HOEhGf7seKxNLUmc2QZctGMGqQduHMQhLhTcPk29odVDcQA ezjSWWITisPbdAPvHSDU6Re8cArZ1wFiPWUD8wPBiPyOMagDZjVLn6mP0X01s6FUcJAO4RiuC7zqW RBNC6Ff0255SGKSgK3Mr+iX9h3XMJtP68HhneuQWXX8q7MTEnjWoqeiglQP30t4Leex8//9tgnfhz 17R8637sBA3DEVh+lg8A==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1eNaoI-0008GX-Qn; Sat, 09 Dec 2017 08:48:38 +0000 Received: from [210.61.82.183] (helo=mailgw01.mediatek.com) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1eNan7-0007C0-PY; Sat, 09 Dec 2017 08:47:30 +0000 X-UUID: a0ce33b1d5e84e048fd0d290db7c36df-20171209 Received: from mtkexhb01.mediatek.inc [(172.21.101.102)] by mailgw01.mediatek.com (envelope-from ) (mhqrelay.mediatek.com ESMTP with TLS) with ESMTP id 580549458; Sat, 09 Dec 2017 16:46:57 +0800 Received: from mtkcas09.mediatek.inc (172.21.101.178) by mtkmbs08n1.mediatek.inc (172.21.101.55) with Microsoft SMTP Server (TLS) id 15.0.1210.3; Sat, 9 Dec 2017 16:46:56 +0800 Received: from localhost.localdomain (10.17.3.153) by mtkcas09.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1210.3 via Frontend Transport; Sat, 9 Dec 2017 16:46:55 +0800 From: Chunfeng Yun To: Rob Herring , Felipe Balbi , Matthias Brugger , Mathias Nyman Subject: [PATCH 4/7] usb: mtu3: use APIs of mtu_wakeup to support remote wakeup Date: Sat, 9 Dec 2017 16:45:33 +0800 Message-ID: <1512809136-2779-5-git-send-email-chunfeng.yun@mediatek.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1512809136-2779-1-git-send-email-chunfeng.yun@mediatek.com> References: <1512809136-2779-1-git-send-email-chunfeng.yun@mediatek.com> MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20171209_004726_015760_EB006570 X-CRM114-Status: GOOD ( 18.22 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , devicetree@vger.kernel.org, linux-usb@vger.kernel.org, Greg Kroah-Hartman , Sean Wang , Will Deacon , linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Catalin Marinas , Chunfeng Yun , Jean Delvare Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+patchwork-linux-mediatek=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP On some platforms, there are two SSUSB IPs, but the old way of usb wakeup doesn't support it, so use the new APIs of mtu_wakeup to support it. Signed-off-by: Chunfeng Yun --- drivers/usb/mtu3/mtu3.h | 2 ++ drivers/usb/mtu3/mtu3_host.c | 39 +++++++++++++++++++++++---------------- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/drivers/usb/mtu3/mtu3.h b/drivers/usb/mtu3/mtu3.h index 3c888d9..9f3eb79 100644 --- a/drivers/usb/mtu3/mtu3.h +++ b/drivers/usb/mtu3/mtu3.h @@ -255,6 +255,8 @@ struct ssusb_mtk { /* usb wakeup for host mode */ bool wakeup_en; struct regmap *pericfg; + struct mtu_wakeup *uwk; + bool new_wakeup; }; /** diff --git a/drivers/usb/mtu3/mtu3_host.c b/drivers/usb/mtu3/mtu3_host.c index 7e948c0..f769b65 100644 --- a/drivers/usb/mtu3/mtu3_host.c +++ b/drivers/usb/mtu3/mtu3_host.c @@ -14,6 +14,7 @@ #include #include #include +#include #include "mtu3.h" #include "mtu3_dr.h" @@ -56,24 +57,26 @@ static void ssusb_wakeup_ip_sleep_dis(struct ssusb_mtk *ssusb) int ssusb_wakeup_of_property_parse(struct ssusb_mtk *ssusb, struct device_node *dn) { - struct device *dev = ssusb->dev; + /* try the new way first */ + ssusb->new_wakeup = of_property_read_bool(dn, "wakeup-source"); + if (ssusb->new_wakeup) { + ssusb->uwk = devm_of_uwk_get_by_index(ssusb->dev, dn, 0); + if (IS_ERR(ssusb->uwk)) + dev_err(ssusb->dev, "fail to get mtu_wakeup\n"); + + return PTR_ERR_OR_ZERO(ssusb->uwk); + } - /* - * Wakeup function is optional, so it is not an error if this property - * does not exist, and in such case, no need to get relative - * properties anymore. - */ + /* Wakeup function is optional. (deprecated, use the new way instead) */ ssusb->wakeup_en = of_property_read_bool(dn, "mediatek,enable-wakeup"); - if (!ssusb->wakeup_en) - return 0; - - ssusb->pericfg = syscon_regmap_lookup_by_phandle(dn, + if (ssusb->wakeup_en) { + ssusb->pericfg = syscon_regmap_lookup_by_phandle(dn, "mediatek,syscon-wakeup"); - if (IS_ERR(ssusb->pericfg)) { - dev_err(dev, "fail to get pericfg regs\n"); - return PTR_ERR(ssusb->pericfg); + if (IS_ERR(ssusb->pericfg)) { + dev_err(ssusb->dev, "fail to get pericfg regs\n"); + return PTR_ERR(ssusb->pericfg); + } } - return 0; } @@ -235,7 +238,9 @@ void ssusb_host_exit(struct ssusb_mtk *ssusb) int ssusb_wakeup_enable(struct ssusb_mtk *ssusb) { - if (ssusb->wakeup_en) + if (ssusb->new_wakeup) + mtu_wakeup_enable(ssusb->uwk); + else if (ssusb->wakeup_en) ssusb_wakeup_ip_sleep_en(ssusb); return 0; @@ -243,6 +248,8 @@ int ssusb_wakeup_enable(struct ssusb_mtk *ssusb) void ssusb_wakeup_disable(struct ssusb_mtk *ssusb) { - if (ssusb->wakeup_en) + if (ssusb->new_wakeup) + mtu_wakeup_disable(ssusb->uwk); + else if (ssusb->wakeup_en) ssusb_wakeup_ip_sleep_dis(ssusb); }