From patchwork Mon Dec 13 12:12:36 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adrian Hunter X-Patchwork-Id: 75316 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from canuck.infradead.org (canuck.infradead.org [134.117.69.58]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id E32AB1007D1 for ; Mon, 13 Dec 2010 23:20:15 +1100 (EST) Received: from localhost ([127.0.0.1] helo=canuck.infradead.org) by canuck.infradead.org with esmtp (Exim 4.72 #1 (Red Hat Linux)) id 1PS7Gx-0001Hv-OY; Mon, 13 Dec 2010 12:12:55 +0000 Received: from smtp.nokia.com ([147.243.128.26] helo=mgw-da02.nokia.com) by canuck.infradead.org with esmtps (Exim 4.72 #1 (Red Hat Linux)) id 1PS7Gs-0001Gj-T7 for linux-mtd@lists.infradead.org; Mon, 13 Dec 2010 12:12:52 +0000 Received: from nokia.com (localhost [127.0.0.1]) by mgw-da02.nokia.com (Switch-3.4.3/Switch-3.4.3) with ESMTP id oBDCCfi4026914; Mon, 13 Dec 2010 14:12:41 +0200 Received: from ahunter-work.research.nokia.com ([esdhcp03791.research.nokia.com [172.21.37.91]]) by mgw-da02.nokia.com with RELAY id oBDCCaoJ026831 ; Mon, 13 Dec 2010 14:12:38 +0200 From: Adrian Hunter To: David Woodhouse Date: Mon, 13 Dec 2010 14:12:36 +0200 Message-Id: <20101213121236.20650.75186.sendpatchset@ahunter-work.research.nokia.com> In-Reply-To: <20101213121144.20650.27903.sendpatchset@ahunter-work.research.nokia.com> References: <20101213121144.20650.27903.sendpatchset@ahunter-work.research.nokia.com> Subject: [PATCH 6/7] OMAP2/3: OneNAND: add platform data callback for PM constraints X-Nokia-AV: Clean X-CRM114-Version: 20090807-BlameThorstenAndJenny ( TRE 0.7.6 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20101213_071251_090991_A0644D15 X-CRM114-Status: GOOD ( 12.80 ) X-Spam-Score: -0.0 (/) X-Spam-Report: SpamAssassin version 3.3.1 on canuck.infradead.org summary: Content analysis details: (-0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 TVD_RCVD_SPACE_BRACKET TVD_RCVD_SPACE_BRACKET -0.0 T_RP_MATCHES_RCVD Envelope sender domain matches handover relay domain Cc: Tony Lindgren , Kyungmin Park , linux-mtd Mailing List , Artem.Bityutskiy.dedekind1@gmail.com, Adrian Hunter X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: linux-mtd-bounces@lists.infradead.org Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From b93b44d7463b3a3f6d5d1021681596de1881a62b Mon Sep 17 00:00:00 2001 From: Adrian Hunter Date: Thu, 9 Dec 2010 12:56:24 +0200 Subject: [PATCH 6/7] OMAP2/3: OneNAND: add platform data callback for PM constraints Make it possible for boards to set PM constraints such as maximum wakeup latency. Signed-off-by: Adrian Hunter --- arch/arm/plat-omap/include/plat/onenand.h | 8 ++++++++ drivers/mtd/onenand/omap2.c | 16 +++++++++++++++- 2 files changed, 23 insertions(+), 1 deletions(-) diff --git a/arch/arm/plat-omap/include/plat/onenand.h b/arch/arm/plat-omap/include/plat/onenand.h index affe87e..1d07119 100644 --- a/arch/arm/plat-omap/include/plat/onenand.h +++ b/arch/arm/plat-omap/include/plat/onenand.h @@ -15,12 +15,20 @@ #define ONENAND_SYNC_READ (1 << 0) #define ONENAND_SYNC_READWRITE (1 << 1) +enum { + ONENAND_PM_CONSTRAINT_OFF, + ONENAND_PM_CONSTRAINT_ERASING, + ONENAND_PM_CONSTRAINT_OTHER, +}; + struct omap_onenand_platform_data { int cs; int gpio_irq; struct mtd_partition *parts; int nr_parts; int (*onenand_setup)(void __iomem *, int freq); + void (*set_pm_constraints)(struct device *dev, + int on); int dma_channel; u8 flags; u8 regulator_can_sleep; diff --git a/drivers/mtd/onenand/omap2.c b/drivers/mtd/onenand/omap2.c index ac31f46..866b9f9 100644 --- a/drivers/mtd/onenand/omap2.c +++ b/drivers/mtd/onenand/omap2.c @@ -64,6 +64,7 @@ struct omap2_onenand { int dma_channel; int freq; int (*setup)(void __iomem *base, int freq); + void (*set_pm_constraints)(struct device *dev, int on); struct regulator *regulator; }; @@ -605,13 +606,21 @@ static void omap2_onenand_shutdown(struct platform_device *pdev) static int omap2_onenand_enable(struct mtd_info *mtd) { - int ret; + int ret, on; struct omap2_onenand *c = container_of(mtd, struct omap2_onenand, mtd); ret = regulator_enable(c->regulator); if (ret != 0) dev_err(&c->pdev->dev, "cant enable regulator\n"); + if (c->set_pm_constraints) { + if (c->onenand.state == FL_ERASING) + on = ONENAND_PM_CONSTRAINT_ERASING; + else + on = ONENAND_PM_CONSTRAINT_OTHER; + c->set_pm_constraints(&c->pdev->dev, on); + } + return ret; } @@ -620,6 +629,9 @@ static int omap2_onenand_disable(struct mtd_info *mtd) int ret; struct omap2_onenand *c = container_of(mtd, struct omap2_onenand, mtd); + if (c->set_pm_constraints) + c->set_pm_constraints(&c->pdev->dev, ONENAND_PM_CONSTRAINT_OFF); + ret = regulator_disable(c->regulator); if (ret != 0) dev_err(&c->pdev->dev, "cant disable regulator\n"); @@ -682,6 +694,8 @@ static int __devinit omap2_onenand_probe(struct platform_device *pdev) c->setup = pdata->onenand_setup; } + c->set_pm_constraints = pdata->set_pm_constraints; + if (c->gpio_irq) { if ((r = gpio_request(c->gpio_irq, "OneNAND irq")) < 0) { dev_err(&pdev->dev, "Failed to request GPIO%d for "