From: Devarsh Thakkar <devarsht@ti.com>
To: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Thomas Zimmermann <tzimmermann@suse.de>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>, Nishanth Menon <nm@ti.com>,
Vignesh Raghavendra <vigneshr@ti.com>,
Tero Kristo <kristo@kernel.org>
Cc: <dri-devel@lists.freedesktop.org>, <devicetree@vger.kernel.org>,
<linux-kernel@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>, <devarsht@ti.com>,
LiangCheng Wang <zaq14760@gmail.com>
Subject: [PATCH v3 00/14] Add DRM driver for Solomon SSD16xx e-paper display controllers
Date: Tue, 20 Oct 2026 03:07:12 +0530 [thread overview]
Message-ID: <20261019213726.4145532-1-devarsht@ti.com> (raw)
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.
The driver is designed and architected keeping the bi-stable nature
and low-power requirements of epaper display based systems in mind
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
- Pixel format support: XRGB8888 (color path) and R1 (native 1bpp,
zero-copy path)
- 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 plane properties for refresh mode, colour
mode, and session control (clear-on-init/close/disable, init-refresh
waveform); rotation is set at probe time from a device tree property,
and border waveform uses a fixed per-panel default
Changes from v2 [6]:
Bindings:
- Rename the binding file to solomon,ssd1683.yaml to match an actual
compatible, and shape the compatible as oneOf so the SSD1677 patch
only adds a branch
- Reference panel-common.yaml and use the common 'rotation' property
instead of a local one that said "clockwise"
- Add spi-3wire and document that omitting dc-gpios selects 3-wire mode
Driver core (base patch):
- Keep lazy hardware initialization: ssd16xx_hw_init() is deferred to
crtc_atomic_enable(); probe() performs only a GPIO reset. Follows
the precedent of repaper.c and ssd130x.c
- Add drm_dev_enter()/drm_dev_exit() to plane_atomic_update
- Wrap the framebuffer read in drm_gem_fb_begin/end_cpu_access()
- Skip the update when drm_atomic_helper_damage_merged() reports no
damage instead of making up a full-screen rectangle
- Remove ssd16xx_crtc_atomic_flush() and last_fb; the orientation is
static so flush did a full hardware re-init and a second redraw on
every commit, and last_fb had no remaining users
- Use drm_crtc_cleanup() directly as the CRTC .destroy callback
- Call drm_atomic_helper_check_crtc_primary_plane() from CRTC
atomic_check
- Send SPI data from a DMA-safe buffer in struct ssd16xx_device
instead of the stack
- Read XRGB8888 pixels with le32_to_cpup()
- Size the transfer buffers per row, as the packing code does
- Make Kconfig depend on MMU
- GDEY042T81: use the HIZ border waveform for updates and do not
refresh the border on every update, to avoid border flicker
Session management (clear_on_init/close/disable):
- Split display_cleared_on_deinit into cleared_on_disable and
cleared_on_close. A single flag made a clear on disable suppress
the clear on close and was never re-armed on re-enable
- Reset the RAM window before clearing and size the clear buffer per
row
- In 3-colour mode clear the red RAM to 0x00 (no red) instead of
writing the all-white buffer to it, which would paint the panel red
Power management:
- Check for damage before taking the runtime PM reference, so the
panel is not woken up when there is nothing to draw
- Put the panel to sleep in remove() with pm_runtime_force_suspend(),
independent of clear_on_disable
- Return the error from pm_runtime_force_suspend() in system suspend
- Do not clear ->initialized again in system resume; force_resume()
already re-initializes the hardware
- Do not fail runtime suspend if the deep sleep command fails, as
that would block all later resumes
Plane properties:
- Reject 3-color mode together with partial refresh in the plane
atomic_check, as partial refresh does not update the red channel
- Only create the color_mode property on panels with a red plane
instead of exposing a property with a single possible value
- Add a mutex serializing the session state and panel access between
atomic commits and master_set()/master_drop(); master_drop() can
run concurrently with a nonblocking commit (e.g. on DROP_MASTER)
and both drive the SPI bus with the same transfer buffers
- Sync the session properties from the new plane state in
atomic_enable as well, since it runs before plane_atomic_update
and used the values of the previous commit
MAINTAINERS / platform integration:
- Follow the rename of the binding file to solomon,ssd1683.yaml
- Add the GDEY042T81 EVM overlay to the MAINTAINERS file list
- Drop PixPaper reference from the MAINTAINERS commit message (not
in v3)
- DTS overlay: fix the BUSY pin name in the comments (pad 0x00b8 is
GPMC0_CLK, not GPMC0_AD0), use GPIO_ACTIVE_HIGH for the fet-sel
gpio-hog, fix SPDX separator to uppercase OR per SPDX-2.1, mark
[DO_NOT_MERGE] (for driver review context only)
Changes from v1[0]:
- Restructured into 14 modular patches covering bindings, driver core,
features, and platform integration (was 6 patches in v1)
- Added comprehensive device-tree bindings support for vendor prefixes
and SSD16xx controller configurations
- Refactored driver architecture from drm/tiny panel driver to drm/solomon
bridge driver
- Switch to using GEM_SHMEM helpers
- Refactored data entry mode implementation
- Removed runtime-configurable rotation/border-waveform DRM properties and
their module params; rotation is now set via device tree, and border
waveform now uses an enhanced fixed per-panel default
- Added support for Solomon SSD1677 controller variant
- Improved session management with plane properties
- Added comprehensive power management support
- Support for panels with reversed RAM X order
- Dropped RGB888, RGB565, R8, NV12, NV16, YUYV, and UYVY format support;
driver now only exposes XRGB8888 and R1
[0]: [V1 patch series]
https://lore.kernel.org/all/20260430183311.2978142-1-devarsht@ti.com/
[1]: [Development Branch]
https://github.com/devarsht/linux-next/tree/epaper_v3_final_4
[2]: [Test Suite]
https://github.com/devarsht/linux-next/tree/epaper_v3_final_4/tests_27sept_new8
[3]: [Test Logs]
https://github.com/devarsht/linux-next/tree/epaper_v3_final_4/tests_27sept_new8/logs
[4]: [Test Results]
https://github.com/devarsht/linux-next/tree/epaper_v3_final_4/tests_27sept_new8/results
[5]: [Result Summary]
https://github.com/devarsht/linux-next/blob/epaper_v3_final_4/tests_27sept_new8/results/run_all*.summary
[6]: [V2 Patch]
https://lore.kernel.org/all/20260927182329.4193961-1-devarsht@ti.com/
Devarsh Thakkar (13):
dt-bindings: vendor-prefixes: Add Dalian Good Display Co., Ltd.
dt-bindings: display: Add Solomon SSD16xx e-paper controller
dt-bindings: display: solomon,ssd16xx: Add Solomon SSD1677 controller
drm/solomon: Add DRM driver for Solomon SSD16xx e-paper display
controllers
drm/solomon: ssd16xx: Add clear_on_init/close/disable session
management
drm/solomon: ssd16xx: Add support for Solomon SSD1677 controller
drm/solomon: ssd16xx: Add power management support
drm/solomon: ssd16xx: Expose refresh mode as plane property
drm/solomon: ssd16xx: Expose color mode as plane property
drm/solomon: ssd16xx: Expose session management as plane properties
MAINTAINERS: Add entry for Solomon SSD16xx DRM driver
arm64: defconfig: Enable DRM_SSD16XX for AM62L3 EVM
arm64: dts: ti: [DO_NOT_MERGE] Add AM62L3 EVM overlay for GDEY042T81
e-paper display
LiangCheng Wang (1):
drm/solomon: ssd16xx: support panels whose RAM X order is reversed
.../bindings/display/solomon,ssd1683.yaml | 86 +
.../devicetree/bindings/vendor-prefixes.yaml | 2 +
MAINTAINERS | 9 +
arch/arm64/boot/dts/ti/Makefile | 6 +
.../ti/k3-am62l3-evm-epaper-gdey042t81.dtso | 96 +
arch/arm64/configs/defconfig | 1 +
drivers/gpu/drm/solomon/Kconfig | 13 +
drivers/gpu/drm/solomon/Makefile | 1 +
drivers/gpu/drm/solomon/ssd16xx.c | 2659 +++++++++++++++++
9 files changed, 2873 insertions(+)
create mode 100644 Documentation/devicetree/bindings/display/solomon,ssd1683.yaml
create mode 100644 arch/arm64/boot/dts/ti/k3-am62l3-evm-epaper-gdey042t81.dtso
create mode 100644 drivers/gpu/drm/solomon/ssd16xx.c
--
2.39.1
next reply other threads:[~2026-10-19 21:38 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-19 21:37 Devarsh Thakkar [this message]
2026-10-19 21:37 ` [PATCH v3 01/14] dt-bindings: vendor-prefixes: Add Dalian Good Display Co., Ltd Devarsh Thakkar
2026-10-19 21:37 ` [PATCH v3 02/14] dt-bindings: display: Add Solomon SSD16xx e-paper controller Devarsh Thakkar
2026-10-20 8:34 ` Krzysztof Kozlowski
2026-10-19 21:37 ` [PATCH v3 03/14] dt-bindings: display: solomon,ssd16xx: Add Solomon SSD1677 controller Devarsh Thakkar
2026-10-19 21:37 ` [PATCH v3 03/14] dt-bindings: display: solomon, ssd16xx: " Devarsh Thakkar
2026-10-19 21:44 ` [PATCH v3 03/14] dt-bindings: display: solomon,ssd16xx: " sashiko-bot
2026-10-19 21:37 ` [PATCH v3 04/14] drm/solomon: Add DRM driver for Solomon SSD16xx e-paper display controllers Devarsh Thakkar
2026-10-19 22:02 ` sashiko-bot
2026-10-19 21:37 ` [PATCH v3 05/14] drm/solomon: ssd16xx: Add clear_on_init/close/disable session management Devarsh Thakkar
2026-10-19 21:59 ` sashiko-bot
2026-10-19 21:37 ` [PATCH v3 06/14] drm/solomon: ssd16xx: Add support for Solomon SSD1677 controller Devarsh Thakkar
2026-10-19 21:37 ` [PATCH v3 07/14] drm/solomon: ssd16xx: Add power management support Devarsh Thakkar
2026-10-19 21:57 ` sashiko-bot
2026-10-19 21:37 ` [PATCH v3 08/14] drm/solomon: ssd16xx: Expose refresh mode as plane property Devarsh Thakkar
2026-10-19 22:02 ` sashiko-bot
2026-10-19 21:37 ` [PATCH v3 09/14] drm/solomon: ssd16xx: Expose color " Devarsh Thakkar
2026-10-19 21:52 ` sashiko-bot
2026-10-19 21:37 ` [PATCH v3 10/14] drm/solomon: ssd16xx: Expose session management as plane properties Devarsh Thakkar
2026-10-19 21:58 ` sashiko-bot
2026-10-20 10:32 ` Markus Elfring
2026-10-19 21:37 ` [PATCH v3 11/14] drm/solomon: ssd16xx: support panels whose RAM X order is reversed Devarsh Thakkar
2026-10-19 21:37 ` [PATCH v3 12/14] MAINTAINERS: Add entry for Solomon SSD16xx DRM driver Devarsh Thakkar
2026-10-19 21:37 ` [PATCH v3 13/14] arm64: defconfig: Enable DRM_SSD16XX for AM62L3 EVM Devarsh Thakkar
2026-10-19 21:37 ` [PATCH v3 14/14] arm64: dts: ti: [DO_NOT_MERGE] Add AM62L3 EVM overlay for GDEY042T81 e-paper display Devarsh Thakkar
2026-10-19 21:59 ` sashiko-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261019213726.4145532-1-devarsht@ti.com \
--to=devarsht@ti.com \
--cc=airlied@gmail.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=kristo@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=nm@ti.com \
--cc=robh@kernel.org \
--cc=simona@ffwll.ch \
--cc=tzimmermann@suse.de \
--cc=vigneshr@ti.com \
--cc=zaq14760@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.