This series adds a new drm/tiny driver and matching dt-binding for the RAiO RA8875 SPI display controller. An fbtft driver for this chip currently exists at drivers/staging/fbtft/fb_ra8875.c, but fbtft is a legacy fbdev-based staging driver, and nothing in mainline DRM currently supports this controller.
This driver does not use drm_mipi_dbi. The RA8875 SPI protocol is structurally incompatible with both Type C options drm_mipi_dbi supports. Type C1 encodes command/data as a 9th bit within a 9-bit SPI word. The RA8875 uses a full prefix byte (0x80 = command write, 0x00 = data write, 0x40 = data read, 0xC0 = status read) sent as a separate 8-bit transaction. These are not the same thing and cannot be mapped to each other. Type C3 models two transfer types via a D/CX GPIO. The RA8875 has four transfer cycle types and no D/CX pin. More critically, the GRAM write path is stateful: an MRWC register-address transaction followed by a streaming pixel pump under a single CS assertion. I thought this may be too complicated to cater towards, but please let me know if this is the correct approach. My ER-TFTM050-3 board has RST tied NC, and VDD is a fixed supply set via an on-board solder jumper (3.3V/5V) rather than software-controllable, so reset-gpios/vcc-supply are not implemented in either the driver or the binding. I can add both as optional properties in v2 if reviewers know of RA8875 boards that do need this. Tested on a Raspberry Pi 3B connected over SPI to an East Rising ER-TFTM050-3, a 5" 800x480 panel driven by the RA8875. Ran fbtest (https://git.kernel.org/pub/scm/linux/kernel/git/geert/fbtest.git) against the resulting framebuffer: ./fbtest -f /dev/fb1 Using drawops cfb16 (16 bpp packed pixels) Available visuals: Monochrome Grayscale 32 Truecolor 5:6:5:0 Using visops truecolor Running all tests test001: PASSED test002: PASSED test003: PASSED test004: PASSED test005: PASSED test006: PASSED test008: PASSED test009: PASSED test010: PASSED Benchmarking... 10x10 squares: 74.24 Mpixels/s Benchmarking... 20x20 squares: 152.49 Mpixels/s Benchmarking... 50x50 squares: 334.09 Mpixels/s Benchmarking... 100x100 squares: 591.46 Mpixels/s Benchmarking... 200x200 squares: 999.49 Mpixels/s test012: PASSED Benchmarking... R5 circles: 45.90 Mpixels/s Benchmarking... R10 circles: 98.84 Mpixels/s Benchmarking... R25 circles: 236.37 Mpixels/s Benchmarking... R50 circles: 459.98 Mpixels/s Benchmarking... R100 circles: 851.43 Mpixels/s test013: PASSED Adam Azuddin (2): dt-bindings: display: panel: Add RAiO RA8875 display controller drm/tiny: Add RAiO RA8875 display controller driver .../bindings/display/panel/raio,ra8875.yaml | 66 ++ .../devicetree/bindings/vendor-prefixes.yaml | 2 + MAINTAINERS | 6 + drivers/gpu/drm/tiny/Kconfig | 13 + drivers/gpu/drm/tiny/Makefile | 1 + drivers/gpu/drm/tiny/ra8875.c | 739 ++++++++++++++++++ 6 files changed, 827 insertions(+) create mode 100644 Documentation/devicetree/bindings/display/panel/raio,ra8875.yaml create mode 100644 drivers/gpu/drm/tiny/ra8875.c -- 2.55.0
