From patchwork Wed Feb 25 23:54:38 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Minkyu Kang X-Patchwork-Id: 8864 X-Patchwork-Delegate: me@felipebalbi.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 n1PNsnYs000349 for ; Wed, 25 Feb 2009 23:54:49 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1762724AbZBYXys (ORCPT ); Wed, 25 Feb 2009 18:54:48 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1762990AbZBYXys (ORCPT ); Wed, 25 Feb 2009 18:54:48 -0500 Received: from mailout2.samsung.com ([203.254.224.25]:32360 "EHLO mailout2.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1762724AbZBYXyq (ORCPT ); Wed, 25 Feb 2009 18:54:46 -0500 Received: from epmmp1 (mailout2.samsung.com [203.254.224.25]) by mailout2.samsung.com (iPlanet Messaging Server 5.2 Patch 2 (built Jul 14 2004)) with ESMTP id <0KFN00F4XBR71F@mailout2.samsung.com>; Thu, 26 Feb 2009 08:54:43 +0900 (KST) Received: from TNRNDGASPAPP1.tn.corp.samsungelectronics.net ([165.213.149.150]) by mmp1.samsung.com (iPlanet Messaging Server 5.2 Patch 2 (built Jul 14 2004)) with ESMTPA id <0KFN002P1BR7FD@mmp1.samsung.com>; Thu, 26 Feb 2009 08:54:43 +0900 (KST) Received: from [165.213.196.191] ([165.213.196.191]) by TNRNDGASPAPP1.tn.corp.samsungelectronics.net with Microsoft SMTPSVC(6.0.3790.3959); Thu, 26 Feb 2009 08:54:43 +0900 Date: Thu, 26 Feb 2009 08:54:38 +0900 From: Minkyu Kang Subject: [PATCH 2/2] twl: usb: Add the resume() and suspend() methods to twl4030-usb.c (re) In-reply-to: <4d34a0a70902250355q4b8c54e4rc9bbc1f40539e486@mail.gmail.com> To: Kim Kyuwon , me@felipebalbi.com Cc: linux-usb@vger.kernel.org, OMAP , David Brownell , q1.kim@samsung.com Message-id: <49A5DA3E.6040608@samsung.com> MIME-version: 1.0 Content-type: text/plain; charset=ISO-8859-1 Content-transfer-encoding: 7BIT User-Agent: Thunderbird 2.0.0.17 (Windows/20080914) References: <4d34a0a70902250355q4b8c54e4rc9bbc1f40539e486@mail.gmail.com> X-OriginalArrivalTime: 25 Feb 2009 23:54:43.0392 (UTC) FILETIME=[6E12B400:01C997A4] Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org The MPU module can be waked up by the unexpected USB interrupt(HSUSB_MC_NINT). For instance, if the MUSB is working as peripheral mode and connected to a host PC, it can never enter the low power mode due to interrupts from the host PC. This patch added the feature that a board specific file can determines that TWL4030 supplies the USB power or not in the low power mode. Disabling the USB power may save the power consumption. Signed-off-by: Minkyu Kang Signed-off-by: Kim Kyuwon --- drivers/usb/otg/twl4030-usb.c | 25 +++++++++++++++++++++++++ include/linux/i2c/twl4030.h | 1 + 2 files changed, 26 insertions(+), 0 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/usb/otg/twl4030-usb.c b/drivers/usb/otg/twl4030-usb.c index 416e441..b725be2 100644 --- a/drivers/usb/otg/twl4030-usb.c +++ b/drivers/usb/otg/twl4030-usb.c @@ -256,6 +256,7 @@ struct twl4030_usb { u8 linkstat; u8 asleep; bool irq_enabled; + bool suspend_enabled; }; /* internal define on top of container_of */ @@ -618,6 +619,7 @@ static int __init twl4030_usb_probe(struct platform_device *pdev) twl->otg.set_suspend = twl4030_set_suspend; twl->usb_mode = pdata->usb_mode; twl->asleep = 1; + twl->suspend_enabled = pdata->suspend_enabled; /* init spinlock for workqueue */ spin_lock_init(&twl->lock); @@ -694,9 +696,32 @@ static int __exit twl4030_usb_remove(struct platform_device *pdev) return 0; } +int twl4030_usb_suspend(struct platform_device *pdev, pm_message_t state) +{ + struct twl4030_usb *twl = platform_get_drvdata(pdev); + + if (!twl->suspend_enabled) + return 0; + + otg_set_suspend(&twl->otg, 1); + + return 0; +} + +int twl4030_usb_resume(struct platform_device *pdev) +{ + struct twl4030_usb *twl = platform_get_drvdata(pdev); + + otg_set_suspend(&twl->otg, 0); + + return 0; +} + static struct platform_driver twl4030_usb_driver = { .probe = twl4030_usb_probe, .remove = __exit_p(twl4030_usb_remove), + .suspend = twl4030_usb_suspend, + .resume = twl4030_usb_resume, .driver = { .name = "twl4030_usb", .owner = THIS_MODULE, diff --git a/include/linux/i2c/twl4030.h b/include/linux/i2c/twl4030.h index c89d33b..0b12509 100644 --- a/include/linux/i2c/twl4030.h +++ b/include/linux/i2c/twl4030.h @@ -325,6 +325,7 @@ enum twl4030_usb_mode { struct twl4030_usb_data { enum twl4030_usb_mode usb_mode; + bool suspend_enabled; }; struct twl4030_ins {