diff options
Diffstat (limited to 'drivers/hwmon/pwm-fan.c')
| -rw-r--r-- | drivers/hwmon/pwm-fan.c | 20 | 
1 files changed, 17 insertions, 3 deletions
| diff --git a/drivers/hwmon/pwm-fan.c b/drivers/hwmon/pwm-fan.c index 7838af58f92d..7da6a160d45a 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); @@ -290,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;  } |