Any way to override EDID? (for disabling HDMI audio)

Is there a way to completely disable audio signal of HDMI output in an Amlogic system? Practically turning HDMI into DVI.

Audio output device options doesn’t provide the functionality I want.

The reason for my request is, my TV always displays processed filtered picture if it’s coming from HDMI. Even the game mode option doesn’t turn off that. Whether a TV box or a PC is connected, it doesn’t matter, always the same.

If I use the VGA port, on the other hand, it switches to the PC mode (which is otherwise hidden and unavailable) so the picture is crisp and clean and pixel perfect.

Now the twist is: On a Windows PC, If I delete the audio block from HDMI EDID file and override it using CRU utility, then connect to TV via HDMI, TV “recognizes” it and switches to PC mode.

I want to replicate it in CoreELEC, but I couldn’t find any option to override EDID file, but only specifying custom resolution modes.

Is there a way to make the HDMI output of the Coreelec device video-only (by means of EDID override, custom device tree or an Amlogic kernel specific feature)?

I found some leads at /sys/class/amhdmitx/amhdmitx0/aud_*, also a variable named hdmi_audio_off_flag in the kernel source. I hope there’s a way to invoke it without the need for recompiling the kernel.


System info:
CoreELEC 19.5-Matrix_rc2

Use a HDMI to DVI and DVI to HDMI adapter?
And CEC and audio should be gone.

While I haven’t tried that, I tried half of it and unfortunately I don’t think it’d work.

If I plug in DVI-HDMI adapter to DVI output of the graphics card, it works just like HDMI. Audio capability is recognized and audio is transmitted.

I guess the reason is because HDMI/DVI doesn’t have separate pins for audio (unlike CEC), and adapters are passive, so data signals are passed through. Only way to disable audio is from source. This why I’m looking for an option at the box side.

Standard DVI does not support audio. Graphic cards are a bit different to be able to support audio as well.

Sure, but if I’m gonna plug in HDMI cable to the box, and an HDMI cable to the TV. Then the box won’t be aware of any DVI, and still push audio signals along the data channel. These will right pass through the DVI adapters between. Which is why I don’t think this is a solution.

HDMI → VGA active adapter would be a solution, but those adapters are finicky as well thus I’d like to solve it in software if possible, please.

I mean, variable is right there at the kernel source, but from my understanding I need to recompile it with the #ifdef. I’d want to avoid recompiling if possible (to keep up with updates easily). I wonder if any of the toggles in /sys/class/amhdmitx/amhdmitx0/ would have the same effect.


No, DVI adapter between “cut” the audio line. At least it was so the last years

Are you talking about active adapters like these? I don’t want to buy a separate equipment for that alone.

Simple passive DVI-HDMI adapter couldn’t do that. A/V signals are all passing together through TMDS data pins. I’m not talking about CEC/ARC which do have separate pins that can be blocked.

Wondering that your TV has no HDMI setting for PC mode, instead, you need to suppress audio instead…
Maybe that’s what you are looking for: coreelec:video_disp_cap [CoreELEC Wiki]
But keep in mind this is a bad workaround, and needs to be reverted when you connect to another TV…
And I’m also not sure about impact on audio routing when you replace disp_cap with a modified version w/o audio.

Thanks. I know about the disp_cap file but it only overrides video resolutions if I understand correctly.

TV is quite old but has a nice LG IPS panel, 10 bit, bright lighting. But the image processing butchers it.

Nevermind, mixed up sth. disp_cap != EDID bin

Maybe try following similar:
cat /sys/class/amhdmitx/amhdmitx0/aud_cap > /storage/.kodi/userdata/aud_cap
then delete audio modes (keeping the file)

I put a tape over pin 15/16 of the HDMI cable to prevent the box from parsing EDID data.

EDID was ignored successfully as you can see, but the “default” EDID still has audio data.

# cat /sys/class/amhdmitx/amhdmitx0/rawedid 

# cat /sys/class/amhdmitx/amhdmitx0/edid
Rx Manufacturer Name: 
Rx Product Code: 0000
Rx Serial Number: 00000000
Rx Product Name: 
Manufacture Week: 0
Manufacture Year: 1990
Physcial size(mm): 0 x 0
EDID Version: 0.0
EDID block number: 0x0
blk0 chksum: 0x00
Source Physical Address[a.b.c.d]:
native Mode 0, VIC (native 3):
ColorDeepSupport 0
3 4 5 16 
Audio {format, channel, freq, cce}
{1, 1, 7, 1}
Speaker Allocation: 0
Vendor: 0xc03 ( HDMI device)
MaxTMDSClock1 0 MHz
vLatency:  Invalid/Unknown
aLatency:  Invalid/Unknown
i_vLatency:  Invalid/Unknown
i_aLatency:  Invalid/Unknown
RR_Cap: 0
LTE_340M_Scramble: 0

checkvalue: 0x00000000

It turns out there was an audio_off option in 3.14 legacy kernel, but somehow it’s got lost during transition to 4.9 kernel.

CE 9.2.8:

~ # grep audio /sys/devices/virtual/amhdmitx/amhdmitx0/config
audio config: on
~ # echo audio_off > /sys/devices/virtual/amhdmitx/amhdmitx0/config
~ # grep audio /sys/devices/virtual/amhdmitx/amhdmitx0/config
audio config: off

CE 19.5:

~ # grep audio /sys/devices/virtual/amhdmitx/amhdmitx0/config
audio config: on
audio on/off: on
audio source: SPDIF
audio type: L-PCM
audio channel num: 2 channels
audio sample rate: 48kHz
audio sample size: 16bit
~ # echo audio_off > /sys/devices/virtual/amhdmitx/amhdmitx0/config
~ # grep audio /sys/devices/virtual/amhdmitx/amhdmitx0/config
audio config: on
audio on/off: on
audio source: SPDIF
audio type: L-PCM
audio channel num: 2 channels
audio sample rate: 48kHz
audio sample size: 16bit

Unfortunately, even though the option exists in legacy kernel, it still doesn’t achieve the desired effect.

This topic was automatically closed 91 days after the last reply. New replies are no longer allowed.