From patchwork Thu Nov 12 10:07:24 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tero Kristo X-Patchwork-Id: 59565 X-Patchwork-Delegate: khilman@deeprootsystems.com Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id nACAOsFg028038 for ; Thu, 12 Nov 2009 10:24:54 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752231AbZKLKYr (ORCPT ); Thu, 12 Nov 2009 05:24:47 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752031AbZKLKYr (ORCPT ); Thu, 12 Nov 2009 05:24:47 -0500 Received: from smtp.nokia.com ([192.100.122.230]:43757 "EHLO mgw-mx03.nokia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751942AbZKLKYq (ORCPT ); Thu, 12 Nov 2009 05:24:46 -0500 Received: from vaebh106.NOE.Nokia.com (vaebh106.europe.nokia.com [10.160.244.32]) by mgw-mx03.nokia.com (Switch-3.3.3/Switch-3.3.3) with ESMTP id nACAOb5W020283 for ; Thu, 12 Nov 2009 12:24:50 +0200 Received: from esebh102.NOE.Nokia.com ([172.21.138.183]) by vaebh106.NOE.Nokia.com with Microsoft SMTPSVC(6.0.3790.3959); Thu, 12 Nov 2009 12:24:42 +0200 Received: from mgw-da01.ext.nokia.com ([147.243.128.24]) by esebh102.NOE.Nokia.com over TLS secured channel with Microsoft SMTPSVC(6.0.3790.3959); Thu, 12 Nov 2009 12:24:42 +0200 Received: from localhost.localdomain (sokoban.ntc.nokia.com [172.22.144.95]) by mgw-da01.ext.nokia.com (Switch-3.3.3/Switch-3.3.3) with ESMTP id nACAOXWv012786 for ; Thu, 12 Nov 2009 12:24:39 +0200 From: Tero Kristo To: linux-omap@vger.kernel.org Subject: [PATCH 5/5] OMAP3: PM: Disable OTG autoidle when waking up from off-mode Date: Thu, 12 Nov 2009 12:07:24 +0200 Message-Id: <1258020444-3809-6-git-send-email-tero.kristo@nokia.com> X-Mailer: git-send-email 1.5.4.3 In-Reply-To: <1258020444-3809-5-git-send-email-tero.kristo@nokia.com> References: <> <1258020444-3809-1-git-send-email-tero.kristo@nokia.com> <1258020444-3809-2-git-send-email-tero.kristo@nokia.com> <1258020444-3809-3-git-send-email-tero.kristo@nokia.com> <1258020444-3809-4-git-send-email-tero.kristo@nokia.com> <1258020444-3809-5-git-send-email-tero.kristo@nokia.com> X-OriginalArrivalTime: 12 Nov 2009 10:24:42.0805 (UTC) FILETIME=[5944A650:01CA6382] X-Nokia-AV: Clean Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index 2f9f4a0..ab7b30f 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c @@ -37,6 +37,7 @@ #include #include #include +#include #include @@ -496,6 +497,11 @@ void omap_sram_idle(void) omap3_prcm_restore_context(); omap3_sram_restore_context(); omap2_sms_restore_context(); + /* + * Errata 1.164 fix : OTG autoidle can prevent + * sleep + */ + usb_musb_disable_autoidle(); } omap_uart_resume_idle(0); omap_uart_resume_idle(1); diff --git a/arch/arm/mach-omap2/usb-musb.c b/arch/arm/mach-omap2/usb-musb.c index f5364b8..bb3cee4 100644 --- a/arch/arm/mach-omap2/usb-musb.c +++ b/arch/arm/mach-omap2/usb-musb.c @@ -44,10 +44,11 @@ static struct platform_device dummy_pdev = { }, }; +static void __iomem *otg_base; +static struct clk *otg_clk; + static void __init usb_musb_pm_init(void) { - void __iomem *otg_base; - struct clk *otg_clk; struct device *dev = &dummy_pdev.dev; if (!cpu_is_omap34xx()) @@ -74,12 +75,13 @@ static void __init usb_musb_pm_init(void) cpu_relax(); } - if (otg_clk) { + if (otg_clk) clk_disable(otg_clk); - clk_put(otg_clk); - } +} - iounmap(otg_base); +void usb_musb_disable_autoidle(void) +{ + __raw_writel(0, otg_base + OTG_SYSCONFIG); } #ifdef CONFIG_USB_MUSB_SOC diff --git a/arch/arm/plat-omap/include/plat/usb.h b/arch/arm/plat-omap/include/plat/usb.h index 33a500e..31b13bc 100644 --- a/arch/arm/plat-omap/include/plat/usb.h +++ b/arch/arm/plat-omap/include/plat/usb.h @@ -46,6 +46,9 @@ extern void usb_musb_init(void); extern void usb_ehci_init(struct ehci_hcd_omap_platform_data *pdata); +/* This is needed for OMAP3 errata 1.164: enabled autoidle can prevent sleep */ +extern void usb_musb_disable_autoidle(void); + #endif void omap_usb_init(struct omap_usb_config *pdata);