diff mbox

[2/2] spi: atmel: add deepest PM support to SAMA5D2

Message ID 20170414082243.23002-2-quentin.schulz@free-electrons.com (mailing list archive)
State New, archived
Headers show

Commit Message

Quentin Schulz April 14, 2017, 8:22 a.m. UTC
This adds deepest (Backup+Self-Refresh) PM support to the ATMEL SAMA5D2
SoC's SPI controller.

When resuming from deepest state, it is required to restore MR register
as the registers are lost since VDD core has been shut down when
entering deepest state on the SAMA5D2.

Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com>
---

v2:
  - fix commit log explanation on why restoring the registers is required
  after resuming from deepest state,

 drivers/spi/spi-atmel.c | 9 +++++++++
 1 file changed, 9 insertions(+)

Comments

Alexandre Belloni April 14, 2017, 10:35 a.m. UTC | #1
On 14/04/2017 at 10:22:43 +0200, Quentin Schulz wrote:
> This adds deepest (Backup+Self-Refresh) PM support to the ATMEL SAMA5D2
> SoC's SPI controller.
> 
> When resuming from deepest state, it is required to restore MR register
> as the registers are lost since VDD core has been shut down when
> entering deepest state on the SAMA5D2.
> 
> Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com>
Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>

> ---
> 
> v2:
>   - fix commit log explanation on why restoring the registers is required
>   after resuming from deepest state,
> 
>  drivers/spi/spi-atmel.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/drivers/spi/spi-atmel.c b/drivers/spi/spi-atmel.c
> index 247d920..1eb83c9 100644
> --- a/drivers/spi/spi-atmel.c
> +++ b/drivers/spi/spi-atmel.c
> @@ -1702,8 +1702,17 @@ static int atmel_spi_suspend(struct device *dev)
>  static int atmel_spi_resume(struct device *dev)
>  {
>  	struct spi_master *master = dev_get_drvdata(dev);
> +	struct atmel_spi *as = spi_master_get_devdata(master);
>  	int ret;
>  
> +	ret = clk_prepare_enable(as->clk);
> +	if (ret)
> +		return ret;
> +
> +	atmel_spi_init(as);
> +
> +	clk_disable_unprepare(as->clk);
> +
>  	if (!pm_runtime_suspended(dev)) {
>  		ret = atmel_spi_runtime_resume(dev);
>  		if (ret)
> -- 
> 2.9.3
>
Nicolas Ferre April 18, 2017, 8:50 a.m. UTC | #2
(sorry for malformed email but I didn't want to hold this patch longer)

On 14/04/2017 at 10:22:43 +0200, Quentin Schulz wrote:
> This adds deepest (Backup+Self-Refresh) PM support to the ATMEL SAMA5D2
> SoC's SPI controller.
>
> When resuming from deepest state, it is required to restore MR register
> as the registers are lost since VDD core has been shut down when
> entering deepest state on the SAMA5D2.
>
> Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com>
Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>

Acked-by: Nicolas Ferre <nicolas.ferre@microchip.com>

> ---
>
> v2:
>   - fix commit log explanation on why restoring the registers is required
>   after resuming from deepest state,
>
>  drivers/spi/spi-atmel.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
>
> diff --git a/drivers/spi/spi-atmel.c b/drivers/spi/spi-atmel.c
> index 247d920..1eb83c9 100644
> --- a/drivers/spi/spi-atmel.c
> +++ b/drivers/spi/spi-atmel.c
> @@ -1702,8 +1702,17 @@ static int atmel_spi_suspend(struct device *dev)
>  static int atmel_spi_resume(struct device *dev)
>  {
>       struct spi_master *master = dev_get_drvdata(dev);
> +     struct atmel_spi *as = spi_master_get_devdata(master);
>       int ret;
>
> +     ret = clk_prepare_enable(as->clk);
> +     if (ret)
> +             return ret;
> +
> +     atmel_spi_init(as);
> +
> +     clk_disable_unprepare(as->clk);
> +
>       if (!pm_runtime_suspended(dev)) {
>               ret = atmel_spi_runtime_resume(dev);
>               if (ret)
> --
> 2.9.3
>

--
Alexandre Belloni, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/spi/spi-atmel.c b/drivers/spi/spi-atmel.c
index 247d920..1eb83c9 100644
--- a/drivers/spi/spi-atmel.c
+++ b/drivers/spi/spi-atmel.c
@@ -1702,8 +1702,17 @@  static int atmel_spi_suspend(struct device *dev)
 static int atmel_spi_resume(struct device *dev)
 {
 	struct spi_master *master = dev_get_drvdata(dev);
+	struct atmel_spi *as = spi_master_get_devdata(master);
 	int ret;
 
+	ret = clk_prepare_enable(as->clk);
+	if (ret)
+		return ret;
+
+	atmel_spi_init(as);
+
+	clk_disable_unprepare(as->clk);
+
 	if (!pm_runtime_suspended(dev)) {
 		ret = atmel_spi_runtime_resume(dev);
 		if (ret)