No video on HDMI display

I have an HDMI display (1080x1920) with a controller board that gets power and enables touch through USB. If I power up the iMX8 with the USB cable connected to the Ixora, everything works fine. If I power it up with the cable disconnected and connect it afterwards, there is no video.

Here’s what I get when I query the HDMI state:

root@b2qt-apalis-imx8:/sys/class/drm/card1-HDMI-A-1# cat status
root@b2qt-apalis-imx8:/sys/class/drm/card1-HDMI-A-1# cat enabled
root@b2qt-apalis-imx8:/sys/class/drm/card1-HDMI-A-1# cat dpms 

I have tried to echo on > /sys/class/drm/card1-HDMI-A-1/status, but that changes nothing. The status remains “connected”. I want to make a udev rule for turning on the display when the USB cable is connected after power on. How do I achieve this?

Hello @emilfors ,
Could you share with us the following info?

  • Which version of Apalis iMX8 you are using
  • Which Ixora version you are using
  • if you are using Torizon or another image
  • the dmesg messages reated to the HDMI input when you start the board with and without the USB cable connected

Best regards,

Hi Josep,

We’re using QuadPlus 2GB (p/n 00491102) and Ixora V1.2 (p/n 01331200).
We run the Boot2Qt 6.3.1 bsp.

I added dmesg logs.

connected_on_startup.log (34.0 KB)
not_connected.log (32.4 KB)

Hello @emilfors , thanks for the information.

Could you also add the dmesg log when you start the board with the USB disconnected and then you connect it?

Best regards,

Here it is. It looks like there’s something wrong with the EDID, but I’m thinking I should at least be getting something on the display?

disconnected_on_start_connected_after_42_seconds.log (33.4 KB)

Hello @emilfors

I see that the detected resolution is different in both cases:
When the USB is connected from the beginning:

[    7.400019] [drm] Mode: 1080x1920p152000
[    7.429314] [drm] Pixel clock: 152000 KHz, character clock: 152000, bpc is 8-bit.
[    7.429322] [drm] VCO frequency is 3040000 KHz
[    7.429778] input: USB2IIC_CTP_CONTROL as /devices/platform/bus@5b000000/5b0e0000.usb/ci_hdrc.1/usb3/3-1/3-1.2/3-1.2:1.0/0003:1A86:E5E3.0003/input/input5
[    7.430060] hid-multitouch 0003:1A86:E5E3.0003: input,hidraw0: USB HID v1.00 Device [ USB2IIC_CTP_CONTROL] on usb-ci_hdrc.1-1.2/input0
[    7.509552] [drm] Sink Not Support SCDC
[    7.513216] [drm] No vendor infoframe

And when you connect the USB after 42s:

[   42.895482] [drm:cdns_hdmi_get_edid_block] *ERROR* get block[0] edid failed: -22
[   42.902948] [drm:cdns_hdmi_connector_get_modes] *ERROR* Invalid edid
[   42.917304] [drm] Mode: 1024x768p65000
[   42.944944] [drm] Pixel clock: 65000 KHz, character clock: 65000, bpc is 8-bit.
[   42.944952] [drm] VCO frequency is 2600000 KHz
[   43.035995] [drm] No vendor infoframe

If the display does not support the resolution of 1024x768 you will not get any image.
Can you send us the data sheet of the display that you are using?

Another test that you can do is to check if plugging out an in again the HDMI cable restores the image Regardless of the result, please send us the dmesg log for that test.

Best regards,

Ok, the datasheet doesn’t actually mention any other resolution so perhaps that’s the problem then. The data sheet is too large to upload here. I’m attaching a log from when I started with the USB cable disconnected and the HDMI cable connected, then connected USB @ 56 seconds, disconnected HDMI @67 seconds, reconnected it @ 76 seconds.

disconnected_and_reconnected_hdmi.log (33.5 KB)

Hello @emilfors ,

Maybe you can tell us the model of the display so we can download the data sheet ( to have the most complete information about your setup)

Best regards,

Hi again,

I uploaded the data sheet to google drive, you can get it here: TOP055FHDT00CTP01.pdf - Google Drive

Hello @emilfors , thanks for the info.

It seems that the problem is related to the transmission of the EDID, in case of an error the SoM uses its default resolution (1024x768).

Can you please tell us the model of your HDMI controller board, or send us its data sheet?

Best regards,

Yes, it seems so. I don’t have a separate data sheet for the controller board, it came with the display and all the information I have is in the pdf I uploaded yesterday. I don’t think there’s a model you can find anywhere, the whole thing came off Alibaba or some such.

Is there any way to change the default resolution without rebuilding the system?

I checked the data sheet and it doesn’t have any references to HDMI.
Could you send us some pictures of the controller board, where we can see some model number or anything that gives us a hint about the device you are using?

You can also try connecting another HDMI monitor and see if you have the same problem.

Best regards,

Here’s a picture of the controller board. I doubt it’ll be very helpful :frowning:

Well, actually it was quite helpful. I was able to source one possible Aliexpress seller:)
Since the problem seems to be related with the EDID transmission, maybe you could get one of these analyzers and check what EDID is transmitted when you connect the screen. I have never used one of them but it’s worth a try :wink:

Best regards,

Ha! That’s some nice detective work right there.

I’ll check out the analyzer, but this is something I need to fix within a day or so which means I’ll probably have to get creative instead.
You don’t happen to know if there’s any way to set the default resolution when there’s no valid EDID, do you? It needs to be in user space because I can’t make a custom bsp.

Hi @emilfors !

I don’t know if this is the only way, but it is possible to inject custom EDID. Check th the Injecting a Binary EDID Blob of this Display Output, Resolution and Timings (Linux) | Toradex Developer Center artice

Best regards,

Hi Henrique,

Thanks! I don’t think I can do that because I can’t change the kernel command line (at least I don’t think I can). My bsp doesn’t have fw_setenv and I can’t stop the bootloader to use setenv. But there was a link from that page where they mention something about injecting after boot, I’ll investigate that further! Thanks for the pointer.

Hi @emilfors !

Actually, you can change the kernel command line from U-boot.

The U-boot variable tdxargs is meant for it.

Please check the U-Boot | Toradex Developer Center article for more information.

Also the Configuring Serial Port Debug Console (Linux/U-Boot) | Toradex Developer Center article for some examples :slight_smile:

Best regards,

Yes, but that’s what I meant: I can’t get to U-boot to change the variable :slight_smile:

Anyway, I had at least some progress now! I saved the binary EDID from a successful startup (with the cable connected), then I rebooted with the cable disconnected and issued this command:

cat edid.bin > /sys/kernel/debug/dri/1/HDMI-A-1/edid_override

When I connected the USB cable after that, the display actually came on! But it’s not a total victory, because instead of seeing my running application I just got the last 30 or so lines of dmesg, and nothing else.

Attaching the dmesg, maybe it’ll tell you something I’m missing.

connect_after_forcing_edid.log (33.6 KB)

I found that the Qt application does start, but then stops with this message: “Cannot create window: no screens available”. So it seems that there’s something else missing, that causes the Qt environment to believe the display is disconnected.