Dear Volumionauts,
I’ve completed extensive research into portrait display rotation problems many Volumio users experience, particularly during boot and with Plymouth splash screens. This isn’t a Volumio bug - it’s a fundamental Linux kernel limitation.
The Core Problem
Linux DRM (Direct Rendering Manager) assumes all displays are landscape-oriented by default. When you have a portrait-native panel (like many touch displays with 320x1480, 720x1280, or 1080x1920 resolution), the kernel’s rotation logic breaks down.
Evidence across multiple hardware platforms
This issue affects:
- Waveshare portrait displays (all models)
- Raspberry Pi official 7" Display 2 (720x1280)
- Freescale i.MX6 ARM systems with portrait panels
- Generic embedded portrait LCDs
Multiple developer communities (Raspberry Pi Forums, NXP Community, Linux kernel developers) have documented identical behavior: rotation parameters produce unexpected or wrong orientations on portrait-native panels.
Why rotation values don’t work
When you set video=HDMI-A-1:rotate=90, the kernel calculates rotation FROM a landscape baseline. But portrait panels already start rotated. The math fails:
rotate=0may show 90 CCWrotate=90may show 90 CCWrotate=180may show 90 CWrotate=270may show 90 CCW
This inconsistency occurs because fbcon rotation values and video rotation values use different coordinate systems, and both assume landscape orientation.
Plymouth splash screen impact
Plymouth inherits the framebuffer state from the kernel. When the kernel provides a broken rotation state, Plymouth displays incorrectly. Additionally:
- Plymouth’s
Image.Text.Rotate()function exists and works for images - BUT: Rotated text suffers severe clipping on portrait displays
- Dynamic text (service messages) becomes unreadable when rotated 90/270 degrees
- This is documented in Plymouth’s portrait mode implementations
The device rotation workaround problem
Many users try device-level rotation (kernel parameters). This works for landscape displays but fails for portrait-native panels because the firmware and kernel disagree about the panel’s base orientation. The only “solution” some users find is disabling KMS acceleration entirely - which cripples graphics performance.
Behavior varies by Raspberry Pi model
Multiple users report:
- Rotation works on Pi 3 and Pi 4
- Same configuration fails on Pi 5
- This indicates firmware regression, not configuration error
Bottom line
If you have a portrait-native display and experience rotation issues during boot or with Plymouth:
- This is a known Linux kernel DRM architectural limitation
- It affects all portrait-native panels, not specific brands
- Plymouth cannot fix what the kernel provides incorrectly
- The issue exists across multiple embedded Linux platforms
This is not something Volumio can fix at the application level. The problem exists in the kernel’s fundamental assumptions about display orientation. Perhaps something will change in future, but today - “it is what it is”.
Kind Regards,
Research sources: Linux kernel DRM source code, Raspberry Pi developer forums, NXP embedded community, Plymouth freedesktop documentation, multiple cross-platform embedded Linux discussions
