Open vitorio opened 9 months ago
Does this solve touchscreen issue?
I'm not using the touchscreen or a graphical desktop in my CM4 application, but I plugged it into a Raspberry Pi 400 running Bookworm with Wayland (not X11) to see.
By default, the display came up over HDMI, with the Wayland desktop, without me needing to set up the EDID as described above. It defaulted to portrait mode (HDMI port on the left as you look at the screen), and the "Screen Configuration" app did rotate the screen properly.
When I enabled SPI and added the touchscreen dtoverlay
from MPI4008-show to /boot/config.txt
, the touchscreen also worked as expected in the default portrait orientation. In other orientations, it behaved incorrectly; the X and Y axes appeared swapped and/or one of the axes was inverted.
$ sudo nano /boot/config.txt
dtparam=spi=on
dtoverlay=ads7846,cs=1,penirq=25,penirq_pull=2,speed=50000,keep_vref_on=0,swapxy=0,pmax=255,xohms=150,xmin=200,xmax=3900,ymin=200,ymax=3900
While the dtoverlay
allows for swapping the axes, it doesn't allow for inverting them, so if you're not running the screen in its default portrait orientation and need the touchscreen, perhaps it's better to leave the dtoverlay
as-is and do everything with calibration.
For a rotated screen with correct touchscreen, create a new udev
rule file for the touchscreen, set the libinput
calibration matrix to correct the issues, and reboot (the Raspberry Pi Wayfire compositor doesn't appear to apply the changes live even when udevadm
is reloaded and triggered).
$ sudo nano /etc/udev/rules.d/99-mpi4008-ads7846.rules
SUBSYSTEM=="input", KERNEL=="event[0-9]*", ATTRS{name}=="ADS7846 Touchscreen", ENV{LIBINPUT_CALIBRATION_MATRIX}="0 1 0 -1 0 1"
For a "right" rotation according to Screen Configuration (HDMI port on the bottom as you look at the screen), this matrix worked: 0 1 0 -1 0 1
(this is the example above)
For a "left" rotation (HDMI port on the top): 0 -1 1 1 0 0
For an "inverted" rotation (HDMI port on the right): -1 0 1 0 -1 1
This is incredibly interesting, thank you for taking the time to do this research. I am working on a few projects currently but I am very interested in trying your solution in the future.
This worked perfectly!
I've gotten the 4.0" HDMI Display (MPI4008) working on a CM4 with Raspberry Pi OS Bookworm over HDMI.
Get a copy of the display's EDID. You can use a tool like Monitor Asset Manager under Windows, or download a copy from https://edid.tv/edid/1665/ (both were identical for me). Create the
/usr/lib/firmware/edid
directory on your Bookworm installation if it doesn't already exist, then copy the EDID into it. Append the kernel commandline to load the EDID and set the video mode appropriately.After a reboot, the display flickers several times, but eventually displays the end of the startup scroll and the login prompt. (I do not see the four raspberries and the start of the scroll.) No other changes were necessary to get framebuffer output at the console.
Depending on your use case, rotation can be done with
panel_orientation
, e.g.video=HDMI-A-1:480x800@62,panel_orientation=left_side_up
; orrotate
, e.g.video=HDMI-A-1:480x800@62,rotate=90
(see https://www.kernel.org/doc/html/latest/fb/modedb.html for options).