From patchwork Sun Jan 18 19:36:03 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sylvain Rochet X-Patchwork-Id: 5654031 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 542FAC058D for ; Sun, 18 Jan 2015 19:39:39 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 7BA372037E for ; Sun, 18 Jan 2015 19:39:38 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 99EA92037C for ; Sun, 18 Jan 2015 19:39:37 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1YCvfA-0000nF-0Z; Sun, 18 Jan 2015 19:37:32 +0000 Received: from mx-guillaumet.finsecur.com ([91.217.234.131] helo=guillaumet.finsecur.com) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1YCveE-0000Sd-Fd for linux-arm-kernel@lists.infradead.org; Sun, 18 Jan 2015 19:36:36 +0000 Received: from [172.16.8.13] (helo=spice.lan) by guillaumet.finsecur.com with esmtps (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from ) id 1YCvdo-0006Sk-VT; Sun, 18 Jan 2015 20:36:10 +0100 Received: from gradator by spice.lan with local (Exim 4.84) (envelope-from ) id 1YCvdo-0003OH-Og; Sun, 18 Jan 2015 20:36:08 +0100 From: Sylvain Rochet To: Alan Stern , Greg Kroah-Hartman , Wenyou Yang , nicolas.ferre@atmel.com, alexandre.belloni@free-electrons.com, boris.brezillon@free-electrons.com, plagnioj@jcrosoft.com, voice.shen@atmel.com, linux-arm-kernel@lists.infradead.org, linux-usb@vger.kernel.org Date: Sun, 18 Jan 2015 20:36:03 +0100 Message-Id: <1421609766-11204-4-git-send-email-sylvain.rochet@finsecur.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1421609766-11204-1-git-send-email-sylvain.rochet@finsecur.com> References: <1421609766-11204-1-git-send-email-sylvain.rochet@finsecur.com> X-SA-Exim-Connect-IP: 172.16.8.13 X-SA-Exim-Mail-From: sylvain.rochet@finsecur.com X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 Subject: [PATCHv4 3/6] USB: host: ohci-at91: Stop/start USB PLL for all sleep modes X-SA-Exim-Version: 4.2.1 (built Mon, 26 Dec 2011 16:24:06 +0000) X-SA-Exim-Scanned: Yes (on guillaumet.finsecur.com) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20150118_113634_715388_89B5B2B3 X-CRM114-Status: GOOD ( 12.03 ) X-Spam-Score: -0.0 (/) Cc: Sylvain Rochet X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Disable/unprepare clocks without testing the sleep target_state, removed the at91_suspend_entering_slow_clock() call (which is only a target_state == PM_SUSPEND_MEM). Other kind of suspend now benefit from the power save induced by this PLL deactivation. The resume penalty is about 500 us, which is not negligible but acceptable considering the amount of power we are saving. Signed-off-by: Sylvain Rochet Reported-by: Boris Brezillon Acked-by: Nicolas Ferre --- drivers/usb/host/ohci-at91.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c index 65e7836..79e343e 100644 --- a/drivers/usb/host/ohci-at91.c +++ b/drivers/usb/host/ohci-at91.c @@ -49,6 +49,8 @@ extern int usb_disabled(void); static void at91_start_clock(void) { + if (clocked) + return; if (IS_ENABLED(CONFIG_COMMON_CLK)) { clk_set_rate(uclk, 48000000); clk_prepare_enable(uclk); @@ -61,6 +63,8 @@ static void at91_start_clock(void) static void at91_stop_clock(void) { + if (!clocked) + return; clk_disable_unprepare(fclk); clk_disable_unprepare(iclk); clk_disable_unprepare(hclk); @@ -615,16 +619,14 @@ ohci_hcd_at91_drv_suspend(struct device *dev) * * REVISIT: some boards will be able to turn VBUS off... */ - if (at91_suspend_entering_slow_clock()) { - ohci->hc_control = ohci_readl(ohci, &ohci->regs->control); - ohci->hc_control &= OHCI_CTRL_RWC; - ohci_writel(ohci, ohci->hc_control, &ohci->regs->control); - ohci->rh_state = OHCI_RH_HALTED; - - /* flush the writes */ - (void) ohci_readl (ohci, &ohci->regs->control); - at91_stop_clock(); - } + ohci->hc_control = ohci_readl(ohci, &ohci->regs->control); + ohci->hc_control &= OHCI_CTRL_RWC; + ohci_writel(ohci, ohci->hc_control, &ohci->regs->control); + ohci->rh_state = OHCI_RH_HALTED; + + /* flush the writes */ + (void) ohci_readl (ohci, &ohci->regs->control); + at91_stop_clock(); return ret; } @@ -636,8 +638,7 @@ static int ohci_hcd_at91_drv_resume(struct device *dev) if (device_may_wakeup(dev)) disable_irq_wake(hcd->irq); - if (!clocked) - at91_start_clock(); + at91_start_clock(); ohci_resume(hcd, false); return 0;