bool has_hdmi_audio;
bool is_soc_exynos5;
bool is_hdmi_powered_on;
+ bool video_enabled;
struct resource *regs_res;
void __iomem *regs;
hdata->hpd_handle = true;
}
+static void hdmi_enable_video(struct hdmi_context *hdata)
+{
+ if (hdata->is_v13)
+ return;
+
+ hdata->video_enabled = true;
+ hdmi_reg_writemask(hdata, HDMI_CON_0, 0, HDMI_BLUE_SCR_EN);
+}
+
+static void hdmi_disable_video(struct hdmi_context *hdata)
+{
+ if (hdata->is_v13)
+ return;
+
+ /* Set the blue screen color to black */
+ hdmi_reg_writeb(hdata, HDMI_BLUE_SCREEN_R_0, 0);
+ hdmi_reg_writeb(hdata, HDMI_BLUE_SCREEN_R_1, 0);
+ hdmi_reg_writeb(hdata, HDMI_BLUE_SCREEN_G_0, 0);
+ hdmi_reg_writeb(hdata, HDMI_BLUE_SCREEN_G_1, 0);
+ hdmi_reg_writeb(hdata, HDMI_BLUE_SCREEN_B_0, 0);
+ hdmi_reg_writeb(hdata, HDMI_BLUE_SCREEN_B_1, 0);
+
+ /* Enable the "blue screen", which effectively disconnects the mixer */
+ hdata->video_enabled = false;
+ hdmi_reg_writemask(hdata, HDMI_CON_0, ~0, HDMI_BLUE_SCR_EN);
+}
+
static void hdmi_conf_init(struct hdmi_context *hdata)
{
struct hdmi_infoframe infoframe;
/* choose HDMI mode */
hdmi_reg_writemask(hdata, HDMI_MODE_SEL,
HDMI_MODE_HDMI_EN, HDMI_MODE_MASK);
- /* disable bluescreen */
- hdmi_reg_writemask(hdata, HDMI_CON_0, 0, HDMI_BLUE_SCR_EN);
+
+ if (hdata->video_enabled)
+ hdmi_enable_video(hdata);
+ else
+ hdmi_disable_video(hdata);
if (!hdata->has_hdmi_sink) {
/* choose DVI mode */
case DRM_MODE_DPMS_ON:
if (!hdata->is_hdmi_powered_on)
hdmi_resource_poweron(hdata);
+ hdmi_enable_video(hdata);
break;
case DRM_MODE_DPMS_STANDBY:
- break;
- case DRM_MODE_DPMS_SUSPEND:
+ hdmi_disable_video(hdata);
break;
case DRM_MODE_DPMS_OFF:
+ case DRM_MODE_DPMS_SUSPEND:
if (hdata->is_hdmi_powered_on)
hdmi_resource_poweroff(hdata);
break;
#define HDMI_VACT_SPACE_B_0 HDMI_CORE_BASE(0xD514)
#define HDMI_VACT_SPACE_B_1 HDMI_CORE_BASE(0xD518)
-#define HDMI_BLUE_SCREEN_B_0 HDMI_CORE_BASE(0xD520)
-#define HDMI_BLUE_SCREEN_B_1 HDMI_CORE_BASE(0xD524)
+#define HDMI_BLUE_SCREEN_R_0 HDMI_CORE_BASE(0xD520)
+#define HDMI_BLUE_SCREEN_R_1 HDMI_CORE_BASE(0xD524)
#define HDMI_BLUE_SCREEN_G_0 HDMI_CORE_BASE(0xD528)
#define HDMI_BLUE_SCREEN_G_1 HDMI_CORE_BASE(0xD52C)
-#define HDMI_BLUE_SCREEN_R_0 HDMI_CORE_BASE(0xD530)
-#define HDMI_BLUE_SCREEN_R_1 HDMI_CORE_BASE(0xD534)
+#define HDMI_BLUE_SCREEN_B_0 HDMI_CORE_BASE(0xD530)
+#define HDMI_BLUE_SCREEN_B_1 HDMI_CORE_BASE(0xD534)
/* HDMI I2S register */
#define HDMI_I2S_CLK_CON HDMI_I2S_BASE(0x000)