]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
i2c: stm32f7: fix & reorder remove & probe error handling
authorAlain Volmat <alain.volmat@st.com>
Fri, 25 Oct 2019 14:04:24 +0000 (16:04 +0200)
committerWolfram Sang <wsa@the-dreams.de>
Mon, 11 Nov 2019 19:41:39 +0000 (20:41 +0100)
Add missing dma channels free calls in case of error during probe
and reorder the remove function so that dma channels are freed after
the i2c adapter is deleted.
Overall, reorder the remove function so that probe error handling order
and remove function order are same.

Fixes: 7ecc8cfde553 ("i2c: i2c-stm32f7: Add DMA support")
Signed-off-by: Alain Volmat <alain.volmat@st.com>
Reviewed-by: Pierre-Yves MORDRET <pierre-yves.mordret@st.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
drivers/i2c/busses/i2c-stm32f7.c

index cfae01b152438b1d3e98c307362ea889272edea7..a70f48ea2aeed7e0beaf5a12220c247cee4f371c 100644 (file)
@@ -1980,6 +1980,11 @@ pm_disable:
        pm_runtime_set_suspended(i2c_dev->dev);
        pm_runtime_dont_use_autosuspend(i2c_dev->dev);
 
+       if (i2c_dev->dma) {
+               stm32_i2c_dma_free(i2c_dev->dma);
+               i2c_dev->dma = NULL;
+       }
+
 clk_free:
        clk_disable_unprepare(i2c_dev->clk);
 
@@ -1990,21 +1995,21 @@ static int stm32f7_i2c_remove(struct platform_device *pdev)
 {
        struct stm32f7_i2c_dev *i2c_dev = platform_get_drvdata(pdev);
 
-       if (i2c_dev->dma) {
-               stm32_i2c_dma_free(i2c_dev->dma);
-               i2c_dev->dma = NULL;
-       }
-
        i2c_del_adapter(&i2c_dev->adap);
        pm_runtime_get_sync(i2c_dev->dev);
 
-       clk_disable_unprepare(i2c_dev->clk);
-
        pm_runtime_put_noidle(i2c_dev->dev);
        pm_runtime_disable(i2c_dev->dev);
        pm_runtime_set_suspended(i2c_dev->dev);
        pm_runtime_dont_use_autosuspend(i2c_dev->dev);
 
+       if (i2c_dev->dma) {
+               stm32_i2c_dma_free(i2c_dev->dma);
+               i2c_dev->dma = NULL;
+       }
+
+       clk_disable_unprepare(i2c_dev->clk);
+
        return 0;
 }