[{"id":1773555,"web_url":"http://patchwork.ozlabs.org/comment/1773555/","msgid":"<fa66d212-dbfb-08d4-1b2b-aaaa9f9d62de@microchip.com>","list_archive_url":null,"date":"2017-09-22T12:42:37","subject":"Re: [PATCH v2 7/9] pwm: atmel-tcb: Support backup mode","submitter":{"id":71036,"url":"http://patchwork.ozlabs.org/api/people/71036/","name":"Nicolas Ferre","email":"nicolas.ferre@microchip.com"},"content":"On 15/09/2017 at 16:04, Romain Izard wrote:\n> Save and restore registers for the PWM on suspend and resume, which\n> makes hibernation and backup modes possible.\n> \n> Signed-off-by: Romain Izard <romain.izard.pro@gmail.com>\n\nSeems good to me:\nAcked-by: Nicolas Ferre <nicolas.ferre@microchip.com>\n\n> ---\n>  drivers/pwm/pwm-atmel-tcb.c | 63 +++++++++++++++++++++++++++++++++++++++++++--\n>  1 file changed, 61 insertions(+), 2 deletions(-)\n> \n> diff --git a/drivers/pwm/pwm-atmel-tcb.c b/drivers/pwm/pwm-atmel-tcb.c\n> index 75db585a2a94..acd3ce8ecf3f 100644\n> --- a/drivers/pwm/pwm-atmel-tcb.c\n> +++ b/drivers/pwm/pwm-atmel-tcb.c\n> @@ -37,11 +37,20 @@ struct atmel_tcb_pwm_device {\n>  \tunsigned period;\t\t/* PWM period expressed in clk cycles */\n>  };\n>  \n> +struct atmel_tcb_channel {\n> +\tu32 enabled;\n> +\tu32 cmr;\n> +\tu32 ra;\n> +\tu32 rb;\n> +\tu32 rc;\n> +};\n> +\n>  struct atmel_tcb_pwm_chip {\n>  \tstruct pwm_chip chip;\n>  \tspinlock_t lock;\n>  \tstruct atmel_tc *tc;\n>  \tstruct atmel_tcb_pwm_device *pwms[NPWM];\n> +\tstruct atmel_tcb_channel bkup[NPWM / 2];\n>  };\n>  \n>  static inline struct atmel_tcb_pwm_chip *to_tcb_chip(struct pwm_chip *chip)\n> @@ -175,12 +184,15 @@ static void atmel_tcb_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm)\n>  \t * Use software trigger to apply the new setting.\n>  \t * If both PWM devices in this group are disabled we stop the clock.\n>  \t */\n> -\tif (!(cmr & (ATMEL_TC_ACPC | ATMEL_TC_BCPC)))\n> +\tif (!(cmr & (ATMEL_TC_ACPC | ATMEL_TC_BCPC))) {\n>  \t\t__raw_writel(ATMEL_TC_SWTRG | ATMEL_TC_CLKDIS,\n>  \t\t\t     regs + ATMEL_TC_REG(group, CCR));\n> -\telse\n> +\t\ttcbpwmc->bkup[group].enabled = 1;\n> +\t} else {\n>  \t\t__raw_writel(ATMEL_TC_SWTRG, regs +\n>  \t\t\t     ATMEL_TC_REG(group, CCR));\n> +\t\ttcbpwmc->bkup[group].enabled = 0;\n> +\t}\n>  \n>  \tspin_unlock(&tcbpwmc->lock);\n>  }\n> @@ -263,6 +275,7 @@ static int atmel_tcb_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)\n>  \t/* Use software trigger to apply the new setting */\n>  \t__raw_writel(ATMEL_TC_CLKEN | ATMEL_TC_SWTRG,\n>  \t\t     regs + ATMEL_TC_REG(group, CCR));\n> +\ttcbpwmc->bkup[group].enabled = 1;\n>  \tspin_unlock(&tcbpwmc->lock);\n>  \treturn 0;\n>  }\n> @@ -445,10 +458,56 @@ static const struct of_device_id atmel_tcb_pwm_dt_ids[] = {\n>  };\n>  MODULE_DEVICE_TABLE(of, atmel_tcb_pwm_dt_ids);\n>  \n> +#ifdef CONFIG_PM_SLEEP\n> +static int atmel_tcb_pwm_suspend(struct device *dev)\n> +{\n> +\tstruct platform_device *pdev = to_platform_device(dev);\n> +\tstruct atmel_tcb_pwm_chip *tcbpwm = platform_get_drvdata(pdev);\n> +\tvoid __iomem *base = tcbpwm->tc->regs;\n> +\tint i;\n> +\n> +\tfor (i = 0; i < (NPWM / 2); i++) {\n> +\t\tstruct atmel_tcb_channel *chan = &tcbpwm->bkup[i];\n> +\n> +\t\tchan->cmr = readl(base + ATMEL_TC_REG(i, CMR));\n> +\t\tchan->ra = readl(base + ATMEL_TC_REG(i, RA));\n> +\t\tchan->rb = readl(base + ATMEL_TC_REG(i, RB));\n> +\t\tchan->rc = readl(base + ATMEL_TC_REG(i, RC));\n> +\t}\n> +\treturn 0;\n> +}\n> +\n> +static int atmel_tcb_pwm_resume(struct device *dev)\n> +{\n> +\tstruct platform_device *pdev = to_platform_device(dev);\n> +\tstruct atmel_tcb_pwm_chip *tcbpwm = platform_get_drvdata(pdev);\n> +\tvoid __iomem *base = tcbpwm->tc->regs;\n> +\tint i;\n> +\n> +\tfor (i = 0; i < (NPWM / 2); i++) {\n> +\t\tstruct atmel_tcb_channel *chan = &tcbpwm->bkup[i];\n> +\n> +\t\twritel(chan->cmr, base + ATMEL_TC_REG(i, CMR));\n> +\t\twritel(chan->ra, base + ATMEL_TC_REG(i, RA));\n> +\t\twritel(chan->rb, base + ATMEL_TC_REG(i, RB));\n> +\t\twritel(chan->rc, base + ATMEL_TC_REG(i, RC));\n> +\t\tif (chan->enabled) {\n> +\t\t\twritel(ATMEL_TC_CLKEN | ATMEL_TC_SWTRG,\n> +\t\t\t\tbase + ATMEL_TC_REG(i, CCR));\n> +\t\t}\n> +\t}\n> +\treturn 0;\n> +}\n> +#endif\n> +\n> +static SIMPLE_DEV_PM_OPS(atmel_tcb_pwm_pm_ops, atmel_tcb_pwm_suspend,\n> +\t\t\t atmel_tcb_pwm_resume);\n> +\n>  static struct platform_driver atmel_tcb_pwm_driver = {\n>  \t.driver = {\n>  \t\t.name = \"atmel-tcb-pwm\",\n>  \t\t.of_match_table = atmel_tcb_pwm_dt_ids,\n> +\t\t.pm = &atmel_tcb_pwm_pm_ops,\n>  \t},\n>  \t.probe = atmel_tcb_pwm_probe,\n>  \t.remove = atmel_tcb_pwm_remove,\n>","headers":{"Return-Path":"<linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org; spf=none (mailfrom)\n\tsmtp.mailfrom=lists.infradead.org (client-ip=65.50.211.133;\n\thelo=bombadil.infradead.org;\n\tenvelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;\n\treceiver=<UNKNOWN>)","ozlabs.org; dkim=pass (2048-bit key;\n\tunprotected) header.d=lists.infradead.org\n\theader.i=@lists.infradead.org header.b=\"olX7qXxP\"; \n\tdkim-atps=neutral"],"Received":["from bombadil.infradead.org (bombadil.infradead.org\n\t[65.50.211.133])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xzCmH0QSzz9sPk\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri, 22 Sep 2017 22:42:07 +1000 (AEST)","from localhost ([127.0.0.1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux))\n\tid 1dvNHI-0000Z5-Fu; Fri, 22 Sep 2017 12:41:56 +0000","from esa5.microchip.iphmx.com ([216.71.150.166])\n\tby bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux))\n\tid 1dvNHE-0000Uo-Od; Fri, 22 Sep 2017 12:41:54 +0000","from exsmtp01.microchip.com (HELO email.microchip.com)\n\t([198.175.253.37])\n\tby esa5.microchip.iphmx.com with ESMTP/TLS/AES128-SHA;\n\t22 Sep 2017 05:41:31 -0700","from [10.159.245.112] (10.10.76.4) by CHN-SV-EXCH01.mchp-main.com\n\t(10.10.76.37) with Microsoft SMTP Server id 14.3.352.0;\n\tFri, 22 Sep 2017 05:41:29 -0700"],"DKIM-Signature":"v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=lists.infradead.org; s=bombadil.20170209; h=Sender:\n\tContent-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post:\n\tList-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:\n\tMessage-ID:From:References:To:Subject:Reply-To:Content-ID:Content-Description\n\t:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=6TUwQbK1KkZMn2tl0BalY5TaY1Ip15nkQpd7Qz58aMI=;\n\tb=olX7qXxPj00RmU\n\tS49x1g9h8D/cnAJPYXILkb2Pu7BTn8wTdDQ/OGU7cEoFB7J/mPfJBngpHxx3ooyCtEXnsCrjAFfMC\n\tiKxG4Ua1L0SA2uc4D9k7zrrIsiTIITJSrTOLuIFq2+Etoyi7q9eSlVp6KyOiwsO1svHYYHn/AzaWE\n\tRx2hXIS6+ypeOG8GIDAkzR6C6/UeRdtBTndmXDpbXmbF1hhVGl/U7L0LklYgYlTfW7RDxOyXZrwKc\n\tC/rZBZIbhvfYshyScSNVzuBB96xj1RD/Ugs/sv6nHhV4zL3uPPNPDu5jfmeJvBCZ9tq7hJACI1nlN\n\tBTz8zrpUbu49O4GuJ3mg==;","X-IronPort-AV":"E=Sophos;i=\"5.42,427,1500966000\"; d=\"scan'208\";a=\"4927720\"","Subject":"Re: [PATCH v2 7/9] pwm: atmel-tcb: Support backup mode","To":"Romain Izard <romain.izard.pro@gmail.com>, Alexandre Belloni\n\t<alexandre.belloni@free-electrons.com>, Boris Brezillon\n\t<boris.brezillon@free-electrons.com>, Michael Turquette\n\t<mturquette@baylibre.com>, Stephen Boyd <sboyd@codeaurora.org>, Ludovic\n\tDesroches <ludovic.desroches@microchip.com>, Wenyou Yang\n\t<wenyou.yang@atmel.com>, Josh Wu <rainyfeeling@outlook.com>,\n\tDavid Woodhouse\n\t<dwmw2@infradead.org>, Brian Norris <computersforpeace@gmail.com>, Marek\n\tVasut <marek.vasut@gmail.com>,\n\tCyrille Pitchen <cyrille.pitchen@wedev4u.fr>, \n\tThierry Reding <thierry.reding@gmail.com>, Richard Genoud\n\t<richard.genoud@gmail.com>,\n\tGreg Kroah-Hartman <gregkh@linuxfoundation.org>, \n\tAlan Stern <stern@rowland.harvard.edu>","References":"<20170915140411.31716-1-romain.izard.pro@gmail.com>\n\t<20170915140411.31716-8-romain.izard.pro@gmail.com>","From":"Nicolas Ferre <nicolas.ferre@microchip.com>","Organization":"microchip","Message-ID":"<fa66d212-dbfb-08d4-1b2b-aaaa9f9d62de@microchip.com>","Date":"Fri, 22 Sep 2017 14:42:37 +0200","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101\n\tThunderbird/52.3.0","MIME-Version":"1.0","In-Reply-To":"<20170915140411.31716-8-romain.izard.pro@gmail.com>","Content-Language":"en-US","X-CRM114-Version":"20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ","X-CRM114-CacheID":"sfid-20170922_054152_931789_9975CC41 ","X-CRM114-Status":"GOOD (  16.93  )","X-Spam-Score":"-2.6 (--)","X-Spam-Report":"SpamAssassin version 3.4.1 on bombadil.infradead.org summary:\n\tContent analysis details:   (-2.6 points)\n\tpts rule name              description\n\t---- ----------------------\n\t--------------------------------------------------\n\t-0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/,\n\tlow trust [216.71.150.166 listed in list.dnswl.org]\n\t-0.0 SPF_PASS               SPF: sender matches SPF record\n\t-1.9 BAYES_00               BODY: Bayes spam probability is 0 to 1%\n\t[score: 0.0000]","X-BeenThere":"linux-mtd@lists.infradead.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"Linux MTD discussion mailing list <linux-mtd.lists.infradead.org>","List-Unsubscribe":"<http://lists.infradead.org/mailman/options/linux-mtd>,\n\t<mailto:linux-mtd-request@lists.infradead.org?subject=unsubscribe>","List-Archive":"<http://lists.infradead.org/pipermail/linux-mtd/>","List-Post":"<mailto:linux-mtd@lists.infradead.org>","List-Help":"<mailto:linux-mtd-request@lists.infradead.org?subject=help>","List-Subscribe":"<http://lists.infradead.org/mailman/listinfo/linux-mtd>,\n\t<mailto:linux-mtd-request@lists.infradead.org?subject=subscribe>","Cc":"linux-pwm@vger.kernel.org, linux-usb@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org,\n\tlinux-serial@vger.kernel.org, linux-clk@vger.kernel.org,\n\tlinux-arm-kernel@lists.infradead.org","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Sender":"\"linux-mtd\" <linux-mtd-bounces@lists.infradead.org>","Errors-To":"linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"}}]