[v2] mtd: atmel-quadspi: add suspend/resume hooks

Message ID 1528101993-4772-1-git-send-email-claudiu.beznea@microchip.com
State New
Delegated to: Boris Brezillon
Headers show
Series
  • [v2] mtd: atmel-quadspi: add suspend/resume hooks
Related show

Commit Message

Claudiu Beznea June 4, 2018, 8:46 a.m.
Implement suspend/resume hooks.

Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---

Changes in v2:
- use __maybe_unused instead of #ifdef CONFIG_PM_SLEEP

 drivers/mtd/spi-nor/atmel-quadspi.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

Comments

Boris Brezillon June 18, 2018, 9:49 a.m. | #1
Hi Claudiu,

The subject prefix should be "mtd: spi-nor: atmel-quadspi: ". No need
to send a new version just for that, I'll fix it when applying the
patch.

Looks good otherwise. Marek, any objection? If not, can you add your
Acked-by?

Thanks,

Boris

On Mon, 4 Jun 2018 11:46:33 +0300
Claudiu Beznea <claudiu.beznea@microchip.com> wrote:

> Implement suspend/resume hooks.
> 
> Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
> ---
> 
> Changes in v2:
> - use __maybe_unused instead of #ifdef CONFIG_PM_SLEEP
> 
>  drivers/mtd/spi-nor/atmel-quadspi.c | 21 +++++++++++++++++++++
>  1 file changed, 21 insertions(+)
> 
> diff --git a/drivers/mtd/spi-nor/atmel-quadspi.c b/drivers/mtd/spi-nor/atmel-quadspi.c
> index 6c5708bacad8..ceaaef47f02e 100644
> --- a/drivers/mtd/spi-nor/atmel-quadspi.c
> +++ b/drivers/mtd/spi-nor/atmel-quadspi.c
> @@ -737,6 +737,26 @@ static int atmel_qspi_remove(struct platform_device *pdev)
>  	return 0;
>  }
>  
> +static int __maybe_unused atmel_qspi_suspend(struct device *dev)
> +{
> +	struct atmel_qspi *aq = dev_get_drvdata(dev);
> +
> +	clk_disable_unprepare(aq->clk);
> +
> +	return 0;
> +}
> +
> +static int __maybe_unused atmel_qspi_resume(struct device *dev)
> +{
> +	struct atmel_qspi *aq = dev_get_drvdata(dev);
> +
> +	clk_prepare_enable(aq->clk);
> +
> +	return atmel_qspi_init(aq);
> +}
> +
> +static SIMPLE_DEV_PM_OPS(atmel_qspi_pm_ops, atmel_qspi_suspend,
> +			 atmel_qspi_resume);
>  
>  static const struct of_device_id atmel_qspi_dt_ids[] = {
>  	{ .compatible = "atmel,sama5d2-qspi" },
> @@ -749,6 +769,7 @@ static struct platform_driver atmel_qspi_driver = {
>  	.driver = {
>  		.name	= "atmel_qspi",
>  		.of_match_table	= atmel_qspi_dt_ids,
> +		.pm	= &atmel_qspi_pm_ops,
>  	},
>  	.probe		= atmel_qspi_probe,
>  	.remove		= atmel_qspi_remove,
Marek Vasut June 18, 2018, 9:53 a.m. | #2
On 06/18/2018 11:49 AM, Boris Brezillon wrote:
> Hi Claudiu,
> 
> The subject prefix should be "mtd: spi-nor: atmel-quadspi: ". No need
> to send a new version just for that, I'll fix it when applying the
> patch.
> 
> Looks good otherwise. Marek, any objection? If not, can you add your
> Acked-by?

Will this work if you have ie. ubifs mounted on that QSPI NOR and you
suspect and resume during IO ? I think it would, but just curious if
there could be some problem.

> Thanks,
> 
> Boris
> 
> On Mon, 4 Jun 2018 11:46:33 +0300
> Claudiu Beznea <claudiu.beznea@microchip.com> wrote:
> 
>> Implement suspend/resume hooks.
>>
>> Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
>> ---
>>
>> Changes in v2:
>> - use __maybe_unused instead of #ifdef CONFIG_PM_SLEEP
>>
>>  drivers/mtd/spi-nor/atmel-quadspi.c | 21 +++++++++++++++++++++
>>  1 file changed, 21 insertions(+)
>>
>> diff --git a/drivers/mtd/spi-nor/atmel-quadspi.c b/drivers/mtd/spi-nor/atmel-quadspi.c
>> index 6c5708bacad8..ceaaef47f02e 100644
>> --- a/drivers/mtd/spi-nor/atmel-quadspi.c
>> +++ b/drivers/mtd/spi-nor/atmel-quadspi.c
>> @@ -737,6 +737,26 @@ static int atmel_qspi_remove(struct platform_device *pdev)
>>  	return 0;
>>  }
>>  
>> +static int __maybe_unused atmel_qspi_suspend(struct device *dev)
>> +{
>> +	struct atmel_qspi *aq = dev_get_drvdata(dev);
>> +
>> +	clk_disable_unprepare(aq->clk);
>> +
>> +	return 0;
>> +}
>> +
>> +static int __maybe_unused atmel_qspi_resume(struct device *dev)
>> +{
>> +	struct atmel_qspi *aq = dev_get_drvdata(dev);
>> +
>> +	clk_prepare_enable(aq->clk);
>> +
>> +	return atmel_qspi_init(aq);
>> +}
>> +
>> +static SIMPLE_DEV_PM_OPS(atmel_qspi_pm_ops, atmel_qspi_suspend,
>> +			 atmel_qspi_resume);
>>  
>>  static const struct of_device_id atmel_qspi_dt_ids[] = {
>>  	{ .compatible = "atmel,sama5d2-qspi" },
>> @@ -749,6 +769,7 @@ static struct platform_driver atmel_qspi_driver = {
>>  	.driver = {
>>  		.name	= "atmel_qspi",
>>  		.of_match_table	= atmel_qspi_dt_ids,
>> +		.pm	= &atmel_qspi_pm_ops,
>>  	},
>>  	.probe		= atmel_qspi_probe,
>>  	.remove		= atmel_qspi_remove,
Claudiu Beznea June 18, 2018, noon | #3
On 18.06.2018 12:53, Marek Vasut wrote:
> On 06/18/2018 11:49 AM, Boris Brezillon wrote:
>> Hi Claudiu,
>>
>> The subject prefix should be "mtd: spi-nor: atmel-quadspi: ". No need
>> to send a new version just for that, I'll fix it when applying the
>> patch.
>>
Hi Boris,

Thank you!

>> Looks good otherwise. Marek, any objection? If not, can you add your
>> Acked-by?
> 
> Will this work if you have ie. ubifs mounted on that QSPI NOR and you
> suspect and resume during IO ? I think it would, but just curious if
> there could be some problem.

Hi Marek,

I tested only with read/writes while suspending, simple scripts, but not
having ubifs mounted on QSPI NOR. I will double check also with ubifs
mounted on QSPI NOR and come back with the results.

Thank you,
Claudiu

> 
>> Thanks,
>>
>> Boris
>>
>> On Mon, 4 Jun 2018 11:46:33 +0300
>> Claudiu Beznea <claudiu.beznea@microchip.com> wrote:
>>
>>> Implement suspend/resume hooks.
>>>
>>> Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
>>> ---
>>>
>>> Changes in v2:
>>> - use __maybe_unused instead of #ifdef CONFIG_PM_SLEEP
>>>
>>>  drivers/mtd/spi-nor/atmel-quadspi.c | 21 +++++++++++++++++++++
>>>  1 file changed, 21 insertions(+)
>>>
>>> diff --git a/drivers/mtd/spi-nor/atmel-quadspi.c b/drivers/mtd/spi-nor/atmel-quadspi.c
>>> index 6c5708bacad8..ceaaef47f02e 100644
>>> --- a/drivers/mtd/spi-nor/atmel-quadspi.c
>>> +++ b/drivers/mtd/spi-nor/atmel-quadspi.c
>>> @@ -737,6 +737,26 @@ static int atmel_qspi_remove(struct platform_device *pdev)
>>>  	return 0;
>>>  }
>>>  
>>> +static int __maybe_unused atmel_qspi_suspend(struct device *dev)
>>> +{
>>> +	struct atmel_qspi *aq = dev_get_drvdata(dev);
>>> +
>>> +	clk_disable_unprepare(aq->clk);
>>> +
>>> +	return 0;
>>> +}
>>> +
>>> +static int __maybe_unused atmel_qspi_resume(struct device *dev)
>>> +{
>>> +	struct atmel_qspi *aq = dev_get_drvdata(dev);
>>> +
>>> +	clk_prepare_enable(aq->clk);
>>> +
>>> +	return atmel_qspi_init(aq);
>>> +}
>>> +
>>> +static SIMPLE_DEV_PM_OPS(atmel_qspi_pm_ops, atmel_qspi_suspend,
>>> +			 atmel_qspi_resume);
>>>  
>>>  static const struct of_device_id atmel_qspi_dt_ids[] = {
>>>  	{ .compatible = "atmel,sama5d2-qspi" },
>>> @@ -749,6 +769,7 @@ static struct platform_driver atmel_qspi_driver = {
>>>  	.driver = {
>>>  		.name	= "atmel_qspi",
>>>  		.of_match_table	= atmel_qspi_dt_ids,
>>> +		.pm	= &atmel_qspi_pm_ops,
>>>  	},
>>>  	.probe		= atmel_qspi_probe,
>>>  	.remove		= atmel_qspi_remove,
> 
>

Patch

diff --git a/drivers/mtd/spi-nor/atmel-quadspi.c b/drivers/mtd/spi-nor/atmel-quadspi.c
index 6c5708bacad8..ceaaef47f02e 100644
--- a/drivers/mtd/spi-nor/atmel-quadspi.c
+++ b/drivers/mtd/spi-nor/atmel-quadspi.c
@@ -737,6 +737,26 @@  static int atmel_qspi_remove(struct platform_device *pdev)
 	return 0;
 }
 
+static int __maybe_unused atmel_qspi_suspend(struct device *dev)
+{
+	struct atmel_qspi *aq = dev_get_drvdata(dev);
+
+	clk_disable_unprepare(aq->clk);
+
+	return 0;
+}
+
+static int __maybe_unused atmel_qspi_resume(struct device *dev)
+{
+	struct atmel_qspi *aq = dev_get_drvdata(dev);
+
+	clk_prepare_enable(aq->clk);
+
+	return atmel_qspi_init(aq);
+}
+
+static SIMPLE_DEV_PM_OPS(atmel_qspi_pm_ops, atmel_qspi_suspend,
+			 atmel_qspi_resume);
 
 static const struct of_device_id atmel_qspi_dt_ids[] = {
 	{ .compatible = "atmel,sama5d2-qspi" },
@@ -749,6 +769,7 @@  static struct platform_driver atmel_qspi_driver = {
 	.driver = {
 		.name	= "atmel_qspi",
 		.of_match_table	= atmel_qspi_dt_ids,
+		.pm	= &atmel_qspi_pm_ops,
 	},
 	.probe		= atmel_qspi_probe,
 	.remove		= atmel_qspi_remove,