drm/rockchip: inno_hdmi: Split power mode setting
authorAlex Bee <knaerzche@gmail.com>
Fri, 22 Dec 2023 17:42:13 +0000 (18:42 +0100)
committerHeiko Stuebner <heiko@sntech.de>
Fri, 29 Dec 2023 23:38:31 +0000 (00:38 +0100)
This splits setting the power mode of the controller / phy in two
functions. It's done in preparation of setting up the phy based on the
pixelclock.

No functional changes intended.

Signed-off-by: Alex Bee <knaerzche@gmail.com>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20231222174220.55249-23-knaerzche@gmail.com
drivers/gpu/drm/rockchip/inno_hdmi.c
drivers/gpu/drm/rockchip/inno_hdmi.h

index 763d61704ee61a1780a2ddf5121df745b2ecee85..da77171b2b42f97d583705916a4b8d7beec8f109 100644 (file)
@@ -153,38 +153,31 @@ static void inno_hdmi_sys_power(struct inno_hdmi *hdmi, bool enable)
                hdmi_modb(hdmi, HDMI_SYS_CTRL, m_POWER, v_PWR_OFF);
 }
 
-static void inno_hdmi_set_pwr_mode(struct inno_hdmi *hdmi, int mode)
+static void inno_hdmi_standby(struct inno_hdmi *hdmi)
 {
-       switch (mode) {
-       case NORMAL:
-               inno_hdmi_sys_power(hdmi, false);
+       inno_hdmi_sys_power(hdmi, false);
 
-               hdmi_writeb(hdmi, HDMI_PHY_PRE_EMPHASIS, 0x6f);
-               hdmi_writeb(hdmi, HDMI_PHY_DRIVER, 0xbb);
-
-               hdmi_writeb(hdmi, HDMI_PHY_SYS_CTL, 0x15);
-               hdmi_writeb(hdmi, HDMI_PHY_SYS_CTL, 0x14);
-               hdmi_writeb(hdmi, HDMI_PHY_SYS_CTL, 0x10);
-               hdmi_writeb(hdmi, HDMI_PHY_CHG_PWR, 0x0f);
-               hdmi_writeb(hdmi, HDMI_PHY_SYNC, 0x00);
-               hdmi_writeb(hdmi, HDMI_PHY_SYNC, 0x01);
-
-               inno_hdmi_sys_power(hdmi, true);
-               break;
+       hdmi_writeb(hdmi, HDMI_PHY_DRIVER, 0x00);
+       hdmi_writeb(hdmi, HDMI_PHY_PRE_EMPHASIS, 0x00);
+       hdmi_writeb(hdmi, HDMI_PHY_CHG_PWR, 0x00);
+       hdmi_writeb(hdmi, HDMI_PHY_SYS_CTL, 0x15);
+};
 
-       case LOWER_PWR:
-               inno_hdmi_sys_power(hdmi, false);
-               hdmi_writeb(hdmi, HDMI_PHY_DRIVER, 0x00);
-               hdmi_writeb(hdmi, HDMI_PHY_PRE_EMPHASIS, 0x00);
-               hdmi_writeb(hdmi, HDMI_PHY_CHG_PWR, 0x00);
-               hdmi_writeb(hdmi, HDMI_PHY_SYS_CTL, 0x15);
+static void inno_hdmi_power_up(struct inno_hdmi *hdmi)
+{
+       inno_hdmi_sys_power(hdmi, false);
 
-               break;
+       hdmi_writeb(hdmi, HDMI_PHY_PRE_EMPHASIS, 0x6f);
+       hdmi_writeb(hdmi, HDMI_PHY_DRIVER, 0xbb);
+       hdmi_writeb(hdmi, HDMI_PHY_SYS_CTL, 0x15);
+       hdmi_writeb(hdmi, HDMI_PHY_SYS_CTL, 0x14);
+       hdmi_writeb(hdmi, HDMI_PHY_SYS_CTL, 0x10);
+       hdmi_writeb(hdmi, HDMI_PHY_CHG_PWR, 0x0f);
+       hdmi_writeb(hdmi, HDMI_PHY_SYNC, 0x00);
+       hdmi_writeb(hdmi, HDMI_PHY_SYNC, 0x01);
 
-       default:
-               DRM_DEV_ERROR(hdmi->dev, "Unknown power mode %d\n", mode);
-       }
-}
+       inno_hdmi_sys_power(hdmi, true);
+};
 
 static void inno_hdmi_reset(struct inno_hdmi *hdmi)
 {
@@ -201,7 +194,7 @@ static void inno_hdmi_reset(struct inno_hdmi *hdmi)
        val = v_REG_CLK_INV | v_REG_CLK_SOURCE_SYS | v_PWR_ON | v_INT_POL_HIGH;
        hdmi_modb(hdmi, HDMI_SYS_CTRL, msk, val);
 
-       inno_hdmi_set_pwr_mode(hdmi, LOWER_PWR);
+       inno_hdmi_standby(hdmi);
 }
 
 static void inno_hdmi_disable_frame(struct inno_hdmi *hdmi,
@@ -440,6 +433,8 @@ static int inno_hdmi_setup(struct inno_hdmi *hdmi,
        hdmi_modb(hdmi, HDMI_AV_MUTE, m_AUDIO_MUTE | m_VIDEO_BLACK,
                  v_AUDIO_MUTE(0) | v_VIDEO_MUTE(0));
 
+       inno_hdmi_power_up(hdmi);
+
        return 0;
 }
 
@@ -459,7 +454,6 @@ static void inno_hdmi_encoder_enable(struct drm_encoder *encoder,
                return;
 
        inno_hdmi_setup(hdmi, &crtc_state->adjusted_mode);
-       inno_hdmi_set_pwr_mode(hdmi, NORMAL);
 }
 
 static void inno_hdmi_encoder_disable(struct drm_encoder *encoder,
@@ -467,7 +461,7 @@ static void inno_hdmi_encoder_disable(struct drm_encoder *encoder,
 {
        struct inno_hdmi *hdmi = encoder_to_inno_hdmi(encoder);
 
-       inno_hdmi_set_pwr_mode(hdmi, LOWER_PWR);
+       inno_hdmi_standby(hdmi);
 }
 
 static int
index 93245b55f967009acf6256f74819b3afb413a214..a7edf3559e606f7a219abcd2044ff729e6978b41 100644 (file)
 
 #define DDC_SEGMENT_ADDR               0x30
 
-enum PWR_MODE {
-       NORMAL,
-       LOWER_PWR,
-};
-
 #define HDMI_SCL_RATE                  (100*1000)
 #define DDC_BUS_FREQ_L                 0x4b
 #define DDC_BUS_FREQ_H                 0x4c