All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] hwmon: pwm-fan: Silence error on probe deferral
@ 2018-09-21 10:10 Thierry Reding
  2018-09-21 10:10 ` [PATCH 2/2] hwmon: pwm-fan: Set fan speed to 0 on suspend Thierry Reding
  2018-09-21 13:21 ` [PATCH 1/2] hwmon: pwm-fan: Silence error on probe deferral Guenter Roeck
  0 siblings, 2 replies; 4+ messages in thread
From: Thierry Reding @ 2018-09-21 10:10 UTC (permalink / raw)
  To: Jean Delvare, Guenter Roeck
  Cc: Kamil Debski, Bartlomiej Zolnierkiewicz, linux-hwmon, linux-kernel

From: Thierry Reding <treding@nvidia.com>

Probe deferrals aren't actual errors, so silence the error message in
case the PWM cannot yet be acquired.

Signed-off-by: Thierry Reding <treding@nvidia.com>
---
 drivers/hwmon/pwm-fan.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/hwmon/pwm-fan.c b/drivers/hwmon/pwm-fan.c
index 7838af58f92d..936aaf76dd6e 100644
--- a/drivers/hwmon/pwm-fan.c
+++ b/drivers/hwmon/pwm-fan.c
@@ -221,8 +221,12 @@ static int pwm_fan_probe(struct platform_device *pdev)
 
 	ctx->pwm = devm_of_pwm_get(&pdev->dev, pdev->dev.of_node, NULL);
 	if (IS_ERR(ctx->pwm)) {
-		dev_err(&pdev->dev, "Could not get PWM\n");
-		return PTR_ERR(ctx->pwm);
+		ret = PTR_ERR(ctx->pwm);
+
+		if (ret != -EPROBE_DEFER)
+			dev_err(&pdev->dev, "Could not get PWM: %d\n", ret);
+
+		return ret;
 	}
 
 	platform_set_drvdata(pdev, ctx);
-- 
2.19.0

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 2/2] hwmon: pwm-fan: Set fan speed to 0 on suspend
  2018-09-21 10:10 [PATCH 1/2] hwmon: pwm-fan: Silence error on probe deferral Thierry Reding
@ 2018-09-21 10:10 ` Thierry Reding
  2018-09-21 13:23   ` Guenter Roeck
  2018-09-21 13:21 ` [PATCH 1/2] hwmon: pwm-fan: Silence error on probe deferral Guenter Roeck
  1 sibling, 1 reply; 4+ messages in thread
From: Thierry Reding @ 2018-09-21 10:10 UTC (permalink / raw)
  To: Jean Delvare, Guenter Roeck
  Cc: Kamil Debski, Bartlomiej Zolnierkiewicz, linux-hwmon, linux-kernel

From: Thierry Reding <treding@nvidia.com>

Technically this is not required because disabling the PWM should be
enough. However, when support for atomic operations was implemented in
the PWM subsystem, only actual changes to the PWM channel are applied
during pwm_config(), which means that during after resume from suspend
the old settings won't be applied.

One possible solution is for the PWM driver to implement its own PM
operations such that settings from before suspend get applied on resume.
This has the disadvantage of completely ignoring any particular ordering
requirements that PWM user drivers might have, so it is best to leave it
up to the user drivers to apply the settings that they want at the
appropriate time.

Another way to solve this would be to read back the current state of the
PWM at the time of resume. That way, in case the configuration was lost
during suspend, applying the old settings in PWM user drivers would
actually get them applied because they differ from the current settings.
However, not all PWM drivers support reading the hardware state, and not
all hardware may support it.

The best workaround at this point seems to be to let PWM user drivers
tell the PWM subsystem that the PWM is turned off by, in addition to
disabling it, also setting the duty cycle to 0. This causes the resume
operation to apply a configuration that is different from the current
configuration, resulting in the proper state from before suspend getting
restored.

Signed-off-by: Thierry Reding <treding@nvidia.com>
---
 drivers/hwmon/pwm-fan.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/hwmon/pwm-fan.c b/drivers/hwmon/pwm-fan.c
index 936aaf76dd6e..7da6a160d45a 100644
--- a/drivers/hwmon/pwm-fan.c
+++ b/drivers/hwmon/pwm-fan.c
@@ -294,9 +294,19 @@ static int pwm_fan_remove(struct platform_device *pdev)
 static int pwm_fan_suspend(struct device *dev)
 {
 	struct pwm_fan_ctx *ctx = dev_get_drvdata(dev);
+	struct pwm_args args;
+	int ret;
+
+	pwm_get_args(ctx->pwm, &args);
+
+	if (ctx->pwm_value) {
+		ret = pwm_config(ctx->pwm, 0, args.period);
+		if (ret < 0)
+			return ret;
 
-	if (ctx->pwm_value)
 		pwm_disable(ctx->pwm);
+	}
+
 	return 0;
 }
 
-- 
2.19.0

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/2] hwmon: pwm-fan: Silence error on probe deferral
  2018-09-21 10:10 [PATCH 1/2] hwmon: pwm-fan: Silence error on probe deferral Thierry Reding
  2018-09-21 10:10 ` [PATCH 2/2] hwmon: pwm-fan: Set fan speed to 0 on suspend Thierry Reding
@ 2018-09-21 13:21 ` Guenter Roeck
  1 sibling, 0 replies; 4+ messages in thread
From: Guenter Roeck @ 2018-09-21 13:21 UTC (permalink / raw)
  To: Thierry Reding
  Cc: Jean Delvare, Kamil Debski, Bartlomiej Zolnierkiewicz,
	linux-hwmon, linux-kernel

On Fri, Sep 21, 2018 at 12:10:47PM +0200, Thierry Reding wrote:
> From: Thierry Reding <treding@nvidia.com>
> 
> Probe deferrals aren't actual errors, so silence the error message in
> case the PWM cannot yet be acquired.
> 
> Signed-off-by: Thierry Reding <treding@nvidia.com>

Applied.

Thanks,
Guenter

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/2] hwmon: pwm-fan: Set fan speed to 0 on suspend
  2018-09-21 10:10 ` [PATCH 2/2] hwmon: pwm-fan: Set fan speed to 0 on suspend Thierry Reding
@ 2018-09-21 13:23   ` Guenter Roeck
  0 siblings, 0 replies; 4+ messages in thread
From: Guenter Roeck @ 2018-09-21 13:23 UTC (permalink / raw)
  To: Thierry Reding
  Cc: Jean Delvare, Kamil Debski, Bartlomiej Zolnierkiewicz,
	linux-hwmon, linux-kernel

On Fri, Sep 21, 2018 at 12:10:48PM +0200, Thierry Reding wrote:
> From: Thierry Reding <treding@nvidia.com>
> 
> Technically this is not required because disabling the PWM should be
> enough. However, when support for atomic operations was implemented in
> the PWM subsystem, only actual changes to the PWM channel are applied
> during pwm_config(), which means that during after resume from suspend
> the old settings won't be applied.
> 
> One possible solution is for the PWM driver to implement its own PM
> operations such that settings from before suspend get applied on resume.
> This has the disadvantage of completely ignoring any particular ordering
> requirements that PWM user drivers might have, so it is best to leave it
> up to the user drivers to apply the settings that they want at the
> appropriate time.
> 
> Another way to solve this would be to read back the current state of the
> PWM at the time of resume. That way, in case the configuration was lost
> during suspend, applying the old settings in PWM user drivers would
> actually get them applied because they differ from the current settings.
> However, not all PWM drivers support reading the hardware state, and not
> all hardware may support it.
> 
> The best workaround at this point seems to be to let PWM user drivers
> tell the PWM subsystem that the PWM is turned off by, in addition to
> disabling it, also setting the duty cycle to 0. This causes the resume
> operation to apply a configuration that is different from the current
> configuration, resulting in the proper state from before suspend getting
> restored.
> 
> Signed-off-by: Thierry Reding <treding@nvidia.com>

Applied.

Thanks,
Guenter

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-09-21 19:12 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-09-21 10:10 [PATCH 1/2] hwmon: pwm-fan: Silence error on probe deferral Thierry Reding
2018-09-21 10:10 ` [PATCH 2/2] hwmon: pwm-fan: Set fan speed to 0 on suspend Thierry Reding
2018-09-21 13:23   ` Guenter Roeck
2018-09-21 13:21 ` [PATCH 1/2] hwmon: pwm-fan: Silence error on probe deferral Guenter Roeck

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.