Skip to content

Raspberry Pi and other MIPI DSI display panels

Eric Anholt edited this page May 7, 2018 · 5 revisions

The VC4 driver should have complete support for DSI display panels on the DSI1 device (the DISPLAY connector on the board). Each lane of DSI can run at up to 1Ghz (bit clock). It has currently only been tested for single-lane DSI, but all of the code should be present for multi-lane to work (normal Pi boards route two lanes to the DSI1 connector, and the Compute Module gives 4 lanes to DSI1 and 2 to DSI0). Some of the necessary code is present for DSI0 (the other display connector on a Compute Module), but it has never been tested due to lack of displays to connect to it. If you want to hook up some arbitrary panel you find to a Raspberry Pi, there will be two main hurdles:

  • Wiring up the panel to the Raspberry Pi
  • Building a DSI panel driver

Distribution setup

Add the following line to /boot/config.txt

ignore_lcd=1

Otherwise, the firmware may steal the interrupts and you'll get DSI transfer timeouts.

Wiring

DSI display connectors are not standardized. You'll need to look at the schematics for the board and wire it all up yourself.

Building a DSI panel driver in Linux

The driver will consist of at least a mode line (that you'll find in your panel's specification sheet), probably some sort of reset and voltage control (possibly using a GPIO input from the Pi's header to control it?) and backlight (maybe taking a PWM input from RPi pins, or maybe using some DSI command to a microcontroller on the panel that controls a PWM), and also likely some other DSI commands during enabling.

If you only need voltage and a mode line, then take a look at the other DSI panels in panel-simple.c.

If you also need DSI commands, take a look at a driver like panel-raydium-rm68200.c as a starting point.

If you also have a bridge chip (like the I2C-controlled DSI-DPI bridge in the official Raspberry Pi 7" Touchscreen), then take a look at the panel-raspberrypi-touchscreen.c for an example: You attach your driver to the I2C bus, and then create a DSI device from there which gets attached to vc4_dsi.c.

You will also need to add the panel to your device tree. This part is up to you, though there are non-RPi device trees in the kernel you can look at for how DSI panels get represented. Take a look at drm-vc4-misc branch for DT for the panel-raspberrypi-touchscreen case.

You can’t perform that action at this time.