diff mbox series

watchdog: da9062: fix power management ops

Message ID 20200207071518.5559-1-m.felsch@pengutronix.de (mailing list archive)
State Accepted
Headers show
Series watchdog: da9062: fix power management ops | expand

Commit Message

Marco Felsch Feb. 7, 2020, 7:15 a.m. UTC
This fixes commit f6c98b08381c ("watchdog: da9062: add power management
ops"). During discussion [1] we agreed that this should be configurable
because it is a device quirk if we can't use the hw watchdog auto
suspend function.

[1] https://lore.kernel.org/linux-watchdog/20191128171931.22563-1-m.felsch@pengutronix.de/

Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
---
Hi,

unfortunately I forgot to add an v2 tag [2] and Guenter took the
wrong patch version. It is completely my fault anyway this should be
part of the next rc tag for 5.6. The device property should be applied
already so this patch adds only the usage and therefore don't include
the dt-folks in the to: and cc:.

Regards,
  Marco

[2] https://lkml.org/lkml/2020/1/8/210

 drivers/watchdog/da9062_wdt.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

Comments

Guenter Roeck Feb. 7, 2020, 2:56 p.m. UTC | #1
On Fri, Feb 07, 2020 at 08:15:18AM +0100, Marco Felsch wrote:
> This fixes commit f6c98b08381c ("watchdog: da9062: add power management
> ops"). During discussion [1] we agreed that this should be configurable
> because it is a device quirk if we can't use the hw watchdog auto
> suspend function.
> 
> [1] https://lore.kernel.org/linux-watchdog/20191128171931.22563-1-m.felsch@pengutronix.de/
> 
> Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>

Reviewed-by: Guenter Roeck <linux@roeck-us.net>

> ---
> Hi,
> 
> unfortunately I forgot to add an v2 tag [2] and Guenter took the
> wrong patch version. It is completely my fault anyway this should be
> part of the next rc tag for 5.6. The device property should be applied
> already so this patch adds only the usage and therefore don't include
> the dt-folks in the to: and cc:.
> 
> Regards,
>   Marco
> 
> [2] https://lkml.org/lkml/2020/1/8/210
> 
>  drivers/watchdog/da9062_wdt.c | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
> diff --git a/drivers/watchdog/da9062_wdt.c b/drivers/watchdog/da9062_wdt.c
> index 47eefe072b40..77b6b5336067 100644
> --- a/drivers/watchdog/da9062_wdt.c
> +++ b/drivers/watchdog/da9062_wdt.c
> @@ -16,6 +16,7 @@
>  #include <linux/jiffies.h>
>  #include <linux/mfd/da9062/registers.h>
>  #include <linux/mfd/da9062/core.h>
> +#include <linux/property.h>
>  #include <linux/regmap.h>
>  #include <linux/of.h>
>  
> @@ -31,6 +32,7 @@ static const unsigned int wdt_timeout[] = { 0, 2, 4, 8, 16, 32, 65, 131 };
>  struct da9062_watchdog {
>  	struct da9062 *hw;
>  	struct watchdog_device wdtdev;
> +	bool use_sw_pm;
>  };
>  
>  static unsigned int da9062_wdt_timeout_to_sel(unsigned int secs)
> @@ -200,6 +202,8 @@ static int da9062_wdt_probe(struct platform_device *pdev)
>  	if (!wdt)
>  		return -ENOMEM;
>  
> +	wdt->use_sw_pm = device_property_present(dev, "dlg,use-sw-pm");
> +
>  	wdt->hw = chip;
>  
>  	wdt->wdtdev.info = &da9062_watchdog_info;
> @@ -226,6 +230,10 @@ static int da9062_wdt_probe(struct platform_device *pdev)
>  static int __maybe_unused da9062_wdt_suspend(struct device *dev)
>  {
>  	struct watchdog_device *wdd = dev_get_drvdata(dev);
> +	struct da9062_watchdog *wdt = watchdog_get_drvdata(wdd);
> +
> +	if (!wdt->use_sw_pm)
> +		return 0;
>  
>  	if (watchdog_active(wdd))
>  		return da9062_wdt_stop(wdd);
> @@ -236,6 +244,10 @@ static int __maybe_unused da9062_wdt_suspend(struct device *dev)
>  static int __maybe_unused da9062_wdt_resume(struct device *dev)
>  {
>  	struct watchdog_device *wdd = dev_get_drvdata(dev);
> +	struct da9062_watchdog *wdt = watchdog_get_drvdata(wdd);
> +
> +	if (!wdt->use_sw_pm)
> +		return 0;
>  
>  	if (watchdog_active(wdd))
>  		return da9062_wdt_start(wdd);
> -- 
> 2.20.1
>
Adam Thomson Feb. 10, 2020, 11:29 a.m. UTC | #2
On 07 February 2020 14:56, Guenter Roeck wrote:

> On Fri, Feb 07, 2020 at 08:15:18AM +0100, Marco Felsch wrote:
> > This fixes commit f6c98b08381c ("watchdog: da9062: add power management
> > ops"). During discussion [1] we agreed that this should be configurable
> > because it is a device quirk if we can't use the hw watchdog auto
> > suspend function.
> >
> > [1] https://lore.kernel.org/linux-watchdog/20191128171931.22563-1-
> m.felsch@pengutronix.de/
> >
> > Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
> 
> Reviewed-by: Guenter Roeck <linux@roeck-us.net>

Reviewed-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>

> 
> > ---
> > Hi,
> >
> > unfortunately I forgot to add an v2 tag [2] and Guenter took the
> > wrong patch version. It is completely my fault anyway this should be
> > part of the next rc tag for 5.6. The device property should be applied
> > already so this patch adds only the usage and therefore don't include
> > the dt-folks in the to: and cc:.
> >
> > Regards,
> >   Marco
> >
> > [2] https://lkml.org/lkml/2020/1/8/210
> >
> >  drivers/watchdog/da9062_wdt.c | 12 ++++++++++++
> >  1 file changed, 12 insertions(+)
> >
> > diff --git a/drivers/watchdog/da9062_wdt.c b/drivers/watchdog/da9062_wdt.c
> > index 47eefe072b40..77b6b5336067 100644
> > --- a/drivers/watchdog/da9062_wdt.c
> > +++ b/drivers/watchdog/da9062_wdt.c
> > @@ -16,6 +16,7 @@
> >  #include <linux/jiffies.h>
> >  #include <linux/mfd/da9062/registers.h>
> >  #include <linux/mfd/da9062/core.h>
> > +#include <linux/property.h>
> >  #include <linux/regmap.h>
> >  #include <linux/of.h>
> >
> > @@ -31,6 +32,7 @@ static const unsigned int wdt_timeout[] = { 0, 2, 4, 8, 16, 32,
> 65, 131 };
> >  struct da9062_watchdog {
> >  	struct da9062 *hw;
> >  	struct watchdog_device wdtdev;
> > +	bool use_sw_pm;
> >  };
> >
> >  static unsigned int da9062_wdt_timeout_to_sel(unsigned int secs)
> > @@ -200,6 +202,8 @@ static int da9062_wdt_probe(struct platform_device
> *pdev)
> >  	if (!wdt)
> >  		return -ENOMEM;
> >
> > +	wdt->use_sw_pm = device_property_present(dev, "dlg,use-sw-pm");
> > +
> >  	wdt->hw = chip;
> >
> >  	wdt->wdtdev.info = &da9062_watchdog_info;
> > @@ -226,6 +230,10 @@ static int da9062_wdt_probe(struct platform_device
> *pdev)
> >  static int __maybe_unused da9062_wdt_suspend(struct device *dev)
> >  {
> >  	struct watchdog_device *wdd = dev_get_drvdata(dev);
> > +	struct da9062_watchdog *wdt = watchdog_get_drvdata(wdd);
> > +
> > +	if (!wdt->use_sw_pm)
> > +		return 0;
> >
> >  	if (watchdog_active(wdd))
> >  		return da9062_wdt_stop(wdd);
> > @@ -236,6 +244,10 @@ static int __maybe_unused
> da9062_wdt_suspend(struct device *dev)
> >  static int __maybe_unused da9062_wdt_resume(struct device *dev)
> >  {
> >  	struct watchdog_device *wdd = dev_get_drvdata(dev);
> > +	struct da9062_watchdog *wdt = watchdog_get_drvdata(wdd);
> > +
> > +	if (!wdt->use_sw_pm)
> > +		return 0;
> >
> >  	if (watchdog_active(wdd))
> >  		return da9062_wdt_start(wdd);
> > --
> > 2.20.1
> >
diff mbox series

Patch

diff --git a/drivers/watchdog/da9062_wdt.c b/drivers/watchdog/da9062_wdt.c
index 47eefe072b40..77b6b5336067 100644
--- a/drivers/watchdog/da9062_wdt.c
+++ b/drivers/watchdog/da9062_wdt.c
@@ -16,6 +16,7 @@ 
 #include <linux/jiffies.h>
 #include <linux/mfd/da9062/registers.h>
 #include <linux/mfd/da9062/core.h>
+#include <linux/property.h>
 #include <linux/regmap.h>
 #include <linux/of.h>
 
@@ -31,6 +32,7 @@  static const unsigned int wdt_timeout[] = { 0, 2, 4, 8, 16, 32, 65, 131 };
 struct da9062_watchdog {
 	struct da9062 *hw;
 	struct watchdog_device wdtdev;
+	bool use_sw_pm;
 };
 
 static unsigned int da9062_wdt_timeout_to_sel(unsigned int secs)
@@ -200,6 +202,8 @@  static int da9062_wdt_probe(struct platform_device *pdev)
 	if (!wdt)
 		return -ENOMEM;
 
+	wdt->use_sw_pm = device_property_present(dev, "dlg,use-sw-pm");
+
 	wdt->hw = chip;
 
 	wdt->wdtdev.info = &da9062_watchdog_info;
@@ -226,6 +230,10 @@  static int da9062_wdt_probe(struct platform_device *pdev)
 static int __maybe_unused da9062_wdt_suspend(struct device *dev)
 {
 	struct watchdog_device *wdd = dev_get_drvdata(dev);
+	struct da9062_watchdog *wdt = watchdog_get_drvdata(wdd);
+
+	if (!wdt->use_sw_pm)
+		return 0;
 
 	if (watchdog_active(wdd))
 		return da9062_wdt_stop(wdd);
@@ -236,6 +244,10 @@  static int __maybe_unused da9062_wdt_suspend(struct device *dev)
 static int __maybe_unused da9062_wdt_resume(struct device *dev)
 {
 	struct watchdog_device *wdd = dev_get_drvdata(dev);
+	struct da9062_watchdog *wdt = watchdog_get_drvdata(wdd);
+
+	if (!wdt->use_sw_pm)
+		return 0;
 
 	if (watchdog_active(wdd))
 		return da9062_wdt_start(wdd);