How can I activate DVI mode in HDMI linux driver?

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

How can I activate DVI mode in HDMI linux driver?

1,751 Views
diegoperez
Contributor II

Hi,

How can I activate DVI mode in HDMI linux driver?

I am having problems with HDMI interface. I connect HDMI imxsolo to a HDMI(only audio)/DVI RGB converter (TFP401).

TFP401 manage an 800x480 TFT RGB display, so the PCLK, HSYN, VSYNC, and RGB is generated by HDMI to RGB converter. In the images below, the PCLK, HSYNC, VSYNC and EN are measured in the RGB display bus.

The issue is that under Linux, the display doesn’t show image (sometimes if I modify timings with “fbset” command I get an instable image with a lot of flickering), the signals seen in the logic analyzer are shown below. HSYNC is missing.

linux1_.pnglinux2_.png

Under uboot, I configured an HDMI panel and the results are correct. A nice image without flickering is showed. And the signals are correct.

uboot1_.pnguboot2_.pnguboot3_.png

I realized that under uboot the bit DVI_mode of the register HDMI_FC_INVIDCONF is 0 selecting DVI mode, and under linux this bit is 1, so HDMI mode is selected under linux.

 

I suspect DVI_mode bit affects to synchronization signals. So, I would like to enable DVI mode in linux driver to test whether the image and signals are correct as in uboot.

Labels (2)
0 Kudos
2 Replies

1,255 Views
diegoperez
Contributor II

I have managed to correctly operate the connected display through the TDP401 converter. I explain the modification of the driver to get it.

 

In mxc_hdmi_setup() function of the mxc_hdmi.c file the bit mDVI is cleared if hdmi_cap is true:

...

                if (hdmi->edid_cfg.hdmi_cap)

                               hdmi->hdmi_data.video_mode.mDVI = false;

...

The function mxc_hdmi_default_edid_cfg set the hdmi_cap:

static void  mxc_hdmi_default_edid_cfg(struct mxc_hdmi *hdmi)

{

                /* Default setting HDMI working in HDMI mode */

                hdmi->edid_cfg.hdmi_cap = true;

}

So, I had comment the line in the function mxc_hdmi_cable_connected that call the function mxc_hdmi_default_edid_cfg:

 

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__);

}

I would like to know if there is any way to configure the DVI mode without modifying the driver.

BR

Diego.

0 Kudos

1,255 Views
igorpadykov
NXP Employee
NXP Employee

Hi Diego

please check

DVI Support on i.MX6 boards - Boundary Devices 

Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos