]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/rockchip: inno_hdmi: Move ddc/i2c configuration and HOTPLUG unmute to inno_hdmi_i...
authorAndy Yan <andy.yan@rock-chips.com>
Mon, 12 May 2025 12:46:06 +0000 (20:46 +0800)
committerHeiko Stuebner <heiko@sntech.de>
Tue, 8 Jul 2025 15:44:08 +0000 (17:44 +0200)
Putting these scattered initialization code together is helpful
for the following migration to the DRM bridge driver mode.

Signed-off-by: Andy Yan <andy.yan@rock-chips.com>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Link: https://lore.kernel.org/r/20250512124615.2848731-6-andyshrk@163.com
drivers/gpu/drm/rockchip/inno_hdmi.c

index 2d41cf59752f29b569506c9c913c91d5fe3b7530..82f2904ed7a3bc2bdac2454468bb254fb63e0178 100644 (file)
@@ -620,6 +620,21 @@ static void inno_hdmi_init_hw(struct inno_hdmi *hdmi)
        hdmi_modb(hdmi, HDMI_SYS_CTRL, msk, val);
 
        inno_hdmi_standby(hdmi);
+
+       /*
+        * When the controller isn't configured to an accurate
+        * video timing and there is no reference clock available,
+        * then the TMDS clock source would be switched to PCLK_HDMI,
+        * so we need to init the TMDS rate to PCLK rate, and
+        * reconfigure the DDC clock.
+        */
+       if (hdmi->refclk)
+               inno_hdmi_i2c_init(hdmi, clk_get_rate(hdmi->refclk));
+       else
+               inno_hdmi_i2c_init(hdmi, clk_get_rate(hdmi->pclk));
+
+       /* Unmute hotplug interrupt */
+       hdmi_modb(hdmi, HDMI_STATUS, m_MASK_INT_HOTPLUG, v_MASK_INT_HOTPLUG(1));
 }
 
 static int inno_hdmi_disable_frame(struct drm_connector *connector,
@@ -1299,27 +1314,12 @@ static int inno_hdmi_bind(struct device *dev, struct device *master,
                goto err_disable_clk;
        }
 
-       /*
-        * When the controller isn't configured to an accurate
-        * video timing and there is no reference clock available,
-        * then the TMDS clock source would be switched to PCLK_HDMI,
-        * so we need to init the TMDS rate to PCLK rate, and
-        * reconfigure the DDC clock.
-        */
-       if (hdmi->refclk)
-               inno_hdmi_i2c_init(hdmi, clk_get_rate(hdmi->refclk));
-       else
-               inno_hdmi_i2c_init(hdmi, clk_get_rate(hdmi->pclk));
-
        ret = inno_hdmi_register(drm, hdmi);
        if (ret)
                goto err_put_adapter;
 
        dev_set_drvdata(dev, hdmi);
 
-       /* Unmute hotplug interrupt */
-       hdmi_modb(hdmi, HDMI_STATUS, m_MASK_INT_HOTPLUG, v_MASK_INT_HOTPLUG(1));
-
        ret = devm_request_threaded_irq(dev, irq, inno_hdmi_hardirq,
                                        inno_hdmi_irq, IRQF_SHARED,
                                        dev_name(dev), hdmi);