I got a really cute 3.5″ TFT display for my RPi from Cytron which has an ADS7846 touchscreen controller.

After installing the drivers (by following the instructions here), I realised that the X/Y axes of the touchscreen were flipped.

It took me a while to figure this out, so I’m writing a blog entry as a documentation.


SSH has been disabled by default on a fresh RPi OS installation. To use the RPi in headless mode with SSH enabled, create an empty file in /boot/ssh. This can be done via another computer, e.g. on my Mac:

touch /Volumes/boot/ssh

After the RPi boots, connect it to a LAN cable, SSH to it (find its IP address via DHCP server leases table) and then run raspi-config to do some initial configuration.

raspi-config

Now install the LCD drivers.

To rotate the display so that the HDMI ports are on top. Edit /boot/config.txt:

dtoverlay=tft35a:rotate=270

Next, the touchscreen input will also have to be rotated accordingly. Edit /etc/X11/xorg.conf.d/99-calibration.conf:

Section "InputClass"
  Identifier "calibration"
  MatchProduct "ADS7846 Touchscreen"
  Driver "evdev" # Force the evdev driver
  Option "Calibration" "3936 227 268 3880" # Default values
  Option "SwapAxes" "1" # Required for landscape orientation 
  Option "InvertX" "true" # Required for rotate=270
  Option "InvertY" "true" # Required for rotate=270
EndSection