Skip to content

VC4 display support

Eric Anholt edited this page Oct 31, 2018 · 10 revisions

HDMI

HDMI display output is supported. HDMI audio support requires kernel 4.12, and a current alsalib installation. CEC is supported through the standard kernel CEC interface. Standard infoframes (AVI, SPD) are exposed.

The HDMI block is never fully powered down, due to CEC requirements. The HDMI PHY and pixel clock are automatically power managed.

TV underscan compensation is not currently supported. The current workaround is to ensure that the TV's underscan mode is disabled (which also improves image quality).

Tuning PLLH frequency to avoid skew against audio clocks is not currently supported.

DSI

Raspberry Pi supports only the official DSI panel. While DSI is a standard, connectors are not standard, and this panel is the only one with appropriate cabling.

DSI is supported in the downstream 4.9 tree. In the downstream 4.14 tree it is currently broken, but work is in progress to fix things.

In the upstream tree, DSI is in place but no overlays are included. An working DT can be found on a branch, though it will cause the vc4 driver to fail to load if the DSI panel isn't attached. Note that this requires:

ignore_lcd=1                 # Don't display anything at startup.
disable_touchscreen=1        # Don't mess with the I2C line

Eventually, we should include a native touchscreen driver on our i2c-gpio node. There's a linux driver for the touchscreen controller, we just need a few changes.

If you're interested in attaching a custom DSI panel, see this page

DPI

DPI is fully supported, including power management. Each panel needs individual support in the kernel, since panels typically have custom backlight control or power lines.

One panel, the Adafruit 7" DPI panel, is supported in the upstream tree. It can be enabled with a patch to the device tree, as in this commit

VEC (Composite TV out)

TV out is fully supported.

SPI-attached panels

SPI panels are generally supported by the tinydrm driver. To use vc4 to perform accelerated rendering to tinydrm, you need the kmsro driver in Mesa, with your particular tinydrm driver added to its list.

The SPI panels are slow because

  • SPI itself often can't move the pixels fast enough
  • We have to do format conversions from RGB565 or XRGB8888 to the SPI bus format (RGB565 byte-swapped).
  • The format conversions read from uncached memory using the CPU.

We could potentially use vc4 rendering to offload the format conversions. We've done similar things in Mesa for SAND format, but this would be a complicated piece of work. If we did that, we could maybe use the DMA engine to avoid the uncached reads on the CPU.