Commit a3c6eabe authored by Claudiu Beznea's avatar Claudiu Beznea Committed by Jonathan Cameron
Browse files

iio: adc: rzg2l: Cleanup suspend/resume path



There is no need to manually track the runtime PM status in the driver.
The pm_runtime_force_suspend() and pm_runtime_force_resume() functions
already call pm_runtime_status_suspended() to check the runtime PM state.

Additionally, avoid calling pm_runtime_put_autosuspend() during the
suspend/resume path, as this would decrease the usage counter of a
potential user that had the ADC open before the suspend/resume cycle.

Fixes: 563cf94f ("iio: adc: rzg2l_adc: Add suspend/resume support")
Reviewed-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
Reviewed-by: default avatarLad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Signed-off-by: default avatarClaudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Link: https://patch.msgid.link/20250810123328.800104-2-claudiu.beznea.uj@bp.renesas.com


Cc: <Stable@vger.kernel.org>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent b04e4551
Loading
Loading
Loading
Loading
+8 −21
Original line number Diff line number Diff line
@@ -89,7 +89,6 @@ struct rzg2l_adc {
	struct completion completion;
	struct mutex lock;
	u16 last_val[RZG2L_ADC_MAX_CHANNELS];
	bool was_rpm_active;
};

/**
@@ -541,14 +540,9 @@ static int rzg2l_adc_suspend(struct device *dev)
	};
	int ret;

	if (pm_runtime_suspended(dev)) {
		adc->was_rpm_active = false;
	} else {
	ret = pm_runtime_force_suspend(dev);
	if (ret)
		return ret;
		adc->was_rpm_active = true;
	}

	ret = reset_control_bulk_assert(ARRAY_SIZE(resets), resets);
	if (ret)
@@ -557,9 +551,7 @@ static int rzg2l_adc_suspend(struct device *dev)
	return 0;

rpm_restore:
	if (adc->was_rpm_active)
	pm_runtime_force_resume(dev);

	return ret;
}

@@ -577,11 +569,9 @@ static int rzg2l_adc_resume(struct device *dev)
	if (ret)
		return ret;

	if (adc->was_rpm_active) {
	ret = pm_runtime_force_resume(dev);
	if (ret)
		goto resets_restore;
	}

	ret = rzg2l_adc_hw_init(dev, adc);
	if (ret)
@@ -590,10 +580,7 @@ static int rzg2l_adc_resume(struct device *dev)
	return 0;

rpm_restore:
	if (adc->was_rpm_active) {
		pm_runtime_mark_last_busy(dev);
		pm_runtime_put_autosuspend(dev);
	}
	pm_runtime_force_suspend(dev);
resets_restore:
	reset_control_bulk_assert(ARRAY_SIZE(resets), resets);
	return ret;