I have managed to correctly operate the connected display through the TDP401 converter. I explain the modification of the driver to get it.
...
if (hdmi->edid_cfg.hdmi_cap)
hdmi->hdmi_data.video_mode.mDVI = false;
...
static void mxc_hdmi_default_edid_cfg(struct mxc_hdmi *hdmi)
{
/* Default setting HDMI working in HDMI mode */
hdmi->edid_cfg.hdmi_cap = true;
}
static void mxc_hdmi_cable_connected(struct mxc_hdmi *hdmi)
{
int edid_status;
dev_dbg(&hdmi->pdev->dev, "%s\n", __func__);
hdmi->cable_plugin = true;
/* HDMI Initialization Step C */
edid_status = mxc_hdmi_read_edid(hdmi);
/* Read EDID again if first EDID read failed */
if (edid_status == HDMI_EDID_NO_MODES ||
edid_status == HDMI_EDID_FAIL) {
int retry_status;
dev_info(&hdmi->pdev->dev, "Read EDID again\n");
msleep(200);
retry_status = mxc_hdmi_read_edid(hdmi);
/* If we get NO_MODES on the 1st and SAME on the 2nd attempt we
* want NO_MODES as final result. */
if (retry_status != HDMI_EDID_SAME)
edid_status = retry_status;
}
/* HDMI Initialization Steps D, E, F */
switch (edid_status) {
case HDMI_EDID_SUCCESS:
mxc_hdmi_edid_rebuild_modelist(hdmi);
break;
/* Nothing to do if EDID same */
case HDMI_EDID_SAME:
break;
case HDMI_EDID_FAIL:
dev_dbg(&hdmi->pdev->dev, "%s DPM: HDMI_EDID_FAIL\n", __func__);
//mxc_hdmi_default_edid_cfg(hdmi); commented line to avoid dvi mode false
/* No break here */
case HDMI_EDID_NO_MODES:
default:
mxc_hdmi_default_modelist(hdmi);
break;
}
/* Setting video mode */
mxc_hdmi_set_mode(hdmi);
dev_dbg(&hdmi->pdev->dev, "%s exit\n", __func__);
}
Diego.