I have been testing out some of the popular LCD displays of different sizes & display controllers (ST7789V and ILI9341), and have run into a few issues that may be of interest to others.
Under Zephyr, the display orientation function for the ST7789V displays is not currently implemented. Only a stub exists in the driver. However, ILI9341 displays (Adafruit, Waveshare, etc) do support display rotation in the hardware and come in lots of different sizes and higher resolutions.
The display orientation function in the current Zephyr driver for the ILI9XXX displays works provided you maintain the set display mode (i.e. portrait or landscape). However, if you rotate the display area from portrait to landscape or vice versa, the ili9xxx_set_orientation
() function in display_ili9xxx.c
driver file doesn’t update the display area after rotation, i.e. portrait to landscape switch doesn’t work properly.
Other ILI9341 drivers (e.g. Adafruit IL9341 in the Arduino Framework) handle rotation correctly.
I have patched the driver for my projects but I have raised a bug report with Zephyr-RTOS folks, so hopefully we’ll have a proper fix.
To my surprise, I also found that the ILI9341 driver worked on ST7789V displays 1.14" 135x240 (RGB) IPS and
Waveshare 240x240 IPS`. The former displays are quite inexpensive & excellent displays at only ~CAD$3, Waveshare sells for ~CAD$10.
These ST7789V displays have a CS (Chip Select) pin and may well have a controller that is similar the ILI9XXX controller. I’m in the process of reviewing the ST7789V & ILI9XXX datasheets, so will have a better insight later.