AML-S905X-CC (Le Potato) HDMI black levels washed out

I have been using the raspian image and recently changed to an oled monitor and very noticeable that black levels are limited with washed out blacks. I do not see “Broadcast RGB” as a property in xrandr and I cannot set it to Full, I tried editing edid.bin files based on tutorials and I can see changes in edid printed by xrandr, but still getting washed out blacks. Is there a way to get Full RGB output from HDMI with Le Potato?

For embedded devices, most of these settings are configured in the kernel in drivers/gpu/drm. There may not be userspace parameters associated with colorspace depth and other changes due to the clocking setup to generate the target frequency. You would have to recompile the kernel to force certain modes and possibly setup some clocks.

The general selection of the mode to use for a display is controlled here:

Under the meson subfolder are viu specific setup of clocks.

What is the make, model, and EDID of your monitor?

The monitor of interest I want to get working is an innocn OLED monitor I got off amazon. Decoding the EDID reported out of xrandr gives the following for make, model info:
Manufacturer: IOC
Model: 5472
Display Product Name: ‘15A1F’

Testing with an LG OLED TV I get the following:
Manufacturer: GSM
Model: 49352
Display Product Name: ‘LG TV SSCR2’

With both displays I can get full black levels on my personal computer, with Le Potato both have washed out black levels.

The full EDID for the monitor I want to use with the Le Potato:
00ffffffffffff0025e3601501000000
1621010380231378ee0cf5ae523cb923
0c5054230800714081c0814081809500
a9c0b300d1c01f3780b470382040582c
450058c11000001e000000ff00464131
46433158303330333231000000fd0030
3e1e531e000a202020202020000000fc
0031354131460a2020202020202001ea
02032ff24c9002030405010000000000
00230907078301000067030c00200038
3ce2004fe305e300e606070169694f02
3a801871382d40582c450058c1100000
1e000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
0000000000000000000000000000001c

Can you try CoreELEC to see if you can tweak the setting from limited RGB to full RGB?

I have made several customizations to the OS to get it working for my needs, switching distros would not be a desired fix.

Looking at the kernel repo you linked, I think the file of interest would be:
libretech-linux/drivers/gpu/drm/display/drm_hdmi_helper.c

And hard coding it to use FULL_COLORIMETRY_MASK, though I’m not 100% confident in that, nor have I ever built a linux kernel, so I could pull the repo and make changes, but wouldn’t quite know where to go from there.

I just tried CoreELEC using Le Potato, I am getting limited RGB and I see no way in their UI how to change it and not familiar with any utilities included in CoreELEC. Tried a Pi 4 I had and it properly displayed Full RGB with a fresh raspbian install with no changes.

Any further guidance? This is a critical issue for signage applications.

We have the same issue. We’ve tried the following, but we are still not getting full range output:

  • Hardcode hdmi_data.rgb_limited_range to false in drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
  • Set the RGBYUV_FULL_RANGE bit in the VIU_OSDn_CTRL_STAT2 registers
  • Hardcode drm_default_rgb_quant_range in drivers/gpu/drm/drm_edid.c to always return full range quantization

For our panel in question, a workaround was to build the kernel with commit d3d6b1bf85ae reverted. See “meson: Enabling full-range HDMI output” in the linux-amlogic mailing list for more details.