[PATCH 0/6] Add DRM driver for Solomon SSD16xx e-paper display controllers

Devarsh Thakkar
2026-04-30T18:33:42Z

This series adds a DRM driver for the Solomon Systech SSD16xx family of
e-paper display controllers (SSD1673, SSD1680, SSD1681, SSD1683), starting
with support for the Gooddisplay GDEY042T81, a 4.2" 400×300 black-and-white
e-paper panel driven by the SSD1683 controller.

E-paper displays are bistable: they retain the last image indefinitely
without power, making them well-suited for applications where display
content changes infrequently — dashboards, e-labels, signage, e-readers
and e-badges and low-power IoT interfaces. The driver is designed
and architected keeping this bi-stable nature and low-power requirements
along with having adequate flexibility to support varying use-case
requirements for the e-paper display use-cases.

The driver integrates with the DRM atomic modesetting framework and
supports:

- SPI communication in both 4-wire mode (separate D/C GPIO) and
3-wire mode (9-bit SPI with embedded D/C# bit)
- Full 4-way rotation via the Data Entry Mode register, with no GPU
or memory-copy overhead
- Three independently selectable refresh waveforms: partial (~300–500 ms),
full (~1.5–2 s), and fast (~1.0–1.5 s)
- 3-colour BWR pixel classification for panels with a red RAM plane
- Broad pixel format coverage: XRGB8888, RGB888, RGB565, R8, NV12,
NV16, YUYV, UYVY, R1 (native 1bpp)
- Runtime PM with configurable autosuspend: the controller enters
Mode 1 deep sleep (RAM retained) after an idle timeout, waking
transparently on the next frame update
- System suspend/resume: switches to Mode 2 deep sleep (maximum
power savings) on system suspend and rebuilds the pipeline on resume
- Runtime-configurable DRM connector properties for refresh mode,
rotation, border waveform, clear-on-init/close/disable, colour mode,
and init-refresh waveform, each with a corresponding module parameter
for boot-time or sysfs configuration

Tested on AM62L3 EVM using Gooddisplay GDEY042T81 using following branch
and test suite:

Test suite:
https://github.com/devarsht/linux-next/tree/drm_ssd16xx_epaper/ssd16xx_tests
Test scripts:
https://github.com/devarsht/linux-next/blob/drm_ssd16xx_epaper/ssd16xx_tests/run_all_tests.sh (parent script)
https://github.com/devarsht/linux-next/blob/drm_ssd16xx_epaper/ssd16xx_tests/test*.sh (Individual test scripts)

Testi console logs and summary:
https://github.com/devarsht/linux-next/blob/drm_ssd16xx_epaper/ssd16xx_tests/logs.txt
https://github.com/devarsht/linux-next/blob/drm_ssd16xx_epaper/ssd16xx_tests/results/run_all_20260430_224250.summary

Individual test results:

Supported Pixel Formats tests:
https://github.com/devarsht/linux-next/blob/drm_ssd16xx_epaper/ssd16xx_tests/results/test_formats
Integration (Misc) tests:
https://github.com/devarsht/linux-next/blob/drm_ssd16xx_epaper/ssd16xx_tests/results/test_integration_20260430_223910.result
https://github.com/devarsht/linux-next/blob/drm_ssd16xx_epaper/ssd16xx_tests/results/test_integration_20260430_225207.result
Module params tests:
https://github.com/devarsht/linux-next/blob/drm_ssd16xx_epaper/ssd16xx_tests/results/test_module_params_20260430_224700.result
PM Automated tests:
https://github.com/devarsht/linux-next/blob/drm_ssd16xx_epaper/ssd16xx_tests/results/test_pm_20260430_225028.result
DRM properties tests:
https://github.com/devarsht/linux-next/blob/drm_ssd16xx_epaper/ssd16xx_tests/results/test_properties_20260430_224329.result

Devarsh Thakkar (6):
dt-bindings: vendor-prefixes: Add Dalian Good Display Co., Ltd.
dt-bindings/display: Add Solomon SSD16xx e-paper controller binding
drm/tiny: Add DRM driver for Solomon SSD16xx e-paper display
controllers
drm/tiny: panel-ssd16xx: Add power management support
MAINTAINERS: Add entry for Solomon SSD16xx DRM driver
arm64: defconfig: Enable DRM_PANEL_SSD16XX

.../bindings/display/solomon,ssd16xx.yaml | 81 +
.../devicetree/bindings/vendor-prefixes.yaml | 2 +
MAINTAINERS | 7 +
arch/arm64/configs/defconfig | 1 +
drivers/gpu/drm/tiny/Kconfig | 13 +
drivers/gpu/drm/tiny/Makefile | 1 +
drivers/gpu/drm/tiny/panel-ssd16xx.c | 2731 +++++++++++++++++
7 files changed, 2836 insertions(+)
create mode 100644 Documentation/devicetree/bindings/display/solomon,ssd16xx.yaml
create mode 100644 drivers/gpu/drm/tiny/panel-ssd16xx.c

--
2.39.1