lkml.org 
[lkml]   [2022]   [Oct]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 6.0 460/862] iio: adc: at91-sama5d2_adc: disable/prepare buffer on suspend/resume
    Date
    From: Claudiu Beznea <claudiu.beznea@microchip.com>

    [ Upstream commit 808175e21d9b7f866eda742e8970f27b78afe5db ]

    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: 073c662017f2f ("iio: adc: at91-sama5d2_adc: add support for DMA")
    Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
    Link: https://lore.kernel.org/r/20220803102855.2191070-5-claudiu.beznea@microchip.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/iio/adc/at91-sama5d2_adc.c | 14 +++++++-------
    1 file changed, 7 insertions(+), 7 deletions(-)

    diff --git a/drivers/iio/adc/at91-sama5d2_adc.c b/drivers/iio/adc/at91-sama5d2_adc.c
    index 3734ddc82952..e2c82c5a2fac 100644
    --- a/drivers/iio/adc/at91-sama5d2_adc.c
    +++ b/drivers/iio/adc/at91-sama5d2_adc.c
    @@ -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);
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-10-19 12:48    [W:4.197 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site