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

iio: adc: at91-sama5d2_adc: disable/prepare buffer on suspend/resume



In case triggered buffers are enabled while system is suspended they will
not work anymore after resume. For this call at91_adc_buffer_postdisable()
on suspend and at91_adc_buffer_prepare() on resume. On tests it has been
seen that at91_adc_buffer_postdisable() call is not necessary but it has
been kept because it also does the book keeping for DMA. On resume path
there is no need to call at91_adc_configure_touch() as it is embedded in
at91_adc_buffer_prepare().

Fixes: 073c6620 ("iio: adc: at91-sama5d2_adc: add support for DMA")
Signed-off-by: default avatarClaudiu Beznea <claudiu.beznea@microchip.com>
Link: https://lore.kernel.org/r/20220803102855.2191070-5-claudiu.beznea@microchip.com


Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 9780a23e
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -2116,6 +2116,9 @@ static int at91_adc_suspend(struct device *dev)
	struct iio_dev *indio_dev = dev_get_drvdata(dev);
	struct at91_adc_state *st = iio_priv(indio_dev);

	if (iio_buffer_enabled(indio_dev))
		at91_adc_buffer_postdisable(indio_dev);

	/*
	 * Do a sofware reset of the ADC before we go to suspend.
	 * this will ensure that all pins are free from being muxed by the ADC
@@ -2159,14 +2162,11 @@ static int at91_adc_resume(struct device *dev)
	if (!iio_buffer_enabled(indio_dev))
		return 0;

	/* check if we are enabling triggered buffer or the touchscreen */
	if (at91_adc_current_chan_is_touch(indio_dev))
		return at91_adc_configure_touch(st, true);
	else
		return at91_adc_configure_trigger(st->trig, true);
	ret = at91_adc_buffer_prepare(indio_dev);
	if (ret)
		goto vref_disable_resume;

	/* not needed but more explicit */
	return 0;
	return at91_adc_configure_trigger(st->trig, true);

vref_disable_resume:
	regulator_disable(st->vref);