HDMI out without EDID and I2c

Hi. We develop the custom board with small DLP projector. The projector works with RGB888. For the connecting projector to Jetson TK1 we decide to use RGB-to-DVI converter “tfp401a”. This converter shot be connected to HDMI port.
So now we facing with issues, we can not start working HDMI without I2C line. On the internet, I found the article how to force HDMI work with custom parameters and ignore monitor EDID data.

Now the question!
How to enable this parameter in “right way” in the kernel “CONFIG_DRM_LOAD_EDID_FIRMWARE”? When I start kernel configurator “make xconfig”, this parameter is not available for selection.
I already try to enable this parameter, but this didn’t work.
I also try to configure xorg.conf file and add my parameters, but this doesn’t work.
For tests I use Jetson TK1 board, Philips 227E full hd monitor, and HDMI cable with cut off i2c line.
Also I make edid.bin file with parsed from my monitor EDID parameters “sudo get-edid > edid.bin”
I try to use this this edid.bin in xorg.conf file

# Copyright (c) 2011-2015 NVIDIA CORPORATION.  All Rights Reserved.

# This is the minimal configuration necessary to use the Tegra driver.
# Please refer to the xorg.conf man page for more configuration
# options provided by the X server, including display-related options
# provided by RandR 1.2 and higher.

# Disable extensions not useful on Tegra.
Section "Module"
    Disable     "dri"
    SubSection  "extmod"
        Option  "omit xfree86-dga"

Section "Device"
    Identifier  "Tegra0"
    Driver      "nvidia"

Section "Monitor"
   Identifier "DSI-0"
   Option    "Ignore"
   Option	"ConnectedMonitor" "DFP-1"
   Option	"CustomEDID" "DFP-1:/lib/firmware/edid.bin"
   Option	"IgnoreEDID" "false"
   Option	"UseEDID" "true"
   Option	"ModeValidation" "NoVesaMode"

Section "Monitor"
    Identifier "EP-HDMI-RX"
    ModelName "EP-HDMI-RX"
    VendorName "EXP"
    # Monitor Manufactured week 0 of 2004
    # EDID version 1.3
    # Digital Display
#    DisplaySize 1150 650
#    Gamma 2.20
#    Option "DPMS" "true"
#    Horizsync 15-46
#    VertRefresh 59-61


Section "Screen"
    Identifier "Default Screen"
    Monitor "EP-HDMI-RX"
    Device "Tegra0"
    Defaultdepth 24
   SubSection "Display"
    Depth 24
    Virtual 1920 1080


I try to change <Option “ConnectedMonitor” “DFP-1”> on <Option “ConnectedMonitor” “DFP-0”> and <Option “ConnectedMonitor” “HDMI-0”> but no result.
How can I solve my issues?

In the kernel source for R21.5 is a “Documentation/EDID/” subdirectory. Within that is “HOWTO.txt”, which mentions CONFIG_DRM_LOAD_EDID_FIRMWARE. I have not really gone through that, but you may find some information there.

If you use “make nconfig” you’ll have the option to search for a symbol and to show symbols otherwise not visible. Again, I have not tried to work with this, but nconfig may show something within “drivers/gpu/drm/” (this is the location in kernel source where the feature is used, but I only see a config file using this under chromeos, so you may be out of luck).

A simpler approach might exist if your projector is capable of EDID on another computer with different cables. Is the EDID completely missing, or is it just a case of this setup using cables which don’t allow EDID? There are utilities which, when the monitor is plugged into a working Linux box, can provide the exact Xorg.conf config for manual inclusion.

If no EDID is available even via another computer and cable combination, if you have the right modelines, you can provide a manually created xorg.conf (this is a lot of trouble, but there are modeline calculators which at least make some timings into a specific modeline without knowing everything behind it). Before DDC and EDID the 15-pin VGA monitors all came with specifications regarding their timigns. If this projector has no possible way to get EDID I would assume something is published about the projector’s valid modes…some sort of spec document.

Hi linuxdev. I try steps from “Documentation/EDID/”. I manage to make binary blob for my purpose. For example 800x600_60.bin But this 800x600_60.bin ignored and jetson still won’t use EDID data from i2c-bus.
So when I connect monitor to jetson via HDMI cable with cute off i2c-bus, in dmesg appears the i2c-bus errors. With message something like: “Try to read i2c-3 address 0x50 - no acknowledge…”, “Returning five times… HDMI disabled!”

In some cases something used at boot time probably has to go in the initrd. It sounds like the i2c was not configured for use with EDID (which is what you were saying about the blob being ignored). It isn’t just a question of whether such a blob is there…the question is whether it is there at the moment the kernel loads (for which I suggest adding it to the initrd). The other thing to verify is that the FDT entry in the extlinux.conf file names the right blob.

I am curious if on the failing system this command shows file “edid”:

sudo find /sys -name 'edid'

On a regular developer carrier board with an EDID-capable monitor it should show up as:


If that file does show up, paste the contents.

You can reverse compile the “.dtb” file named in extlinux.conf to verify that this has your changes:

dtc -I dtb -O dts -o /tmp/extracted.dts /boot/the_firmware_in_extlinux.dtb

To summarize, make sure the dtb is named correctly in extlinux.conf, and if it is, then consider that perhaps some of the relevant files may need to be in the initrd for early availability.