This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: sun8i-di: Fix power on/off sequences
Author:  Jernej Skrabec <jernej.skra...@gmail.com>
Date:    Sat Dec 16 14:34:21 2023 +0100

According to user manual, reset line should be deasserted before clocks
are enabled. Also fix power down sequence to be reverse of that.

Fixes: a4260ea49547 ("media: sun4i: Add H3 deinterlace driver")
Signed-off-by: Jernej Skrabec <jernej.skra...@gmail.com>
Signed-off-by: Hans Verkuil <hverkuil-ci...@xs4all.nl>

 drivers/media/platform/sunxi/sun8i-di/sun8i-di.c | 25 ++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)

---

diff --git a/drivers/media/platform/sunxi/sun8i-di/sun8i-di.c 
b/drivers/media/platform/sunxi/sun8i-di/sun8i-di.c
index 26f6964996f2..5d58a5e78137 100644
--- a/drivers/media/platform/sunxi/sun8i-di/sun8i-di.c
+++ b/drivers/media/platform/sunxi/sun8i-di/sun8i-di.c
@@ -929,11 +929,18 @@ static int deinterlace_runtime_resume(struct device 
*device)
                return ret;
        }
 
+       ret = reset_control_deassert(dev->rstc);
+       if (ret) {
+               dev_err(dev->dev, "Failed to apply reset\n");
+
+               goto err_exclusive_rate;
+       }
+
        ret = clk_prepare_enable(dev->bus_clk);
        if (ret) {
                dev_err(dev->dev, "Failed to enable bus clock\n");
 
-               goto err_exclusive_rate;
+               goto err_rst;
        }
 
        ret = clk_prepare_enable(dev->mod_clk);
@@ -950,23 +957,16 @@ static int deinterlace_runtime_resume(struct device 
*device)
                goto err_mod_clk;
        }
 
-       ret = reset_control_deassert(dev->rstc);
-       if (ret) {
-               dev_err(dev->dev, "Failed to apply reset\n");
-
-               goto err_ram_clk;
-       }
-
        deinterlace_init(dev);
 
        return 0;
 
-err_ram_clk:
-       clk_disable_unprepare(dev->ram_clk);
 err_mod_clk:
        clk_disable_unprepare(dev->mod_clk);
 err_bus_clk:
        clk_disable_unprepare(dev->bus_clk);
+err_rst:
+       reset_control_assert(dev->rstc);
 err_exclusive_rate:
        clk_rate_exclusive_put(dev->mod_clk);
 
@@ -977,11 +977,12 @@ static int deinterlace_runtime_suspend(struct device 
*device)
 {
        struct deinterlace_dev *dev = dev_get_drvdata(device);
 
-       reset_control_assert(dev->rstc);
-
        clk_disable_unprepare(dev->ram_clk);
        clk_disable_unprepare(dev->mod_clk);
        clk_disable_unprepare(dev->bus_clk);
+
+       reset_control_assert(dev->rstc);
+
        clk_rate_exclusive_put(dev->mod_clk);
 
        return 0;

Reply via email to