From patchwork Thu Dec 12 05:38:36 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhiqiang Hou X-Patchwork-Id: 300531 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from casper.infradead.org (unknown [IPv6:2001:770:15f::2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id C66112C0385 for ; Thu, 12 Dec 2013 18:02:20 +1100 (EST) Received: from merlin.infradead.org ([2001:4978:20e::2]) by casper.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1Vr0Hc-0005gg-16; Thu, 12 Dec 2013 07:02:04 +0000 Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1Vr0Ha-0003HS-6S; Thu, 12 Dec 2013 07:02:02 +0000 Received: from mail-db8lp0187.outbound.messaging.microsoft.com ([213.199.154.187] helo=db8outboundpool.messaging.microsoft.com) by merlin.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1Vr0HX-0003Gf-GI for linux-mtd@lists.infradead.org; Thu, 12 Dec 2013 07:02:00 +0000 Received: from mail77-db8-R.bigfish.com (10.174.8.247) by DB8EHSOBE015.bigfish.com (10.174.4.78) with Microsoft SMTP Server id 14.1.225.22; Thu, 12 Dec 2013 07:01:37 +0000 Received: from mail77-db8 (localhost [127.0.0.1]) by mail77-db8-R.bigfish.com (Postfix) with ESMTP id 85EEFD40184; Thu, 12 Dec 2013 07:01:37 +0000 (UTC) X-Forefront-Antispam-Report: CIP:70.37.183.190; KIP:(null); UIP:(null); IPV:NLI; H:mail.freescale.net; RD:none; EFVD:NLI X-SpamScore: 1 X-BigFish: VS1(zzzz1f42h2148h208ch1ee6h1de0h1fdah2073h2146h1202h1e76h2189h1d1ah1d2ah1fc6hzd2iz1de098h8275bh1de097hz2dh2a8h839hd24he5bhf0ah1288h12a5h12a9h12bdh12e5h137ah139eh13b6h1441h1504h1537h162dh1631h1758h1898h18e1h1946h19b5h1ad9h1b0ah1b2fh2222h224fh1fb3h1d0ch1d2eh1d3fh1dc1h1dfeh1dffh1e23h1fe8h1ff5h2218h2216h226dh22d0h2327h2336h1155h) Received: from mail77-db8 (localhost.localdomain [127.0.0.1]) by mail77-db8 (MessageSwitch) id 1386831696631620_27822; Thu, 12 Dec 2013 07:01:36 +0000 (UTC) Received: from DB8EHSMHS031.bigfish.com (unknown [10.174.8.246]) by mail77-db8.bigfish.com (Postfix) with ESMTP id 427A63C004C; Thu, 12 Dec 2013 07:01:31 +0000 (UTC) Received: from mail.freescale.net (70.37.183.190) by DB8EHSMHS031.bigfish.com (10.174.4.41) with Microsoft SMTP Server (TLS) id 14.16.227.3; Thu, 12 Dec 2013 07:01:31 +0000 Received: from tx30smr01.am.freescale.net (10.81.153.31) by 039-SN1MMR1-001.039d.mgd.msft.net (10.84.1.13) with Microsoft SMTP Server (TLS) id 14.3.158.2; Thu, 12 Dec 2013 07:01:30 +0000 Received: from Tank.am.freescale.net (tank.ap.freescale.net [10.193.20.104]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id rBC71MOm019890; Thu, 12 Dec 2013 00:01:23 -0700 From: Hou Zhiqiang To: , Subject: [PATCH v2] mtd: m25p80: Add Power Management support Date: Thu, 12 Dec 2013 13:38:36 +0800 Message-ID: <1386826716-20476-1-git-send-email-b48286@freescale.com> X-Mailer: git-send-email 1.8.4.1 MIME-Version: 1.0 X-OriginatorOrg: freescale.com X-FOPE-CONNECTOR: Id%0$Dn%*$RO%0$TLS%0$FQDN%$TlsDn% X-FOPE-CONNECTOR: Id%0$Dn%FREESCALE.MAIL.ONMICROSOFT.COM$RO%1$TLS%0$FQDN%$TlsDn% X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20131212_020159_762135_CB9AB7F8 X-CRM114-Status: GOOD ( 12.67 ) X-Spam-Score: -0.6 (/) X-Spam-Report: SpamAssassin version 3.3.2 on merlin.infradead.org summary: Content analysis details: (-0.6 points) pts rule name description ---- ---------------------- -------------------------------------------------- 1.3 UNRESOLVED_TEMPLATE Headers contain an unresolved template -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [213.199.154.187 listed in list.dnswl.org] -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] Cc: grant.likely@secretlab.ca, scottwood@freescale.com, Mingkai.Hu@freescale.com, Hou Zhiqiang , dwmw2@infradead.org X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Add PM support using callback function suspend and resume in .driver.pm of spi_driver. Signed-off-by: Hou Zhiqiang --- v2: - Replace .driver.suspend and .driver.resume with .driver.pm - Use CONFIG_PM_SLEEP instead of CONFIG_PM drivers/mtd/devices/m25p80.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c index 7eda71d..eb558e8 100644 --- a/drivers/mtd/devices/m25p80.c +++ b/drivers/mtd/devices/m25p80.c @@ -66,6 +66,8 @@ /* Used for Spansion flashes only. */ #define OPCODE_BRWR 0x17 /* Bank register write */ +#define OPCODE_DP 0xb9 /* Enter deep power down mode */ +#define OPCODE_RES 0xab /* Exit deep power down mode */ /* Status Register bits. */ #define SR_WIP 1 /* Write in progress */ @@ -1128,11 +1130,46 @@ static int m25p_remove(struct spi_device *spi) return mtd_device_unregister(&flash->mtd); } +#ifdef CONFIG_PM_SLEEP +static int m25p_suspend(struct device *dev) +{ + struct m25p *flash = dev_get_drvdata(dev); + int ret; + + flash->command[0] = OPCODE_DP; + mutex_lock(&flash->lock); + /* Wait until finished previous write/erase command. */ + ret = wait_till_ready(flash); + if (ret) { + mutex_unlock(&flash->lock); + return ret; + } + ret = spi_write(flash->spi, flash->command, 1); + mutex_unlock(&flash->lock); + + return ret; +} + +static int m25p_resume(struct device *dev) +{ + struct m25p *flash = dev_get_drvdata(dev); + int ret; + + flash->command[0] = OPCODE_RES; + + return spi_write(flash->spi, flash->command, 1); +} +#endif /* CONFIG_PM_SLEEP */ + +static const struct dev_pm_ops m25p_pm = { + SET_SYSTEM_SLEEP_PM_OPS(m25p_suspend, m25p_resume) +}; static struct spi_driver m25p80_driver = { .driver = { .name = "m25p80", .owner = THIS_MODULE, + .pm = &m25p_pm, }, .id_table = m25p_ids, .probe = m25p_probe,