Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp1982068imu; Wed, 21 Nov 2018 05:07:04 -0800 (PST) X-Google-Smtp-Source: AFSGD/UyhYhZyO2Raa0IkVXtxGzJikPMJQL2iVcMP7iIAORcBmsjgllT8vXfCfz+1lyFS06PYMJf X-Received: by 2002:a17:902:bc43:: with SMTP id t3mr1180183plz.124.1542805624690; Wed, 21 Nov 2018 05:07:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542805624; cv=none; d=google.com; s=arc-20160816; b=ieE52MdVH+Y1jtV4ZEGkloe0dxo8TVugsdJIUKFe6eDJnZdFyLVFas2wNTdtZT9PYz 6VGkjp+1oR0CBp3IX1+UtwXDsST98dvFzelc/RJhpjsp/yi1A9+EBTd2TVqC5lzJzNpA PBWlfUMXpO09b0xdIKr96+n3Ooe4q+FtS97O0c3FC7YVmJedZEVlGPjProkN0LW5Uepq 1D+K/nLm1j0PpeBMvB23H182xGX9pMrHbQY5Lpwf3qtG65TE8jqGThkFV2kCr/2BWe0j bYLxH6e3tYyntdKg3EQ+BLOvl6yiPWe5uqv9MG0uThDjQ0T+rrrGQZ66YVLya8i/t+VA twQg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:dkim-filter; bh=6nB+pwI71d1hh9MhycAUzgQkuCuLBlXbSC9Cfv8J7IM=; b=M7gZ69FaSnfBKFrZHL4Ne+w0KYdeziQvW33wxKcOceomKwC2mO2rT2GaU5eNhxdxto +aDMf8fu1JW/66rsXx/COrYMvOZLmGcWskyzaanzVligGCT6ApW0lyMCRcVh+dOpFUpH ReQJpmMZjEiWqD8hCdtUqTOAFDdR7GtwFXfCLIZT4Y63lDJpK+/9ml2baqUvdvO8uWKM fKgQ6vpw3jYq65A32s3d4z3moJ2ILJEg9joewcRtMhKQzHIsZgLxUJIZvdT6os5TNa7j ornblUDkdVmzy77Od1c2iwqB4z5OmHj2pTdLxR4lSAkSppK04FWIV7xJo0WNTgeB962x QgLQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@upb.ro header.s=96342B8A-77E4-11E5-BA93-D93D0963A2DF header.b=m6HaLnY+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 3-v6si46557429plz.12.2018.11.21.05.06.30; Wed, 21 Nov 2018 05:07:04 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@upb.ro header.s=96342B8A-77E4-11E5-BA93-D93D0963A2DF header.b=m6HaLnY+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730297AbeKUWNW (ORCPT + 99 others); Wed, 21 Nov 2018 17:13:22 -0500 Received: from mail-sender200.upb.ro ([141.85.13.200]:38932 "EHLO mx.upb.ro" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729525AbeKUWNU (ORCPT ); Wed, 21 Nov 2018 17:13:20 -0500 Received: from mx.upb.ro (localhost [127.0.0.1]) by mx.upb.ro (Postfix) with ESMTPS id BE290B56006C; Wed, 21 Nov 2018 13:28:53 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by mx.upb.ro (Postfix) with ESMTP id 9C292B560073; Wed, 21 Nov 2018 13:28:53 +0200 (EET) DKIM-Filter: OpenDKIM Filter v2.10.3 mx.upb.ro 9C292B560073 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=upb.ro; s=96342B8A-77E4-11E5-BA93-D93D0963A2DF; t=1542799733; bh=6nB+pwI71d1hh9MhycAUzgQkuCuLBlXbSC9Cfv8J7IM=; h=From:To:Date:Message-Id:MIME-Version; b=m6HaLnY+37SKoYMSXmEOq/URcv1QHeHSbBYJPjlCXLjmsNApNHSIUDn9ftNIxa7nZ prjN3S0ch8UkefeAcQlAJDvrVzmvk+aKGvkkDdbEJQqdUtgOPRa0DAOQZpWNTWkFSd Sou71sHvpyG20+rmYMpnc7LxSElRl5+NfLoYHJXg= Received: from mx.upb.ro ([127.0.0.1]) by localhost (mx.upb.ro [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id jQ31SzndMltp; Wed, 21 Nov 2018 13:28:53 +0200 (EET) Received: from asus-rog.localdomain (arh.pub.ro [141.85.160.17]) by mx.upb.ro (Postfix) with ESMTPSA id 73998B56006C; Wed, 21 Nov 2018 13:28:53 +0200 (EET) From: Radu Pirea To: richard.genoud@gmail.com, lee.jones@linaro.org, robh+dt@kernel.org, mark.rutland@arm.com, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, ludovic.desroches@microchip.co, broonie@kernel.org Cc: linux-kernel@vger.kernel.org, linux-spi@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Radu Pirea Subject: [PATCH 1/3] spi: at91-usart: add power management support Date: Wed, 21 Nov 2018 13:27:30 +0200 Message-Id: <20181121112732.15690-2-radu_nicolae.pirea@upb.ro> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181121112732.15690-1-radu_nicolae.pirea@upb.ro> References: <20181121112732.15690-1-radu_nicolae.pirea@upb.ro> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch implements power management callback function for USART as SPI driver. Signed-off-by: Radu Pirea --- drivers/spi/spi-at91-usart.c | 61 ++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/drivers/spi/spi-at91-usart.c b/drivers/spi/spi-at91-usart.c index a924657642fa..0b07c746453d 100644 --- a/drivers/spi/spi-at91-usart.c +++ b/drivers/spi/spi-at91-usart.c @@ -13,6 +13,7 @@ #include #include #include +#include =20 #include =20 @@ -399,6 +400,59 @@ static int at91_usart_spi_probe(struct platform_devi= ce *pdev) return ret; } =20 +__maybe_unused static int at91_usart_spi_runtime_suspend(struct device *= dev) +{ + struct spi_controller *ctlr =3D dev_get_drvdata(dev); + struct at91_usart_spi *aus =3D spi_master_get_devdata(ctlr); + + clk_disable_unprepare(aus->clk); + pinctrl_pm_select_sleep_state(dev); + + return 0; +} + +__maybe_unused static int at91_usart_spi_runtime_resume(struct device *d= ev) +{ + struct spi_controller *ctrl =3D dev_get_drvdata(dev); + struct at91_usart_spi *aus =3D spi_master_get_devdata(ctrl); + + pinctrl_pm_select_default_state(dev); + + return clk_prepare_enable(aus->clk); +} + +__maybe_unused static int at91_usart_spi_suspend(struct device *dev) +{ + struct spi_controller *ctrl =3D dev_get_drvdata(dev); + int ret; + + ret =3D spi_controller_suspend(ctrl); + if (ret) + return ret; + + if (!pm_runtime_suspended(dev)) + at91_usart_spi_runtime_suspend(dev); + + return 0; +} + +__maybe_unused static int at91_usart_spi_resume(struct device *dev) +{ + struct spi_controller *ctrl =3D dev_get_drvdata(dev); + struct at91_usart_spi *aus =3D spi_master_get_devdata(ctrl); + int ret; + + if (!pm_runtime_suspended(dev)) { + ret =3D at91_usart_spi_runtime_resume(dev); + if (ret) + return ret; + } + + at91_usart_spi_init(aus); + + return spi_controller_resume(ctrl); +} + static int at91_usart_spi_remove(struct platform_device *pdev) { struct spi_controller *ctlr =3D platform_get_drvdata(pdev); @@ -409,6 +463,12 @@ static int at91_usart_spi_remove(struct platform_dev= ice *pdev) return 0; } =20 +static const struct dev_pm_ops at91_usart_spi_pm_ops =3D { + SET_SYSTEM_SLEEP_PM_OPS(at91_usart_spi_suspend, at91_usart_spi_resume) + SET_RUNTIME_PM_OPS(at91_usart_spi_runtime_suspend, + at91_usart_spi_runtime_resume, NULL) +}; + static const struct of_device_id at91_usart_spi_dt_ids[] =3D { { .compatible =3D "microchip,at91sam9g45-usart-spi"}, { /* sentinel */} @@ -419,6 +479,7 @@ MODULE_DEVICE_TABLE(of, at91_usart_spi_dt_ids); static struct platform_driver at91_usart_spi_driver =3D { .driver =3D { .name =3D "at91_usart_spi", + .pm =3D &at91_usart_spi_pm_ops, }, .probe =3D at91_usart_spi_probe, .remove =3D at91_usart_spi_remove, --=20 2.19.1