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

Waveshare HDMI display configuration guide for Volumio OS

Supported hardware

Waveshare HDMI displays

  • 11.9 inch HDMI LCD - Native resolution 320x1480 (portrait)
  • 7.9 inch HDMI LCD - Native resolution 400x1280 (portrait)

Note: These are generic HDMI displays compatible with any device supporting custom HDMI timings. This guide specifically covers configuration for Raspberry Pi running Volumio OS.

Configuration tested on

  • Raspberry Pi 4B+ - All scenarios tested and verified
  • Raspberry Pi 5 - All scenarios tested and verified

Operating system

  • Volumio OS (Debian Bookworm-based)

Plymouth theme requirement

  • volumio-adaptive - Required for proper boot splash rotation
  • See References section for installation source and community discussion

Why this specific theme is required:

Portrait-native displays like the Waveshare panels expose a fundamental Linux kernel limitation: the DRM (Direct Rendering Manager) subsystem assumes all displays are landscape-oriented. When rotation parameters are applied to portrait-native panels, the kernel’s rotation logic produces inconsistent or wrong orientations because it calculates rotation from a landscape baseline that doesn’t match the panel’s actual native orientation.

The volumio-adaptive theme solves this by using pre-rotated sequences instead of runtime rotation. This bypasses both the kernel’s broken rotation logic and Plymouth’s text rotation limitations, ensuring the boot splash displays correctly regardless of the display’s native orientation.


Display-specific parameters reference

All configurations require display-specific parameters. Use this table to determine correct values for your display.

Parameter table by display size

Parameter 11.9 inch display 7.9 inch display
Native resolution 320x1480 (portrait) 400x1280 (portrait)
Rotated resolution 1480x320 (landscape) 1280x400 (landscape)
hdmi_timings 320 0 80 16 32 1480 0 16 4 12 0 0 0 60 0 42000000 3 400 0 220 32 110 1280 0 10 10 10 0 0 0 60 0 59400000 3
max_framebuffer_height 1480 (required) Not needed
video= parameter video=HDMI-A-1:320x1480M@60,rotate=90 video=HDMI-A-1:400x1280M@60,rotate=90
plymouth= parameter plymouth=90 plymouth=90
Expected fbset output mode "1480x320" mode "1280x400"

Important notes:

  • Both displays use rotate=90 in video= parameter for landscape orientation
  • Both displays use plymouth=90 to enable volumio-adaptive theme rotation
  • 11.9 inch display requires max_framebuffer_height=1480 parameter
  • 7.9 inch display does NOT need max_framebuffer_height parameter
  • HDMI rotation (90 degrees) differs from DSI rotation (270 degrees) but achieves same physical orientation

Complete example configurations

This section provides complete, ready-to-use configuration files for common setups. Choose the example matching your hardware and copy the entire configuration.

Example 1: Raspberry Pi 4B+ with 11.9 inch HDMI display (Scenario 1)

Complete /boot/userconfig.txt:

# Add your custom config.txt options to this file, which will be preserved during updates
[pi4]
dtoverlay=vc4-kms-v3d-pi4
max_framebuffer_height=1480
hdmi_group=2
hdmi_mode=87
hdmi_timings=320 0 80 16 32 1480 0 16 4 12 0 0 0 60 0 42000000 3
[all]
#### Touch Display rotation setting below: do not alter ####
display_lcd_rotate=1
display_hdmi_rotate=1

Add to end of /boot/cmdline.txt:

video=HDMI-A-1:320x1480M@60,rotate=90 plymouth=90

Expected fbset output:

mode "1480x320"

Example 2: Raspberry Pi 5 with 11.9 inch HDMI display (Scenario 1)

Complete /boot/userconfig.txt:

# Add your custom config.txt options to this file, which will be preserved during updates
max_framebuffer_height=1480
hdmi_group=2
hdmi_mode=87
hdmi_timings=320 0 80 16 32 1480 0 16 4 12 0 0 0 60 0 42000000 3

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

Add to end of /boot/cmdline.txt:

video=HDMI-A-1:320x1480M@60,rotate=90 plymouth=90

Expected fbset output:

mode "1480x320"

Example 3: Raspberry Pi 4B+ with 7.9 inch HDMI display (Scenario 1)

Complete /boot/userconfig.txt:

# Add your custom config.txt options to this file, which will be preserved during updates
[pi4]
dtoverlay=vc4-kms-v3d-pi4
hdmi_group=2
hdmi_mode=87
hdmi_timings=400 0 220 32 110 1280 0 10 10 10 0 0 0 60 0 59400000 3
[all]
#### Touch Display rotation setting below: do not alter ####
display_lcd_rotate=1
display_hdmi_rotate=1

Add to end of /boot/cmdline.txt:

video=HDMI-A-1:400x1280M@60,rotate=90 plymouth=90

Expected fbset output:

mode "1280x400"

Example 4: Raspberry Pi 5 with 7.9 inch HDMI display (Scenario 1)

Complete /boot/userconfig.txt:

# Add your custom config.txt options to this file, which will be preserved during updates
hdmi_group=2
hdmi_mode=87
hdmi_timings=400 0 220 32 110 1280 0 10 10 10 0 0 0 60 0 59400000 3

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

Add to end of /boot/cmdline.txt:

video=HDMI-A-1:400x1280M@60,rotate=90 plymouth=90

Expected fbset output:

mode "1280x400"

Physical orientation (90-degree rotation)

Raspberry Pi 4B+ and Pi 5 mounting (when viewing from screen side):

  • Bottom edge: USB-C power port, HDMI ports
  • Left edge: USB ports, Ethernet/LAN port
  • Top edge: GPIO header
  • Right edge: SD card slot (micro SD on Pi 4B+, full size SD on Pi 5)

Note: When mounting the Pi from behind (looking at the back of the display), left and right edges are reversed from this description.

Display orientation with 90-degree rotation:

  • Display top edge: Aligned with GPIO header (Pi top edge)
  • Display bottom edge: Aligned with USB-C/HDMI ports (Pi bottom edge)

Why 90 degrees (not 270): HDMI displays use different rotation conventions than DSI displays. A 90-degree rotation on HDMI achieves the same physical landscape orientation as 270-degree rotation on DSI.


Configuration scenarios overview

Scenario Audio output Additional HDMI port Use case
1 HDMI display audio N/A Display audio through built-in speakers
2 I2S DAC N/A High-quality audio via DAC, display on HDMI
3 HDMI port 1 audio Audio only Soundbar/AVR on second HDMI port
4 Dual HDMI Secondary display Display + secondary video output

Note: HDMI display scenarios differ from DSI scenarios because the display itself uses HDMI port 0 for video+audio. Additional audio configurations use HDMI port 1 or I2S DAC.


Common base configuration

Raspberry Pi 4B+

All scenarios share this base configuration in /boot/userconfig.txt:

[pi4]
dtoverlay=vc4-kms-v3d-pi4
<INSERT max_framebuffer_height IF 11.9 INCH>
hdmi_group=2
hdmi_mode=87
<INSERT DISPLAY-SPECIFIC hdmi_timings FROM TABLE>
[all]
#### Touch Display rotation setting below: do not alter ####
display_lcd_rotate=1
display_hdmi_rotate=1

Add scenario-specific parameters below this base.

Raspberry Pi 5

All scenarios use this simplified configuration in /boot/userconfig.txt:

<INSERT max_framebuffer_height IF 11.9 INCH>
hdmi_group=2
hdmi_mode=87
<INSERT DISPLAY-SPECIFIC hdmi_timings FROM TABLE>

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

Key differences for Pi 5:

  • No section markers ([pi4], [all]) needed
  • No vc4-kms-v3d overlay (handled automatically by volumioconfig.txt)

Add scenario-specific parameters below this base.

cmdline.txt configuration

For all scenarios on both Pi 4B+ and Pi 5:

Add the display-specific parameters from the table to the END of /boot/cmdline.txt:

<INSERT DISPLAY-SPECIFIC video= PARAMETER FROM TABLE> plymouth=90

Space-separate from previous parameters.

Example for 11.9 inch display:

... use_kmsg=no video=HDMI-A-1:320x1480M@60,rotate=90 plymouth=90

Example for 7.9 inch display:

... use_kmsg=no video=HDMI-A-1:400x1280M@60,rotate=90 plymouth=90

Scenario 1: HDMI display only

Purpose

Display on HDMI with audio through display’s built-in speakers (if available).

Configuration

Use the complete example configurations provided above (Examples 1-4) based on your Pi model and display size. No additional parameters needed.

Expected results

  • fbset shows display-specific resolution (see parameter table)
  • Display shows correctly rotated landscape video
  • Plymouth boot splash displays with correct rotation (via volumio-adaptive theme)
  • Console properly rotated to landscape
  • Audio output available through HDMI display (if speakers present)

Scenario 2: HDMI display + I2S DAC

Purpose

Video on HDMI display, high-quality audio through external I2S DAC.

Configuration

Use base configuration for your Pi model and display size from examples above.

DAC Configuration via Volumio UI:

Do NOT add DAC overlays to userconfig.txt. Configure your I2S DAC through Volumio’s web interface:

  1. Open Volumio web UI (http://volumio.local)
  2. Navigate to: Settings → Playback Options
  3. Under Output Device, select your I2S DAC from the dropdown
  4. Click Save
  5. Volumio will automatically add the correct DAC overlay to /boot/config.txt
  6. Reboot when prompted

Important: Volumio manages DAC configuration in /boot/config.txt (system file). User modifications should only go in /boot/userconfig.txt.

Expected results

  • Display shows correctly rotated landscape video
  • I2S DAC active for audio output (configured via Volumio UI)
  • Plymouth boot splash displays with correct rotation
  • Console properly rotated to landscape

Scenario 3: HDMI display + HDMI port 1 audio

Purpose

Video on primary HDMI display (port 0), audio extracted from second HDMI port (port 1) for soundbar/AVR.

Configuration

Raspberry Pi 4B+

/boot/userconfig.txt - Add to base configuration:

[pi4]
dtoverlay=vc4-kms-v3d-pi4
<INSERT max_framebuffer_height IF 11.9 INCH>
hdmi_group=2
hdmi_mode=87
<INSERT DISPLAY-SPECIFIC hdmi_timings FROM TABLE>
hdmi_force_hotplug:1=1
hdmi_drive:1=2
hdmi_ignore_edid:1=0xa5000080
[all]
#### Touch Display rotation setting below: do not alter ####
display_lcd_rotate=1
display_hdmi_rotate=1

Raspberry Pi 5

/boot/userconfig.txt - Add to base configuration:

<INSERT max_framebuffer_height IF 11.9 INCH>
hdmi_group=2
hdmi_mode=87
<INSERT DISPLAY-SPECIFIC hdmi_timings FROM TABLE>
hdmi_force_hotplug:1=1
hdmi_drive:1=2
hdmi_ignore_edid:1=0xa5000080

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

Both Pi 4B+ and Pi 5

/boot/cmdline.txt - Add to end:

<INSERT DISPLAY-SPECIFIC video= PARAMETER FROM TABLE> video=HDMI-A-2:d plymouth=90

Example for 11.9 inch display:

... use_kmsg=no video=HDMI-A-1:320x1480M@60,rotate=90 video=HDMI-A-2:d plymouth=90

Expected results

  • Display shows correctly rotated landscape video on HDMI port 0
  • HDMI-A-2 (port 1) video disabled but audio active
  • Plymouth displays with correct rotation
  • Audio available to soundbar/AVR connected to HDMI port 1

Scenario 4: HDMI display + secondary video output

Purpose

Primary display on HDMI port 0 (Waveshare display), secondary display on HDMI port 1.

Configuration

Raspberry Pi 4B+

/boot/userconfig.txt:

[pi4]
dtoverlay=vc4-kms-v3d-pi4
<INSERT max_framebuffer_height IF 11.9 INCH>
hdmi_group=2
hdmi_mode=87
<INSERT DISPLAY-SPECIFIC hdmi_timings FROM TABLE>
hdmi_force_hotplug:1=1
hdmi_drive:1=2
[all]
#### Touch Display rotation setting below: do not alter ####
display_lcd_rotate=1
display_hdmi_rotate=1

Raspberry Pi 5

/boot/userconfig.txt:

<INSERT max_framebuffer_height IF 11.9 INCH>
hdmi_group=2
hdmi_mode=87
<INSERT DISPLAY-SPECIFIC hdmi_timings FROM TABLE>
hdmi_force_hotplug:1=1
hdmi_drive:1=2

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

Both Pi 4B+ and Pi 5

/boot/cmdline.txt - Add to end:

<INSERT DISPLAY-SPECIFIC video= PARAMETER FROM TABLE> video=HDMI-A-2:1920x1080@60 plymouth=90

Adjust secondary display resolution as needed (example shows 1080p).

Expected results

  • Primary Waveshare display shows correctly rotated landscape video
  • Secondary HDMI display active with specified resolution
  • Plymouth displays on primary display with correct rotation
  • Volumio UI appears on primary display by default

Note: Without X11 (touch display plugin disabled), secondary display will show console output only. Enable touch display plugin for dual display support with Volumio UI.


Parameter reference

HDMI display parameters

Parameter Function
hdmi_group=2 Enables DMT (Display Monitor Timings) mode for custom resolutions
hdmi_mode=87 Activates custom HDMI timing mode
hdmi_timings=... Defines custom display timing parameters for portrait resolution
max_framebuffer_height=1480 Sets framebuffer height (required for 11.9 inch display)
display_lcd_rotate=1 Enables 90-degree rotation for LCD interface
display_hdmi_rotate=1 Enables 90-degree rotation for HDMI output
video=HDMI-A-1:<resolution>,rotate=90 Kernel-level framebuffer rotation for console
plymouth=90 Triggers volumio-adaptive theme to use 90-degree rotated images

Secondary HDMI audio parameters

Parameter Function
hdmi_force_hotplug:1=1 Keeps HDMI port 1 active
hdmi_drive:1=2 Forces HDMI audio mode (not DVI) on port 1
hdmi_ignore_edid:1=0xa5000080 Ignores display detection on port 1 (audio-only mode)
video=HDMI-A-2:d Kernel-level disable of HDMI-A-2 video output

Audio parameters

Parameter Function
dtoverlay=<dac-name> Loads specific I2S DAC driver overlay (via Volumio UI)

Verification commands

After rebooting with new configuration, verify setup with these commands:

Check framebuffer resolution

fbset

Expected output for 11.9 inch display:

mode "1480x320"
    geometry 1480 320 1480 320 16

Expected output for 7.9 inch display:

mode "1280x400"
    geometry 1280 400 1280 400 16

Check kernel command line

cat /proc/cmdline | grep video

Expected output for 11.9 inch (Scenario 1):

... video=HDMI-A-1:320x1480M@60,rotate=90 plymouth=90

Expected output for 7.9 inch (Scenario 3):

... video=HDMI-A-1:400x1280M@60,rotate=90 video=HDMI-A-2:d plymouth=90

Check HDMI configuration

vcgencmd get_config int | grep hdmi

Expected output (varies by scenario):

hdmi_group=2
hdmi_mode=87
display_hdmi_rotate=1
display_lcd_rotate=1

Check display devices

ls /sys/class/drm/

Expected output (single display):

card0  card0-HDMI-A-1  ...

Expected output (dual display):

card0  card0-HDMI-A-1  card0-HDMI-A-2  ...

Troubleshooting

Issue: Framebuffer shows wrong resolution

Symptoms:

fbset
mode "320x1480"  # Wrong - not rotated

Causes:

  1. Missing or incorrect hdmi_timings
  2. Missing display rotation parameters
  3. Incorrect video= parameter in cmdline.txt

Solution:

  1. Verify hdmi_timings matches your display size from parameter table
  2. Check display_lcd_rotate=1 and display_hdmi_rotate=1 are present
  3. Ensure correct video= parameter with rotate=90 is in cmdline.txt
  4. Verify 11.9 inch display has max_framebuffer_height=1480

Issue: Plymouth boot splash not rotated

Symptoms:

  • Boot splash appears in portrait orientation
  • Plymouth displays but sideways

Solution:

  • Ensure plymouth=90 parameter is in cmdline.txt
  • Verify volumio-adaptive Plymouth theme is installed
  • Check plymouth theme selection: plymouth-set-default-theme
  • Install volumio-adaptive theme if missing (see references section)

Issue: Console in portrait mode despite rotation

Symptoms:

  • Plymouth displays correctly rotated
  • Console text appears in portrait orientation
  • Login prompt sideways

Solution:

  • Add display-specific video=HDMI-A-1:... parameter with rotate=90 to cmdline.txt
  • Verify display_hdmi_rotate=1 is in userconfig.txt
  • Both parameters are required for complete rotation

Issue: 11.9 inch display shows corrupted framebuffer

Symptoms:

  • Screen shows partial or distorted image
  • Wrong geometry reported by fbset

Solution:

  • Add max_framebuffer_height=1480 to userconfig.txt
  • This parameter is REQUIRED for 11.9 inch display
  • 7.9 inch display does NOT need this parameter

Issue: Secondary HDMI audio not working (Scenario 3)

Symptoms:

  • No audio output from HDMI port 1
  • Volumio doesn’t list HDMI 1 as audio output option

Solution:

  1. Verify hdmi_drive:1=2 is set (forces audio mode)
  2. Check HDMI cable supports audio (not all do)
  3. Verify soundbar/AVR is set to correct HDMI input
  4. Check Volumio audio output settings in web interface
  5. Ensure video=HDMI-A-2:d is in cmdline.txt to disable video

Issue: Display not detected

Symptoms:

  • No output on HDMI display
  • System boots but display stays black

Solution:

  1. Verify HDMI cable is connected to port 0 (closest to USB-C power)
  2. Check hdmi_group and hdmi_mode are set correctly
  3. Verify hdmi_timings match your display size exactly
  4. Test with different HDMI cable
  5. Try removing custom timings temporarily to test basic HDMI output

Notes and best practices

Important warnings

  1. Never edit /boot/config.txt directly - Always use /boot/userconfig.txt for custom settings
  2. cmdline.txt is a single line - All parameters must be on one line, space-separated
  3. plymouth=90 parameter required - Without this, boot splash will not rotate correctly
  4. 11.9 inch needs max_framebuffer_height - This parameter is mandatory for 11.9 inch display
  5. Use correct hdmi_timings - Wrong timings will prevent display from working
  6. Primary display uses HDMI port 0 - Always connect Waveshare display to port closest to USB-C power
  7. Configure DACs via Volumio UI - Never manually add DAC overlays to userconfig.txt
  8. volumio-adaptive theme required - Standard Plymouth themes will not rotate correctly

File preservation

These files are preserved during Volumio updates:

  • /boot/userconfig.txt - User configuration for display and custom hardware (safe to edit)
  • /boot/cmdline.txt - Kernel parameters (safe to edit)

These files are managed by Volumio:

  • /boot/config.txt - System configuration managed by Volumio (do not edit directly)
  • /boot/volumioconfig.txt - Volumio base config (do not edit)

Important distinction:

  • /boot/config.txt - Volumio writes system settings here (DAC configuration, base hardware settings)
  • /boot/userconfig.txt - User adds custom settings here (display configuration, additional hardware)
  • Both files are processed together at boot
  • Settings in userconfig.txt supplement (not replace) config.txt

Configuration testing workflow

  1. Identify your display size (11.9 inch or 7.9 inch)
  2. Reference the parameter table for display-specific values
  3. Use complete example configurations as starting point
  4. Make changes to configuration files using correct parameters
  5. Verify syntax (no typos, proper spacing)
  6. Reboot system
  7. Run verification commands
  8. Check Plymouth during boot for correct rotation
  9. Verify console rotation
  10. Test audio output if configured
  11. Document working configuration

HDMI timings explained

The hdmi_timings parameter defines custom display timing in this format:

<h_active_pixels> <h_sync_polarity> <h_front_porch> <h_sync_pulse> <h_back_porch> 
<v_active_lines> <v_sync_polarity> <v_front_porch> <v_sync_pulse> <v_back_porch> 
<v_sync_offset_a> <v_sync_offset_b> <pixel_rep> <frame_rate> <interlaced> 
<pixel_freq> <aspect_ratio>

For 11.9 inch (320x1480):

320 0 80 16 32 1480 0 16 4 12 0 0 0 60 0 42000000 3

For 7.9 inch (400x1280):

400 0 220 32 110 1280 0 10 10 10 0 0 0 60 0 59400000 3

Do not modify these values unless you understand HDMI timing specifications.

Rotation angles reference

Rotation Native portrait Landscape result Use case
0 Portrait mode N/A - portrait Not recommended
90 Portrait → Landscape GPIO header at top This guide uses 90
180 Portrait upside down N/A - portrait Not recommended
270 Portrait → Landscape GPIO header at bottom Alternative orientation

This guide uses 90-degree rotation for landscape display with GPIO header at top, matching DSI guide physical orientation.

Why plymouth=90 parameter?

The plymouth=90 kernel parameter triggers the volumio-adaptive Plymouth theme’s pre-rotated image selection mechanism:

  1. Init script reads kernel command line during boot
  2. Detects plymouth=90 parameter
  3. Patches theme to use 90-degree pre-rotated image sequence
  4. Plymouth renders correctly rotated boot splash using pre-rotated images

Without this parameter, Plymouth will use the default (0-degree) image set and the display will appear sideways during boot.

Technical background: This approach was necessary because portrait-native displays expose a Linux kernel limitation where rotation parameters produce inconsistent results. The volumio-adaptive theme bypasses runtime rotation entirely by using pre-rotated image sets, solving both the kernel’s broken rotation logic and Plymouth’s text rotation clipping issues on portrait displays. See Plymouth theme requirement section above for detailed explanation.

Difference from DSI displays

Aspect HDMI displays (this guide) DSI displays
Connection HDMI port 0 DSI ribbon cable
Rotation angle 90 degrees 270 degrees
Custom timings hdmi_timings required dtoverlay handles timing
Display detection Automatic via EDID Driver-based
Physical result Same landscape orientation Same landscape orientation

Both achieve the same physical mounting orientation but use different rotation values due to hardware differences.


References

Kind Regards,

3 Likes

Hi @nerd . I’m a simple newbye. My configuration is Rpi5 with waveshare 11.9" Hdmi lcd display.
My volumio release is 4.073. Touch display 3.6.0. The waveshare is connected by HDMI port 0 (near to USB-C power) to Rpi5 then Rpi5 is connected by USB to my Amplifyer (i don’t use the Waveshare display audio).
I followed all your suggestion to solve the 90° orientation of Volumio boot logo, but nothing changed,
In fact, with your changes to the cmdline.txt and userconfig.txt files, the Volumio boot logo now appears in landscape mode instead of portrait mode but…upside down…! And I can’t get it to reposition itself correctly.
I tried changing the angle values ​​in cmdline, both in “rotate=” and “plymouth=” (0, 90, 180, 270, 360° ), but nothing, I can’t straighten the logo.
What am I doing wrong @nerd?
I’m attaching the modified cmdline.txt and userconfig.txt files.
Greetings, Guru!
cmdline.txt (579 Bytes)
userconfig.txt (491 Bytes)

1 Like

Hey @Roberto_Grieco,

Your configuration files do not match my guide. Here are two options - try Option A first, and if the display is still upside down, use Option B instead.

OPTION A - Standard orientation:

Replace your /boot/userconfig.txt entirely with:

# Add your custom config.txt options to this file, which will be preserved during updates
max_framebuffer_height=1480
hdmi_group=2
hdmi_mode=87
hdmi_timings=320 0 80 16 32 1480 0 16 4 12 0 0 0 60 0 42000000 3

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

Add to end of /boot/cmdline.txt (space-separated from existing content):

video=HDMI-A-1:320x1480M@60,rotate=90 plymouth=90

OPTION B - If Option A shows upside down:

Same userconfig.txt but change the last two lines to:

display_lcd_rotate=3
display_hdmi_rotate=3

And cmdline.txt ending becomes:

video=HDMI-A-1:320x1480M@60,rotate=270 plymouth=270

Reboot after each change and report the result.

Kind Regards,

2 Likes

Thank you @nerd, option A solved all problem. Now it’s all ok.

1 Like

I just got a raspberry pi 4 model b for christmas along with the waveshare 11.9. i have been following this post - [GUIDE] Waveshare 11.9"/7.9" HDMI LCD Display Configuration for Volumio 4

All i have been getting on the display is just a black screen.

Here is my userconfig.txt
GNU nano 7.2 userconfig.txt

Add your custom config.txt options to this file, which will be preserve>

dtoverlay=vc4-kms-v3d-pi4
max_framebuffer_height=1480
hdmi_group=2
hdmi_mode=87
hdmi_timings=320 0 80 16 32 1480 0 16 4 12 0 0 0 60 0 42000000 3

Touch Display rotation setting below: do not alter

display_lcd_rotate=1
display_hdmi_rotate=1

My cmdline.txt (at the end of the line)
use_kmsg=no video=HDMI-A-1:320x1480M@60,rotate=90 plymouth=90

My config.txt

DO NOT EDIT THIS FILE

APPLY CUSTOM PARAMETERS TO userconfig.txt

initramfs volumio.initrd
gpu_mem=128
gpu_mem_256=32
gpu_mem_512=32
gpu_mem_1024=128
max_usb_current=1
[pi5]
usb_max_current_enable=1
[all]
include volumioconfig.txt
include userconfig.txt

When I run the following commands, here are the outputs…

volumio@volumio:/boot$ 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

volumio@volumio:/boot$ cat /proc/cmdline | grep video
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 video=HDMI-A-1:320x1480M@60D numa=fake=2 system_heap.max_order=0 smsc95xx.macaddr=88:A2:9E:35:2E:C3 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=dafa3844-b779-48cd-9b4c-01ecfd09e0f4 imgfile=/volumio_current.sqsh bootpart=UUID=3B89-0B23 datapart=UUID=752d19ad-b702-471d-847a-f79ae83515d0 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=HDMI-A-1:320x1480M@60,rotate=90 plymouth=90

volumio@volumio:/boot$ vcgencmd get_config int | grep hdmi
config_hdmi_boost=5
display_hdmi_rotate=1
hdmi_force_cec_address:0=65535
hdmi_force_cec_address:1=65535
hdmi_force_hotplug:0=1
hdmi_group:0=2
hdmi_mode:0=87
hdmi_pixel_freq_limit:0=0x11e1a300
hdmi_pixel_freq_limit:1=0x11e1a300
volumio@volumio:/boot$ ls /sys/class/drm/
card0 card1-HDMI-A-1 card1-Writeback-1 version
card1 card1-HDMI-A-2 renderD128

i know that the output of fbset is incorrect, it should be outputting like "mode “1480x320"” but no matter what i try, I cannot get it to rotate.

When i reboot the pi, I don’t see any change on the screen it is back lit but black the whole time.

A this time, this is all I have connected to the pi, I have not connected the DAC yet. this is a base install that has only been connected to wifi and have ssh enabled via the /dev option. This is the downloaded img file from the volumio website I used.

Thanks in advance!

Hey @Jay_Calvert,

Your black screen issue has a specific cause visible in your /proc/cmdline output:

video=HDMI-A-1:320x1480M@60D

The ‘D’ suffix means DISABLED. The Raspberry Pi firmware is auto-generating this parameter and marking your display as disabled before your own video= parameter is even processed. Your parameter comes later in the line but the first one already disabled the output.

To investigate properly, I need the following via SSH:

  1. Exact Volumio version:
cat /etc/os-release | grep VOLUMIO
  1. Raw cmdline.txt content (not /proc/cmdline):
cat /boot/cmdline.txt
  1. Confirm your userconfig.txt:
cat /boot/userconfig.txt
  1. Log link from http://volumio.local/dev

When posting command output, please wrap it in triple backticks so the forum preserves formatting:

```
your command output here
```

This prevents the forum from stripping line breaks and lets me see exactly what you have.

Kind Regards,

I got it working, I didnt realize I had to install the touch screen plug in as well, once I installed that and then configured the rotation I was able to see the volumio interface on the screen. The problem I am having now is that the screen goes to sleep and won’t wake up on touch. still working on that one.
Thanks for your reply, much appreciate

@Jay_Calvert

the first set of options in Touch Display sets the timeout. click on the circle on the right with the exclamation mark to help orient yourself. this is what I set mine at.

1 Like

Thanks to @nerd for this post. The most complete I found so far.
But even with this I still having trouble to get my waveshare 11.9 to work. I had it working with a pi4 for almost 3 years now, but so far no luck with a pi5. The pi4 was Volumio 3, the pi5 I updated to Volumio 4.084.
The backlight is on, but the screen keeps blank.

Below are my configs.
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=b0b466fc-4556-43af-9f97-ebe56fe4abe4 imgfile=/volumio_current.sqsh bootpart=UUID=0428-C7E4 datapart=UUID=82051e0e-a859-4f54-aa9f-0cc23a932af8 uuidconfig=cmdline.txt rootwait bootdelay=7 logo.nologo vt.global_cursor_default=0 net.ifnames=0 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1 loglevel=0 nodebug use_kmsg=no cfg80211.ieee80211_regdom=DE video=HDMI-A-1:320x1480M@60,rotate=90 plymouth=90

userconfig

# Add your custom config.txt options to this file, which will be preserved during updates
max_framebuffer_height=1480
hdmi_group=2
hdmi_mode=87
hdmi_timings=320 0 80 16 32 1480 0 16 4 12 0 0 0 60 0 42000000 3

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

volumioconfig.txt

### DO NOT EDIT THIS FILE ###
### APPLY CUSTOM PARAMETERS TO userconfig.txt ###
[cm4]
dtoverlay=dwc2,dr_mode=host
otg_mode=1
[pi5]
dtoverlay=vc4-kms-v3d-pi5
# dtparam=uart0_console # Disabled by default
dtparam=nvme
dtparam=pciex1_gen=2
[all]
arm_64bit=0
dtparam=audio=on
audio_pwm_mode=2
dtparam=i2c_arm=on
disable_splash=1
hdmi_force_hotplug=1
force_eeprom_read=0
display_auto_detect=1

When I run the fbset command it look like the rotation is wrong. But I don’t see the reason.

volumio@vol-pi5:~$ 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

I purchased the display in Feb. 2023. Don’t know if the HDMI timings may changed in between.
Also don’t know how to debug.

So, if anyone has some hint’s, please respond.
Thanks.

Hey @vol-pi5,

Your userconfig.txt matches my guide for Pi 5 + 11.9" display exactly, and the cmdline.txt parameters are correct. However, there is one problem and several diagnostic questions before I can investigate further.

Problem: Pi Imager customisation was applied during flashing

Your cmdline.txt contains this parameter:

cfg80211.ieee80211_regdom=DE

This is not part of the Volumio image. It is injected by Raspberry Pi Imager when the OS Customisation dialog is used during flashing. The Volumio flashing guide explicitly states: do not apply any customisations or modifications when writing the image.

Reference: [Beginner's Guide]: Flashing Volumio OS to a microSD Card

The customiser may have altered system files beyond cmdline.txt that are not visible from the boot partition. This could be contributing to your blank screen, but I need diagnostic data to confirm.

Diagnostic information nedded:

  1. Kernel command line as seen by the system (this is the most important item - it shows firmware-injected parameters not visible in /boot/cmdline.txt):
cat /proc/cmdline
  1. DRM display connector state:
ls -la /sys/class/drm/
cat /sys/class/drm/card*-HDMI-A-*/status
  1. Which HDMI port is the display connected to? Port 0 is the one nearest to the USB-C power connector. Port 1 is the other one. The guide requires port 0.

  2. Is the Touch Display plugin installed? If yes, what is its status - enabled, active, or failed? The Touch Display plugin is required for the Volumio UI to appear on the local display. Without it, only console output is rendered.

  3. Log link from http://vol-pi5.local/dev

A previous user in this thread (@Jay_Calvert, post #5) had the identical fbset symptom - 320x1480 instead of 1480x320, black screen with backlight on. In that case, /proc/cmdline revealed the firmware had injected a conflicting video= parameter that disabled the display output before the user’s own parameter was processed. The /proc/cmdline output will confirm whether the same thing is happening here.

Kind Regards,

Hey @nerd ,
thanks for your quick reply.

Regarding the additional cmdline.txt parameter. This is very likely not added by the Imager. I flashed the image dowloaded from the homepage and I was not prompted to enter any data.
However, I run the raspi-config to set the region to Germany to get the Wifi to work as my router is using channel 13. This was done at a very late stage of all my tries. All my first tries were done without this parameter.

The diagnostic information:
1.

volumio@vol-pi5:~$ cat /proc/cmdline
reboot=w coherent_pool=1M 8250.nr_uarts=1 pci=pcie_bus_safe cgroup_disable=memory numa_policy=interleave nvme.max_host_mem_size_mb=0  numa=fake=8 system_heap.max_order=0 iommu_dma_numa_policy=interleave smsc95xx.macaddr=2C:CF:67:97:2A:E6 vc_mem.mem_base=0x3fc00000 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=ttyAMA10,115200 console=tty1 imgpart=UUID=b0b466fc-4556-43af-9f97-ebe56fe4abe4 imgfile=/volumio_current.sqsh bootpart=UUID=0428-C7E4 datapart=UUID=82051e0e-a859-4f54-aa9f-0cc23a932af8 uuidconfig=cmdline.txt rootwait bootdelay=7 logo.nologo vt.global_cursor_default=0 net.ifnames=0 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1 loglevel=0 nodebug use_kmsg=no cfg80211.ieee80211_regdom=DE video=HDMI-A-1:320x1480M@60,rotate=90 plymouth=90
volumio@vol-pi5:~$ ls -la /sys/class/drm/
total 0
drwxr-xr-x  2 root root    0 Jan  1  1970 .
drwxr-xr-x 71 root root    0 Jan  1  1970 ..
lrwxrwxrwx  1 root root    0 Jan  1  1970 card0 -> ../../devices/platform/axi/1002000000.v3d/drm/card0
lrwxrwxrwx  1 root root    0 Jan  1  1970 card1 -> ../../devices/platform/axi/axi:gpu/drm/card1
lrwxrwxrwx  1 root root    0 Jan  1  1970 card1-HDMI-A-1 -> ../../devices/platform/axi/axi:gpu/drm/card1/card1-HDMI-A-1
lrwxrwxrwx  1 root root    0 Jan  1  1970 card1-HDMI-A-2 -> ../../devices/platform/axi/axi:gpu/drm/card1/card1-HDMI-A-2
lrwxrwxrwx  1 root root    0 Jan  1  1970 card1-Writeback-1 -> ../../devices/platform/axi/axi:gpu/drm/card1/card1-Writeback-1
lrwxrwxrwx  1 root root    0 Jan  1  1970 card1-Writeback-2 -> ../../devices/platform/axi/axi:gpu/drm/card1/card1-Writeback-2
lrwxrwxrwx  1 root root    0 Jan  1  1970 renderD128 -> ../../devices/platform/axi/1002000000.v3d/drm/renderD128
-r--r--r--  1 root root 4096 Feb  9 20:18 version
volumio@vol-pi5:~$ cat /sys/class/drm/card*-HDMI-A-*/status
disconnected
disconnected

I had connected sometimes as well. But /enabled returned disabled in all cases.

This is the output of modes

volumio@vol-pi5:~$ cat /sys/class/drm/card*-HDMI-A-*/modes
1024x768
800x600
800x600
320x1480
848x480
640x480

It’s connected to Port 0 next to the USB-C power connector.

The plugin is installed. According to the UI it’s active.

Starting Live Log...
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 89
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
info: CALLMETHOD: system_controller system enableLiveLog true
info: CoreCommandRouter::executeOnPlugin: system , enableLiveLog
info: Launching a new LiveLog session
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 158
EDID block 0 (tag 0x00) checksum is invalid, remainder is 134
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 166
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 150
EDID block 0 (tag 0x00) checksum is invalid, remainder is 150
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 158
EDID block 0 (tag 0x00) checksum is invalid, remainder is 158
EDID block 0 (tag 0x00) checksum is invalid, remainder is 160
EDID block 0 (tag 0x00) checksum is invalid, remainder is 114
EDID block 0 (tag 0x00) checksum is invalid, remainder is 160
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 199
EDID block 0 (tag 0x00) checksum is invalid, remainder is 125
EDID block 0 (tag 0x00) checksum is invalid, remainder is 166
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID has corrupt header
EDID block 0 (tag 0x00) checksum is invalid, remainder is 160
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 166
EDID has corrupt header
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 158
EDID block 0 (tag 0x00) checksum is invalid, remainder is 86
EDID block 0 (tag 0x00) checksum is invalid, remainder is 150
EDID block 0 (tag 0x00) checksum is invalid, remainder is 125
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 180
EDID block 0 (tag 0x00) checksum is invalid, remainder is 150
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 161
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 160
EDID block 0 (tag 0x00) checksum is invalid, remainder is 158
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 158
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 150
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 160
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 158
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID has corrupt header
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID has corrupt header
vc4-drm axi:gpu: [drm] User-defined mode not supported: "320x1480": 60 39753 320 344 376 432 1480 1483 1493 1534 0x20 0x6
EDID block 0 (tag 0x00) checksum is invalid, remainder is 162
EDID block 0 (tag 0x00) checksum is invalid, remainder is 134
EDID block 0 (tag 0x00) checksum is invalid, remainder is 160

Kind regards.