iio: adc: xilinx: prevent touching unclocked h/w on remove
authorSven Van Asbroeck <thesven73@gmail.com>
Sun, 10 Mar 2019 18:58:26 +0000 (14:58 -0400)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sat, 16 Mar 2019 15:49:56 +0000 (15:49 +0000)
In remove, the clock is disabled before canceling the
delayed work. This means that the delayed work may be
touching unclocked hardware.

Fix by disabling the clock after the delayed work is
fully canceled. This is consistent with the probe error
path order.

Signed-off-by: Sven Van Asbroeck <TheSven73@gmail.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/adc/xilinx-xadc-core.c

index 5a1b63f9d0412d14a9307f133b859860246ad26d..6401ca7a9a2072e9760144c7b71717d985db6d27 100644 (file)
@@ -1322,8 +1322,8 @@ static int xadc_remove(struct platform_device *pdev)
                iio_triggered_buffer_cleanup(indio_dev);
        }
        free_irq(xadc->irq, indio_dev);
-       clk_disable_unprepare(xadc->clk);
        cancel_delayed_work_sync(&xadc->zynq_unmask_work);
+       clk_disable_unprepare(xadc->clk);
        kfree(xadc->data);
        kfree(indio_dev->channels);