bool                            hpd;
        bool                            powered;
        bool                            is_v13;
+       bool                            dvi_mode;
        struct mutex                    hdmi_mutex;
 
        struct resource                 *regs_res;
 
        raw_edid = drm_get_edid(connector, hdata->ddc_port->adapter);
        if (raw_edid) {
+               hdata->dvi_mode = !drm_detect_hdmi_monitor(raw_edid);
                memcpy(edid, raw_edid, min((1 + raw_edid->extensions)
                                        * EDID_LENGTH, len));
-               DRM_DEBUG_KMS("width[%d] x height[%d]\n",
-                               raw_edid->width_cm, raw_edid->height_cm);
+               DRM_DEBUG_KMS("%s : width[%d] x height[%d]\n",
+                       (hdata->dvi_mode ? "dvi monitor" : "hdmi monitor"),
+                       raw_edid->width_cm, raw_edid->height_cm);
        } else {
                return -ENODEV;
        }
 
 static void hdmi_audio_control(struct hdmi_context *hdata, bool onoff)
 {
-       u32 mod;
-
-       mod = hdmi_reg_read(hdata, HDMI_MODE_SEL);
-       if (mod & HDMI_DVI_MODE_EN)
+       if (hdata->dvi_mode)
                return;
 
        hdmi_reg_writeb(hdata, HDMI_AUI_CON, onoff ? 2 : 0);
        /* disable bluescreen */
        hdmi_reg_writemask(hdata, HDMI_CON_0, 0, HDMI_BLUE_SCR_EN);
 
+       if (hdata->dvi_mode) {
+               /* choose DVI mode */
+               hdmi_reg_writemask(hdata, HDMI_MODE_SEL,
+                               HDMI_MODE_DVI_EN, HDMI_MODE_MASK);
+               hdmi_reg_writeb(hdata, HDMI_CON_2,
+                               HDMI_VID_PREAMBLE_DIS | HDMI_GUARD_BAND_DIS);
+       }
+
        if (hdata->is_v13) {
                /* choose bluescreen (fecal) color */
                hdmi_reg_writeb(hdata, HDMI_V13_BLUE_SCREEN_0, 0x12);
 
 #define HDMI_ASP_MASK                  (1 << 2)
 #define HDMI_EN                                (1 << 0)
 
+/* HDMI_CON_2 */
+#define HDMI_VID_PREAMBLE_DIS          (1 << 5)
+#define HDMI_GUARD_BAND_DIS            (1 << 1)
+
 /* HDMI_PHY_STATUS */
 #define HDMI_PHY_STATUS_READY          (1 << 0)
 
 /* HDMI_MODE_SEL */
 #define HDMI_MODE_HDMI_EN              (1 << 1)
 #define HDMI_MODE_DVI_EN               (1 << 0)
-#define HDMI_DVI_MODE_EN               (1)
-#define HDMI_DVI_MODE_DIS              (0)
 #define HDMI_MODE_MASK                 (3 << 0)
 
 /* HDMI_TG_CMD */