Re: [PATCH] watchdog: da9062: fix power management ops

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
> 



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux