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@xxxxxxxxxxxxxx/ > > Signed-off-by: Marco Felsch <m.felsch@xxxxxxxxxxxxxx> Reviewed-by: Guenter Roeck <linux@xxxxxxxxxxxx> > --- > 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 >