[GUIDE] Waveshare 11.9"/7.9" DSI LCD Display Configuration for Volumio 4

Hey @Mustang65,

Critical finding - the overlay IS loading. The dmesg shows:

/soc/dsi@7e700000: Fixed dependency cycle(s) with /soc/i2c0mux/i2c@1/panel_disp1@45
/soc/i2c0mux/i2c@1/panel_disp1@45: Fixed dependency cycle(s) with /soc/dsi@7e700000

Device tree has panel_disp1 at address 0x45 on i2c0mux. The vcgencmd output is misleading - overlays applied at device tree level do not always appear there.

The log was truncated before DSI initialization status. Need to see if the panel driver actually probed successfully.

Run these commands:

sudo dmesg | grep -iE "dsi|panel|drm"
ls -la /sys/class/drm/
cat /sys/class/drm/card1-DSI-1/status 2>/dev/null || echo "DSI-1 connector not found"
ls /dev/i2c-*
sudo i2cdetect -y 10
sudo i2cdetect -y 11

The i2cdetect you ran on bus 1 found address 0x30 - that is the Katana codec, correct. The Waveshare panel at 0x45 would be on the i2c0mux bus (i2c-10 or i2c-11 on Pi 4), not the main i2c-1.

Kind Regards,

Hi @nerd

here are the ssh outsputs:

volumio@volumio2:~$ sudo dmesg | grep -iE "dsi|panel|drm"
[    0.000000] Kernel command line: coherent_pool=1M 8250.nr_uarts=0 snd_bcm2835.enable_headphones=0 cgroup_disable=memory numa_policy=interleave nvme.max_host_mem_size_mb=0 snd_bcm2835.enable_headphones=1 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_hdmi=0  numa=fake=1 system_heap.max_order=0 smsc95xx.macaddr=DC:A6:32:F6:56:9D vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000  splash plymouth.ignore-serial-consoles dwc_otg.fiq_enable=1 dwc_otg.fiq_fsm_enable=1 dwc_otg.fiq_fsm_mask=0xF dwc_otg.nak_holdoff=1 quiet console=ttyS0,115200 console=tty1 imgpart=UUID=2fcd4aa9-19da-4188-a556-3009b8a5e64a imgfile=/volumio_current.sqsh bootpart=UUID=DFF5-D140 datapart=UUID=08d6ed05-4edb-44af-8ed0-2ea18b54c960 uuidconfig=cmdline.txt pcie_aspm=off pci=pcie_bus_safe rootwait bootdelay=7 logo.nologo vt.global_cursor_default=0 net.ifnames=0 snd-bcm2835.enable_compat_alsa= snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1 loglevel=0 nodebug use_kmsg=no video=DSI-1:400x1280e,rotate=270
[    0.021015] /soc/cprman@7e101000: Fixed dependency cycle(s) with /soc/dsi@7e700000
[    0.021209] /soc/dsi@7e700000: Fixed dependency cycle(s) with /soc/i2c0mux/i2c@1/panel_disp1@45
[    0.021228] /soc/dsi@7e700000: Fixed dependency cycle(s) with /soc/cprman@7e101000
[    0.021349] /soc/i2c0mux/i2c@1/panel_disp1@45: Fixed dependency cycle(s) with /soc/dsi@7e700000
[    0.021511] /soc/cprman@7e101000: Fixed dependency cycle(s) with /soc/dsi@7e700000
[    0.022631] /soc/cprman@7e101000: Fixed dependency cycle(s) with /soc/dsi@7e700000
[    0.022667] /soc/dsi@7e700000: Fixed dependency cycle(s) with /soc/i2c0mux/i2c@1/panel_disp1@45
[    0.022686] /soc/dsi@7e700000: Fixed dependency cycle(s) with /soc/cprman@7e101000
[    0.060638] /soc/i2c0mux/i2c@1/panel_disp1@45: Fixed dependency cycle(s) with /soc/dsi@7e700000
[    2.223999] /soc/dsi@7e700000: Fixed dependency cycle(s) with /soc/i2c0mux/i2c@1/panel_disp1@45
[    2.232937] /soc/i2c0mux/i2c@1/panel_disp1@45: Fixed dependency cycle(s) with /soc/dsi@7e700000
[    2.285292] v3d fec00000.v3d: [drm] Transparent Hugepage support is recommended for optimal performance on this platform!
[    2.286940] [drm] Initialized v3d 1.0.0 for fec00000.v3d on minor 0
[    2.347812] vc4-drm gpu: bound fe400000.hvs (ops vc4_hvs_ops [vc4])
[    2.355307] vc4-drm gpu: bound fef00700.hdmi (ops vc4_hdmi_ops [vc4])
[    2.361376] vc4-drm gpu: bound fef05700.hdmi (ops vc4_hdmi_ops [vc4])
[    2.361966] [drm] forcing DSI-1 connector on
[    2.361986] vc4-drm gpu: bound fe700000.dsi (ops vc4_dsi_ops [vc4])
[    2.362223] vc4-drm gpu: bound fe004000.txp (ops vc4_txp_ops [vc4])
[    2.362409] vc4-drm gpu: bound fe206000.pixelvalve (ops vc4_crtc_ops [vc4])
[    2.363467] vc4-drm gpu: bound fe207000.pixelvalve (ops vc4_crtc_ops [vc4])
[    2.363667] vc4-drm gpu: bound fe20a000.pixelvalve (ops vc4_crtc_ops [vc4])
[    2.363778] vc4-drm gpu: bound fe216000.pixelvalve (ops vc4_crtc_ops [vc4])
[    2.363945] vc4-drm gpu: bound fec12000.pixelvalve (ops vc4_crtc_ops [vc4])
[    2.365976] [drm] Initialized vc4 0.0.0 for gpu on minor 1
[    2.404313] vc4-drm gpu: [drm] fb0: vc4drmfb frame buffer device
[   14.276466] systemd[1]: Starting modprobe@drm.service - Load Kernel Module drm...
[   14.373541] systemd[1]: modprobe@drm.service: Deactivated successfully.
[   14.374051] systemd[1]: Finished modprobe@drm.service - Load Kernel Module drm.

volumio@volumio2:~$ ls -la /sys/class/drm/
total 0
drwxr-xr-x  2 root root    0 Jan  1  1970 .
drwxr-xr-x 63 root root    0 Jan  1  1970 ..
lrwxrwxrwx  1 root root    0 Jan  1  1970 card0 -> ../../devices/platform/v3dbus/fec00000.v3d/drm/card0
lrwxrwxrwx  1 root root    0 Jan  1  1970 card1 -> ../../devices/platform/gpu/drm/card1
lrwxrwxrwx  1 root root    0 Jan  1  1970 card1-DSI-1 -> ../../devices/platform/gpu/drm/card1/card1-DSI-1
lrwxrwxrwx  1 root root    0 Jan  1  1970 card1-HDMI-A-1 -> ../../devices/platform/gpu/drm/card1/card1-HDMI-A-1
lrwxrwxrwx  1 root root    0 Jan  1  1970 card1-HDMI-A-2 -> ../../devices/platform/gpu/drm/card1/card1-HDMI-A-2
lrwxrwxrwx  1 root root    0 Jan  1  1970 card1-Writeback-1 -> ../../devices/platform/gpu/drm/card1/card1-Writeback-1
lrwxrwxrwx  1 root root    0 Jan  1  1970 renderD128 -> ../../devices/platform/v3dbus/fec00000.v3d/drm/renderD128
-r--r--r--  1 root root 4096 Dec  8 17:31 version
volumio@volumio2:~$ cat /sys/class/drm/card1-DSI-1/status 2>/dev/null || echo "DSI-1 connector not found"
connected
volumio@volumio2:~$ ls /dev/i2c-*
/dev/i2c-0  /dev/i2c-1  /dev/i2c-10  /dev/i2c-20  /dev/i2c-21  /dev/i2c-22

volumio@volumio2:~$ sudo i2cdetect -y 10
sudo i2cdetect -y 11
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- UU -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- UU -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Error: Could not open file `/dev/i2c-11' or `/dev/i2c/11': No such file or directory

Could there be the problem with this extra SDA / SCL cable, which is needed for touch-function? I didn’t plug these cable because i just need a display without touch. The Display is just connected with DSI-Cable, which runs at Volumio 3 without problems.

Hey @Mustang65,

Excellent diagnostics. Everything at the driver level looks correct:

  • DSI link established: [drm] forcing DSI-1 connector on
  • DSI bound: bound fe700000.dsi (ops vc4_dsi_ops [vc4])
  • Connector status: connected
  • Framebuffer created: fb0: vc4drmfb frame buffer device
  • Panel controller at 0x45: UU (driver bound)
  • Touch controller at 0x14: UU (driver bound)

The I2C is working - those UU entries prove the panel is communicating. The DSI ribbon on newer Waveshare revisions carries I2C alongside the video signals.

Suspecting backlight. Run these:

ls /sys/class/backlight/
cat /sys/class/backlight/*/brightness 2>/dev/null
cat /sys/class/backlight/*/max_brightness 2>/dev/null
cat /sys/class/drm/card1-DSI-1/enabled
cat /sys/class/graphics/fb0/name

Kind Regards,

Hi @nerd

here the outputs:

volumio@volumio2:~$ ls /sys/class/backlight/
10-0045
volumio@volumio2:~$ cat /sys/class/backlight/*/brightness 2>/dev/null
cat /sys/class/backlight/*/max_brightness 2>/dev/null
255
255
volumio@volumio2:~$ cat /sys/class/drm/card1-DSI-1/enabled
enabled

volumio@volumio2:~$ cat /sys/class/graphics/fb0/name
vc4drmfb

Hey @Mustang65,

Everything reports as working:

  • Backlight: 10-0045 exists, brightness 255/255 (full)
  • DSI-1: enabled
  • Framebuffer: vc4drmfb

Yet display is dark. Very unusual.

Suspecting X server is outputting to wrong connector. The dmesg showed HDMI ports binding before DSI, and volumioconfig.txt has hdmi_force_hotplug=1.

Run these:

DISPLAY=:0 xrandr
cat /sys/class/drm/card1-HDMI-A-1/status
cat /sys/class/drm/card1-HDMI-A-2/status
grep -i "dsi\|hdmi\|output" /var/log/Xorg.0.log | head -30
cat /sys/class/drm/card1-DSI-1/modes

This will show which output X is actually using and what modes are available on DSI-1.

Kind Regards,

Hi @nerd

i run the commands:

volumio@volumio2:~$ DISPLAY=:0 xrandr
Screen 0: minimum 320 x 200, current 1280 x 400, maximum 7680 x 7680
HDMI-1 disconnected primary (normal left inverted right x axis y axis)
HDMI-2 disconnected (normal left inverted right x axis y axis)
DSI-1 connected 1280x400+0+0 left (normal left inverted right x axis y axis) 0mm x 0mm
   400x1280      73.71*+
volumio@volumio2:~$ cat /sys/class/drm/card1-HDMI-A-1/status
cat /sys/class/drm/card1-HDMI-A-2/status
disconnected
disconnected

volumio@volumio2:~$ grep -i "dsi\|hdmi\|output" /var/log/Xorg.0.log | head -30
[    46.420] Kernel command line: coherent_pool=1M 8250.nr_uarts=0 snd_bcm2835.enable_headphones=0 cgroup_disable=memory numa_policy=interleave nvme.max_host_mem_size_mb=0 snd_bcm2835.enable_headphones=1 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_hdmi=0  numa=fake=1 system_heap.max_order=0 smsc95xx.macaddr=DC:A6:32:F6:56:9D vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000  splash plymouth.ignore-serial-consoles dwc_otg.fiq_enable=1 dwc_otg.fiq_fsm_enable=1 dwc_otg.fiq_fsm_mask=0xF dwc_otg.nak_holdoff=1 quiet console=ttyS0,115200 console=tty1 imgpart=UUID=2fcd4aa9-19da-4188-a556-3009b8a5e64a imgfile=/volumio_current.sqsh bootpart=UUID=DFF5-D140 datapart=UUID=08d6ed05-4edb-44af-8ed0-2ea18b54c960 uuidconfig=cmdline.txt pcie_aspm=off pci=pcie_bus_safe rootwait bootdelay=7 logo.nologo vt.global_cursor_default=0 net.ifnames=0 snd-bcm2835.enable_compat_alsa= snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1 loglevel=0 nodebug use_kmsg=no video=DSI-1:400x1280e,rotate=270
[    46.476] (**) OutputClass "vc4" setting /dev/dri/card1 as PrimaryGPU
[    46.513] (II) Applying OutputClass "vc4" to /dev/dri/card1
[    46.513] (II) Applying OutputClass "vc4" to /dev/dri/card1
[    46.654] (II) Applying OutputClass "vc4" options to /dev/dri/card1
[    46.654] (II) Applying OutputClass "vc4" options to /dev/dri/card1
[    46.907] (II) modeset(0): Output HDMI-1 using monitor section HDMI-1
[    46.907] (II) modeset(0): Output HDMI-2 using monitor section HDMI-2
[    46.908] (II) modeset(0): Output DSI-1 using monitor section DSI-1
[    46.950] (II) modeset(0): EDID for output HDMI-1
[    46.953] (II) modeset(0): EDID for output HDMI-2
[    46.953] (II) modeset(0): EDID for output DSI-1
[    46.953] (II) modeset(0): Printing probed modes for output DSI-1
[    46.953] (II) modeset(0): Output HDMI-1 disconnected
[    46.953] (II) modeset(0): Output HDMI-2 disconnected
[    46.953] (II) modeset(0): Output DSI-1 connected
[    46.953] (II) modeset(0): Output DSI-1 using initial mode 400x1280 +0+0
[    47.550] (II) config/udev: Adding input device vc4-hdmi-0 (/dev/input/event0)
[    47.550] (**) vc4-hdmi-0: Applying InputClass "libinput keyboard catchall"
[    47.550] (II) Using input driver 'libinput' for 'vc4-hdmi-0'
[    47.550] (**) vc4-hdmi-0: always reports core events
[    47.552] (II) event0  - vc4-hdmi-0: is tagged by udev as: Keyboard Pointingstick
[    47.553] (II) event0  - vc4-hdmi-0: device is a pointer
[    47.553] (II) event0  - vc4-hdmi-0: device is a keyboard
[    47.553] (II) event0  - vc4-hdmi-0: device removed
[    47.630] (II) libinput: vc4-hdmi-0: needs a virtual subdevice
[    47.630] (**) Option "config_info" "udev:/sys/devices/platform/soc/fef00700.hdmi/rc/rc0/input0/event0"
[    47.630] (II) XINPUT: Adding extended input device "vc4-hdmi-0" (type: MOUSE, id 7)
[    47.630] (**) vc4-hdmi-0: (accel) selected scheme none/0
[    47.630] (**) vc4-hdmi-0: (accel) acceleration factor: 2.000
volumio@volumio2:~$ cat /sys/class/drm/card1-DSI-1/modes
400x1280

best regards

Hey @Mustang65,

All software diagnostics report working - DSI bound, backlight full, X outputting to DSI-1, mode active. Nothing in software explains why display is dark.

Working theory: Pi 4 Rev 1.4 may have issues with [pi4] section scope processing. Let’s rule this out by moving everything under [pi4] to [all] scope. Also prevent HDMI initialization from potentially competing with DSI resources.

Edit your userconfig.txt:

# Add your custom config.txt options to this file, which will be preserved during updates
[pi4]
[all]
dtoverlay=vc4-kms-v3d-pi4,nohdmi
dtoverlay=vc4-kms-dsi-waveshare-panel,7_9_inch,rotation=270
hdmi_force_hotplug=0
disable_overscan=1

#### Touch Display rotation setting below: do not alter ####
display_lcd_rotate=3
display_hdmi_rotate=3

Save, then full power cycle (shutdown, disconnect power, wait 30 seconds, reconnect).

Kind Regards,

Hi @nerd

good news, the display is on now! It started correctly with right orientation and resolution.

I did a reboot, too, it works like it should!

Thanks for your help and patience,

Best regards

Hey @Mustang65,

Excellent - glad the display is working now.

For future reference: the fix involved moving overlays from [pi4] scope to [all] scope and adding ,nohdmi to vc4-kms-v3d-pi4. Either or both may have contributed to the solution.

Conditional filters have documented edge cases, particularly with HDMI-related settings. GitHub Issue #1296 from 2019 reported ā€œConfig.txt ignores conditional filters for hdmi settingsā€ and similar issues continue to surface. Not a single bug that was fixed - more like a class of edge cases in the boot chain.

I wonder if only revision 1.4 of Raspberry Pi 4 Model B boards are affected.

Your Volumio 3 setup worked because it used fkms (fake KMS) with different driver architecture. Volumio 4 uses full KMS where HDMI/DSI resource conflicts are more likely, making the ,nohdmi parameter important.

Kind Regards,

Hi @nerd

i just started my volumio-setup again and there is a dark display again. It was over night without power. I rebooted it again and the problem is still there. Any ideas what to do?

I think there’s still a problem with the hdmi-dsi boot order.

i tested it with a Raspberry Pi 4 B Rev. 1.2, too. It’s the same behavior as the rev. 1.4.

Hey @Mustang65,

There is no silver bullet or an ace up my sleeve. Any help I can offer is facts based. This takes us back right to where we started.

Kind Regards,

Hi @nerd

it seems i have to change back to Volumio 3 when i want to use my display. It started yesterday after the last change in the userconfig, but aber power-down overnight it didn’t start again. That’s not usable for me.

By the way, if I want to install the Touch Display Plugin in Volumio 3, there’s an error at 70% with the mirror (raspbian.raspberrypi.org).

best regards

Hey @Mustang65,

This is a significant regression. The fix worked initially but failed after overnight power-down - that suggests something beyond the [pi4] scope issue we addressed.

Before reverting to Volumio 3, I need to establish current state. Please provide:

  1. Log link from http://volumio.local/dev

  2. Output from these commands:

cat /boot/userconfig.txt
sudo dmesg | grep -iE "dsi|panel|drm"
cat /sys/class/drm/card1-DSI-1/status
cat /sys/class/backlight/*/brightness

The log link is critical - it shows the constructed cmdline.txt at boot, which lets me verify whether parameters are being truncated or modified during the boot process.

Also need to know:

  • Is the userconfig.txt still the working configuration we applied (with [all] scope and ,nohdmi)? Or did it revert?
  • Was anything else changed or updated between ā€œworkingā€ and ā€œnot workingā€?

The overnight failure pattern could indicate cold boot initialization timing differs from warm reboot, or a hardware issue specific to this board. If the configuration is identical but behavior changed, that points to hardware. If configuration reverted, that is a different problem.

Regarding Volumio 3 Touch Display Plugin: the mirror error at raspbian.raspberrypi.org is expected - that repository was deprecated. The V3 plugin installation scripts reference outdated URLs. This is not fixable from user side without the Volumio OS v3 maintainer updating the code.

Kind Regards,

Hi @nerd

here are the logs:

h ttp://logs.volumio.org/volumio/lWgPmXC.html (System don’t allow me to post this link. Just remove the space after ā€œhā€)

and the ssh outputs:

volumio@volumio2:~$ cat /boot/userconfig.txt
# Add your custom config.txt options to this file, which will be preserved during updates
[pi4]
[all]
dtoverlay=vc4-kms-v3d-pi4,nohdmi
dtoverlay=vc4-kms-dsi-waveshare-panel,7_9_inch,rotation=270
hdmi_force_hotplug=0
disable_overscan=1


#### Touch Display rotation setting below: do not alter ####
display_lcd_rotate=3
display_hdmi_rotate=3
volumio@volumio2:~$ sudo dmesg | grep -iE "dsi|panel|drm"
[    0.000000] Kernel command line: coherent_pool=1M 8250.nr_uarts=0 snd_bcm2835.enable_headphones=0 cgroup_disable=memory numa_policy=interleave nvme.max_host_mem_size_mb=0 snd_bcm2835.enable_headphones=1 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_hdmi=0  numa=fake=2 system_heap.max_order=0 smsc95xx.macaddr=D8:3A:DD:55:92:AB vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000  splash plymouth.ignore-serial-consoles dwc_otg.fiq_enable=1 dwc_otg.fiq_fsm_enable=1 dwc_otg.fiq_fsm_mask=0xF dwc_otg.nak_holdoff=1 quiet console=ttyS0,115200 console=tty1 imgpart=UUID=2fcd4aa9-19da-4188-a556-3009b8a5e64a imgfile=/volumio_current.sqsh bootpart=UUID=DFF5-D140 datapart=UUID=08d6ed05-4edb-44af-8ed0-2ea18b54c960 uuidconfig=cmdline.txt pcie_aspm=off pci=pcie_bus_safe rootwait bootdelay=7 logo.nologo vt.global_cursor_default=0 net.ifnames=0 snd-bcm2835.enable_compat_alsa= snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1 loglevel=0 nodebug use_kmsg=no video=DSI-1:400x1280e,rotate=270
[    0.020900] /soc/cprman@7e101000: Fixed dependency cycle(s) with /soc/dsi@7e700000
[    0.021092] /soc/dsi@7e700000: Fixed dependency cycle(s) with /soc/i2c0mux/i2c@1/panel_disp1@45
[    0.021111] /soc/dsi@7e700000: Fixed dependency cycle(s) with /soc/cprman@7e101000
[    0.021215] /soc/i2c0mux/i2c@1/panel_disp1@45: Fixed dependency cycle(s) with /soc/dsi@7e700000
[    0.021377] /soc/cprman@7e101000: Fixed dependency cycle(s) with /soc/dsi@7e700000
[    0.022499] /soc/cprman@7e101000: Fixed dependency cycle(s) with /soc/dsi@7e700000
[    0.022539] /soc/dsi@7e700000: Fixed dependency cycle(s) with /soc/i2c0mux/i2c@1/panel_disp1@45
[    0.022558] /soc/dsi@7e700000: Fixed dependency cycle(s) with /soc/cprman@7e101000
[    0.060583] /soc/i2c0mux/i2c@1/panel_disp1@45: Fixed dependency cycle(s) with /soc/dsi@7e700000
[    2.176518] /soc/dsi@7e700000: Fixed dependency cycle(s) with /soc/i2c0mux/i2c@1/panel_disp1@45
[    2.176585] /soc/i2c0mux/i2c@1/panel_disp1@45: Fixed dependency cycle(s) with /soc/dsi@7e700000
[    2.312809] v3d fec00000.v3d: [drm] Transparent Hugepage support is recommended for optimal performance on this platform!
[    2.316687] [drm] Initialized v3d 1.0.0 for fec00000.v3d on minor 0
[    2.349453] vc4-drm gpu: bound fe400000.hvs (ops vc4_hvs_ops [vc4])
[    2.349939] [drm] forcing DSI-1 connector on
[    2.349958] vc4-drm gpu: bound fe700000.dsi (ops vc4_dsi_ops [vc4])
[    2.351166] vc4-drm gpu: bound fe004000.txp (ops vc4_txp_ops [vc4])
[    2.351394] vc4-drm gpu: bound fe206000.pixelvalve (ops vc4_crtc_ops [vc4])
[    2.351570] vc4-drm gpu: bound fe207000.pixelvalve (ops vc4_crtc_ops [vc4])
[    2.354425] vc4-drm gpu: bound fec12000.pixelvalve (ops vc4_crtc_ops [vc4])
[    2.356340] [drm] Initialized vc4 0.0.0 for gpu on minor 1
[    2.390646] vc4-drm gpu: [drm] fb0: vc4drmfb frame buffer device
[   14.345966] systemd[1]: Starting modprobe@drm.service - Load Kernel Module drm...
[   14.462926] systemd[1]: modprobe@drm.service: Deactivated successfully.
[   14.463383] systemd[1]: Finished modprobe@drm.service - Load Kernel Module drm.

volumio@volumio2:~$ cat /sys/class/drm/card1-DSI-1/status
connected

volumio@volumio2:~$ cat /sys/class/backlight/*/brightness
255

The configuration in the userconfig.txt didn’t change, it’s still the same.
I just tried different raspberry Rev’s and can say, at Rev. 1.2, 1.3, 1.4 and 1.5 it’s all the same. There’s no difference. When booting after power-down, the display stays dark. Rebooting didn’t change, the display stay dark. After some reboots the Display works, until a new reboot or power-down. Then it stays dark. I tested it with Rev. from 1.2 to 1.5 and 2GB /4GB versions. All the same…

Best regards

Hi @nerd

i just did a short power-down (5 sec.) and reboot again, the display ist actually on. Maybe it’s useful to see the logs when the display works? Here’s hte link:

http://logs.volumio.org/volumio/2pcPolO.html

best regards

Hey @Mustang65,

Excellent - comparing the two logs reveals exactly what is happening.

NOT WORKING log (dark display):

ws_touchscreen 10-0045: I2C write failed: -5

WORKING log (display on): This error is completely absent.

The panel controller chip at I2C address 0x45 fails to respond during boot initialization. Error -5 is EIO - the kernel attempted to send configuration commands to the Waveshare panel controller and received no response. When this happens, the panel never receives its initialization sequence, so it stays dark - even though DSI binding, backlight, and X server all report success because those are separate subsystems.

This explains everything:

  • Affects ALL Pi 4 revisions equally (not hardware-specific)
  • Short power cycle (5 seconds) more likely to succeed - capacitors retain charge, panel controller ready faster
  • Long power down (overnight) more likely to fail - true cold start, panel controller not ready when driver sends commands
  • Multiple reboots sometimes fixes it - eventually wins the timing race

This is not a Volumio problem and not a configuration problem. Your configuration is correct. The Waveshare panel driver (ws_touchscreen) attempts I2C communication before the panel controller hardware is ready to respond. This is a timing bug in the Waveshare driver code for kernel 6.x.

Action required: Contact Waveshare support directly with these findings. Provide them:

  1. The two log links showing the difference (working vs not working)
  2. The specific error: ws_touchscreen 10-0045: I2C write failed: -5
  3. Platform: Raspberry Pi 4, kernel 6.12.47, Debian Bookworm
  4. Behavior pattern: intermittent failure on cold boot, timing-dependent

Waveshare maintains the vc4-kms-dsi-waveshare-panel overlay and the ws_touchscreen driver. They need to add proper initialization delay or retry logic to handle cold boot timing on newer kernels.

I have exhausted all user-side configuration options. This requires a driver fix from the display manufacturer.

Kind Regards,

Hi Nerd,

That sounds like the solution! I ran a test based on your theory:

The Raspberry is sitting directly on the display. The power supply is the same. In this configuration, the display only works sporadically.

I disconnected the Raspberry from the display and connected a second power supply. When the display receives power before the Raspberry, it starts up without any problems. This is the case both after a restart and after a power-down.

This underscores the theory of poor timing in the Waveshare driver. I will contact Waveshare support and describe the problem. Until then, I will simply use a second power source or switch on the Raspberry with a time delay.

Thanks again for your help! Really great work!

Greetings from Germany

Hi everybody.

I’m glad you discovered the root cause of the failure. I’ve been testing things from yesterday and finally I got a setup working with exactly the configuration you posted in the first message (Example 1 in my case). But it didn’t work on the first attempts. Last night it seemed stable and this morning it started up without any problem.

The solution found by Mustang65 looks good too. In my case I have even an OLED display connected to the same power supply, so it adds up to the problem.

As you know, I worked on this problem with WaveShare technicians, but after Chinese New Year they didn’t answer back any more.

Just for the record, these are the tests I carried yesterday:

4.073 New installation

Setup:
  Raspberry Pi 4B Rev. 1.2 4GB
  eMMC microSD card 32 GB
  USB SATA HDD 4 TB
  DAC AUDIOPHONICS I-Sabre DAC ES9023 TCXO
  Display WaveShare DSI 11.9 LCD Display
  0.96 OLED 128x64 SSD1306 Display (Not configured for tests)

1st Test
Added "video=DSI-1:320x1480@60,rotate=270" to /boot/cmdline.txt in PC, right after flashin 4.073. Added "Example 1: Raspberry Pi 4B+ with 11.9 inch display (Scenario 1)" userconfig configuration to /boot/userconfig.txt.
On boot userconfig.txt contents are deleted, but not cmdline.txt modifications.
    1st boot: Black display. Added again "Example 1" config to /userconfig.txt. Reboot
    2nd boot: Black display


2nd Test: Changed [Pi4] section contents to [All]
    1st boot: Black Display


3rd Test: Reset to factory defaults. cmdline.txt not changed on factory reset. Userconfig.txt deleted, added "Example 1" configuration again. 
    1st boot: Display working, "Volumio The Music Player" shows on boot and on shutdown correctly rotated. Installed "Touch display" and main Volumio screen not rotated but working
    2nd boot (7 hours after shutdown): Display not working
    3rd boot (reboot right after last failed test): Display working, "Volumio The Music Player" shows on boot and on shutdown correctly rotated. Main Volumio screen not rotated but working. Rotation configured in Touch Display AddOn working     
    4th boot (reboot again after correct test): Everything still works
    5th reboot (10 hours after last shutdown): Everything still works. It seems stable.

cmdline.txt and userconfig.txt exactly as in Example 1. fbset results are not:

volumio@volumio:~$ fbset

mode "320x1480"
    geometry 320 1480 320 1480 16
    timings 0 0 0 0 0 0 0
    rgba 5/11,6/5,5/0,0/0
endmode

Regards.
Angel

Ps. As you can see, I even changed my RPi rev 1.5 2 GB for a rev 1.2 4GB to check if that was the cause of the error. As you’ve found, it’s not RPi’s fault so it doesn’t matter the revision

Hey @aluisperezh,

Your testing confirms the pattern exactly - intermittent success/failure, more reliable after short power cycles, random failures after longer power-down periods. Same behavior across your Rev 1.2 as Mustang65 observed on Rev 1.4 and 1.5. This definitively rules out Pi revision as a factor.

Regarding your fbset output:

mode "320x1480"
    geometry 320 1480 320 1480 16

This shows portrait mode (320x1480) instead of landscape (1480x320). The display is working but framebuffer rotation is not being applied. This is a separate issue from the I2C timing problem. Verify your cmdline.txt contains video=DSI-1:320x1480@60,rotate=270 at the very end, space-separated, on the single line.

I examined the Waveshare driver source in the Raspberry Pi kernel tree. The ws_touchscreen initialization code performs a single I2C write attempt with no startup delay and no retry logic on failure. When the panel controller is not ready - which happens on cold boot before capacitors stabilize - the driver fails immediately and the panel stays dark. This is a textbook initialization timing defect.

Although I have the relevant kernel development skills and the fix is trivial - adding an initialization delay or retry loop would resolve this - this work should be conducted by Waveshare. They collect revenue from every display sale specifically to provide a working product and maintain their drivers. It is not the responsibility of end users or community volunteers to fix manufacturer driver defects.

Evidence package for Waveshare support:

  • Error: ws_touchscreen 10-0045: I2C write failed: -5
  • Pattern: Cold boot failure, warm boot success
  • Affected: All Pi 4 revisions tested (1.2, 1.4, 1.5)
  • Platform: Kernel 6.12.x (Debian Bookworm)
  • Driver deficiency: No init delay, no retry on I2C failure

Since you have prior contact with Waveshare technical support, you may be best positioned to escalate this with the evidence collected here.

Kind Regards,

I totally agree with you, this is not something for end users to solve, but for the brand. They must solve their problems when they are being paid for it.

I’ll write them right now specifying what you’ve found, if you don’t mind. But as I’m afraid they are just ignoring my messages, it would be good if @Mustang65 could write them too.

About the rotation issue, this is my cmdline.txt file:

volumio@volumio:~$ cat /boot/cmdline.txt
splash plymouth.ignore-serial-consoles dwc_otg.fiq_enable=1 dwc_otg.fiq_fsm_enable=1 dwc_otg.fiq_fsm_mask=0xF dwc_otg.nak_holdoff=1 quiet console=serial0,115200 console=tty1 imgpart=UUID=dafa3844-b779-48cd-9b4c-01ecfd09e0f4 imgfile=/volumio_current.sqsh bootpart=UUID=3B89-0B23 datapart=UUID=867ce57f-62eb-4042-983c-d6e613ad744e uuidconfig=cmdline.txt pcie_aspm=off pci=pcie_bus_safe rootwait bootdelay=7 logo.nologo vt.global_cursor_default=0 net.ifnames=0 snd-bcm2835.enable_compat_alsa= snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1 loglevel=0 nodebug use_kmsg=no video=DSI-1:320x1480@60,rotate=270

Anyway, as there is an easy workaround for this, I would just leave it like that. Maybe stating somewhere that this could happen and that this is the solution would be enough. At least for me it would.

I will include this in my message to WaveShare anyway.

Regards and thanks for a great job.

Angel