* [PATCH 3/3] dt-bindings: display: Add MAYQUEEN PIXPAPER e-ink panel
2025-06-18 3:37 [PATCH 0/3] drm/tiny: Add MAYQUEEN PIXPAPER e-ink panel support LiangCheng Wang
@ 2025-06-18 3:37 ` LiangCheng Wang
2025-06-19 15:43 ` Conor Dooley
0 siblings, 1 reply; 16+ messages in thread
From: LiangCheng Wang @ 2025-06-18 3:37 UTC (permalink / raw)
To: cip-dev; +Cc: drm, devicetree, noralf, robh+dt, krzk, zaq14760, onlywig
The binding is for the MAYQUEEN PIXPAPER e-ink display panel,
controlled via an SPI interface.
Signed-off-by: LiangCheng Wang <zaq14760@gmail.com>
---
.../bindings/display/mayqueen,pixpaper.yaml | 67 +++++++++++++++++++
1 file changed, 67 insertions(+)
create mode 100644 Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml
diff --git a/Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml b/Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml
new file mode 100644
index 000000000..f7c33957e
--- /dev/null
+++ b/Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml
@@ -0,0 +1,67 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/display/mayqueen,pixpaper.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MAYQUEEN PIXPAPER e-ink display panel
+
+maintainers:
+ - LC Wang <zaq14760@gmail.com>
+
+description: |
+ The PIXPAPER is an e-ink display panel controlled via an SPI interface.
+ The panel has a resolution of 122x250 pixels and requires GPIO pins for
+ reset, busy, and data/command control.
+
+allOf:
+ - $ref: /schemas/spi/spi-peripheral-props.yaml#
+
+properties:
+ compatible:
+ const: mayqueen,pixpaper
+
+ reg:
+ maxItems: 1
+ description: SPI chip select number for the device.
+
+ spi-max-frequency:
+ default: 1000000
+ description: Maximum SPI clock frequency in Hz.
+
+ reset-gpios:
+ maxItems: 1
+ description: GPIO for the panel reset pin.
+
+ busy-gpios:
+ maxItems: 1
+ description: GPIO for the panel busy pin.
+
+ dc-gpios:
+ maxItems: 1
+ description: GPIO for the data/command pin.
+
+required:
+ - compatible
+ - reg
+ - reset-gpios
+ - busy-gpios
+ - dc-gpios
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/gpio/gpio.h>
+ spi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ display@0 {
+ compatible = "mayqueen,pixpaper";
+ reg = <0>;
+ spi-max-frequency = <1000000>;
+ reset-gpios = <&gpio1 17 GPIO_ACTIVE_HIGH>;
+ busy-gpios = <&gpio1 18 GPIO_ACTIVE_HIGH>;
+ dc-gpios = <&gpio1 19 GPIO_ACTIVE_HIGH>;
+ };
+ };
--
2.34.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 0/3] drm/tiny: Add MAYQUEEN PIXPAPER e-ink panel support
@ 2025-06-18 3:49 LiangCheng Wang
2025-06-18 3:49 ` [PATCH 1/3] dt-bindings: vendor-prefixes: Add Mayqueen name LiangCheng Wang
` (3 more replies)
0 siblings, 4 replies; 16+ messages in thread
From: LiangCheng Wang @ 2025-06-18 3:49 UTC (permalink / raw)
To: cip-dev; +Cc: drm, devicetree, noralf, robh+dt, krzk, zaq14760, onlywig
This series adds support for the MAYQUEEN PIXPAPER e-ink panel
(122x250 pixels, SPI-controlled) to the tiny drm subsystem.
Patches (must be applied in order due to dependencies):
Patch 1/3: Adds 'mayqueen' vendor prefix.
Patch 2/3: Implements PIXPAPER tiny drm driver.
Patch 3/3: Adds PIXPAPER device tree bindings.
Tested on PIXPAPER hardware with linux-5.10.y-cip,
verifying display initialization and refresh.
All patches pass checkpatch.pl.
Signed-off-by: Wig Cheng <onlywig@gmail.com>
Signed-off-by: LiangCheng Wang <zaq14760@gmail.com>
--
LiangCheng Wang (2):
drm: tiny: Add support for PIXPAPER e-ink panel
dt-bindings: display: Add MAYQUEEN PIXPAPER e-ink panel
Wig Cheng (1):
dt-bindings: vendor-prefixes: Add Mayqueen name
.../bindings/display/mayqueen,pixpaper.yaml | 67 ++
.../devicetree/bindings/vendor-prefixes.yaml | 2 +
MAINTAINERS | 6 +
drivers/gpu/drm/tiny/Kconfig | 11 +
drivers/gpu/drm/tiny/Makefile | 1 +
drivers/gpu/drm/tiny/pixpaper.c | 716 ++++++++++++++++++
6 files changed, 803 insertions(+)
create mode 100644 Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml
create mode 100644 drivers/gpu/drm/tiny/pixpaper.c
--
2.34.1
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 1/3] dt-bindings: vendor-prefixes: Add Mayqueen name
2025-06-18 3:49 [PATCH 0/3] drm/tiny: Add MAYQUEEN PIXPAPER e-ink panel support LiangCheng Wang
@ 2025-06-18 3:49 ` LiangCheng Wang
2025-06-18 3:49 ` [PATCH 2/3] drm: tiny: Add support for PIXPAPER e-ink panel LiangCheng Wang
` (2 subsequent siblings)
3 siblings, 0 replies; 16+ messages in thread
From: LiangCheng Wang @ 2025-06-18 3:49 UTC (permalink / raw)
To: cip-dev; +Cc: drm, devicetree, noralf, robh+dt, krzk, zaq14760, onlywig
From: Wig Cheng <onlywig@gmail.com>
Mayqueen is a Taiwan-based company primarily focused on the development
of arm64 development boards and e-paper displays.
Signed-off-by: Wig Cheng <onlywig@gmail.com>
---
Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml
index 2735be1a8..8434ae355 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.yaml
+++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml
@@ -631,6 +631,8 @@ patternProperties:
description: MaxBotix Inc.
"^maxim,.*":
description: Maxim Integrated Products
+ "^mayqueen,.*":
+ description: Mayqueen Technologies Ltd.
"^mbvl,.*":
description: Mobiveil Inc.
"^mcube,.*":
--
2.34.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 2/3] drm: tiny: Add support for PIXPAPER e-ink panel
2025-06-18 3:49 [PATCH 0/3] drm/tiny: Add MAYQUEEN PIXPAPER e-ink panel support LiangCheng Wang
2025-06-18 3:49 ` [PATCH 1/3] dt-bindings: vendor-prefixes: Add Mayqueen name LiangCheng Wang
@ 2025-06-18 3:49 ` LiangCheng Wang
2025-06-18 3:49 ` [PATCH 3/3] dt-bindings: display: Add MAYQUEEN " LiangCheng Wang
2025-06-18 6:14 ` [PATCH 0/3] drm/tiny: Add MAYQUEEN PIXPAPER e-ink panel support Krzysztof Kozlowski
3 siblings, 0 replies; 16+ messages in thread
From: LiangCheng Wang @ 2025-06-18 3:49 UTC (permalink / raw)
To: cip-dev; +Cc: drm, devicetree, noralf, robh+dt, krzk, zaq14760, onlywig
Introduce a DRM driver for the PIXPAPER e-ink display panel, which is
controlled via SPI. The driver supports a 122x250 resolution display with
XRGB8888 format, using the DRM simple KMS helper framework.
Signed-off-by: LiangCheng Wang <zaq14760@gmail.com>
---
MAINTAINERS | 6 +
drivers/gpu/drm/tiny/Kconfig | 11 +
drivers/gpu/drm/tiny/Makefile | 1 +
drivers/gpu/drm/tiny/pixpaper.c | 716 ++++++++++++++++++++++++++++++++
4 files changed, 734 insertions(+)
create mode 100644 drivers/gpu/drm/tiny/pixpaper.c
diff --git a/MAINTAINERS b/MAINTAINERS
index 66c628761..aac32556a 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -5534,6 +5534,12 @@ S: Orphan / Obsolete
F: drivers/gpu/drm/i810/
F: include/uapi/drm/i810_drm.h
+DRM DRIVER FOR PIXPAPER E-INK PANEL
+M: LiangCheng Wang <zaq14760@gmail.com>
+S: Maintained
+F: Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml
+F: drivers/gpu/drm/tiny/pixpaper.c
+
DRM DRIVER FOR LVDS PANELS
M: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
L: dri-devel@lists.freedesktop.org
diff --git a/drivers/gpu/drm/tiny/Kconfig b/drivers/gpu/drm/tiny/Kconfig
index 2b6414f0f..922753489 100644
--- a/drivers/gpu/drm/tiny/Kconfig
+++ b/drivers/gpu/drm/tiny/Kconfig
@@ -131,3 +131,14 @@ config TINYDRM_ST7735R
* Okaya RH128128T 1.44" 128x128 TFT
If M is selected the module will be called st7735r.
+
+config DRM_PIXPAPER
+ tristate "DRM support for PIXPAPER display panels"
+ depends on DRM && SPI
+ select DRM_KMS_HELPER
+ select DRM_KMS_CMA_HELPER
+ help
+ DRM driver for the following PIXPAPER panels
+
+ If M is selected the module will be called pixpaper .
+
diff --git a/drivers/gpu/drm/tiny/Makefile b/drivers/gpu/drm/tiny/Makefile
index 6ae4e9e5a..4b9e473ba 100644
--- a/drivers/gpu/drm/tiny/Makefile
+++ b/drivers/gpu/drm/tiny/Makefile
@@ -10,3 +10,4 @@ obj-$(CONFIG_TINYDRM_MI0283QT) += mi0283qt.o
obj-$(CONFIG_TINYDRM_REPAPER) += repaper.o
obj-$(CONFIG_TINYDRM_ST7586) += st7586.o
obj-$(CONFIG_TINYDRM_ST7735R) += st7735r.o
+obj-$(CONFIG_DRM_PIXPAPER) += pixpaper.o
diff --git a/drivers/gpu/drm/tiny/pixpaper.c b/drivers/gpu/drm/tiny/pixpaper.c
new file mode 100644
index 000000000..f6081cf96
--- /dev/null
+++ b/drivers/gpu/drm/tiny/pixpaper.c
@@ -0,0 +1,716 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * DRM driver for PIXPAPER e-ink panel
+ *
+ * Author: LC Wang <zaq14760@gmail.com>,
+ */
+
+#include <linux/dma-buf.h>
+#include <linux/module.h>
+#include <linux/spi/spi.h>
+#include <linux/gpio/consumer.h>
+#include <drm/drm_drv.h>
+#include <drm/drm_fb_helper.h>
+#include <drm/drm_gem_cma_helper.h>
+#include <drm/drm_modeset_helper.h>
+#include <drm/drm_simple_kms_helper.h>
+#include <drm/drm_atomic_helper.h>
+#include <drm/drm_gem_framebuffer_helper.h>
+#include <drm/drm_probe_helper.h>
+#include <drm/drm_managed.h>
+#include <linux/delay.h>
+#include <linux/mutex.h>
+
+#define PIXPAPER_WIDTH 122
+#define PIXPAPER_HEIGHT 250
+
+#define PANEL_BUFFER_WIDTH 128
+#define PANEL_BUFFER_TWO_BYTES_PER_ROW (PANEL_BUFFER_WIDTH / 4)
+
+#define PIXPAPER_SPI_SPEED_DEFAULT 1000000
+
+#define PIXPAPER_CMD_PANEL_SETTING 0x00
+#define PIXPAPER_CMD_POWER_SETTING 0x01
+#define PIXPAPER_CMD_POWER_OFF 0x02
+#define PIXPAPER_CMD_POWER_OFF_SEQUENCE 0x03
+#define PIXPAPER_CMD_POWER_ON 0x04
+#define PIXPAPER_CMD_BOOSTER_SOFT_START 0x06
+#define PIXPAPER_CMD_DEEP_SLEEP 0x07
+#define PIXPAPER_CMD_DATA_START_TRANSMISSION 0x10
+#define PIXPAPER_CMD_DISPLAY_REFRESH 0x12
+#define PIXPAPER_CMD_PLL_CONTROL 0x30
+#define PIXPAPER_CMD_TEMP_SENSOR_CALIB 0x41
+#define PIXPAPER_CMD_UNKNOWN_4D 0x4D
+#define PIXPAPER_CMD_VCOM_INTERVAL 0x50
+#define PIXPAPER_CMD_TCON_SETTING 0x60
+#define PIXPAPER_CMD_RESOLUTION_SETTING 0x61
+#define PIXPAPER_CMD_GATE_SOURCE_START 0x65
+#define PIXPAPER_CMD_UNKNOWN_B4 0xB4
+#define PIXPAPER_CMD_UNKNOWN_B5 0xB5
+#define PIXPAPER_CMD_CASCADE_SETTING 0xE0
+#define PIXPAPER_CMD_POWER_SAVING 0xE3
+#define PIXPAPER_CMD_AUTO_MEASURE_VCOM 0xE7
+#define PIXPAPER_CMD_UNKNOWN_E9 0xE9
+
+struct pixpaper_panel {
+ struct drm_device drm;
+ struct drm_simple_display_pipe pipe;
+ struct drm_connector connector;
+ struct spi_device *spi;
+ struct gpio_desc *reset;
+ struct gpio_desc *busy;
+ struct gpio_desc *dc;
+ struct mutex spi_lock;
+ struct mutex update_lock;
+ bool init_completed_successfully;
+};
+
+static const struct drm_display_mode pixpaper_mode = {
+ DRM_SIMPLE_MODE(PIXPAPER_WIDTH, PIXPAPER_HEIGHT, 30, 47),
+};
+
+static const uint32_t pixpaper_formats[] = {
+ DRM_FORMAT_XRGB8888,
+};
+
+static void pixpaper_wait_busy(struct pixpaper_panel *panel)
+{
+ unsigned int delay_us = 1000;
+
+ usleep_range(delay_us, delay_us + 500);
+ while (true)
+ if (gpiod_get_value_cansleep(panel->busy) == 1)
+ break;
+}
+
+static int pixpaper_spi_sync(struct spi_device *spi, struct spi_message *msg)
+{
+ int ret;
+
+ ret = spi_sync(spi, msg);
+ if (ret < 0)
+ dev_err(&spi->dev, "SPI sync failed: %d\n", ret);
+
+ return ret;
+}
+
+static int pixpaper_send_cmd(struct pixpaper_panel *panel, u8 cmd)
+{
+ struct spi_transfer xfer = {
+ .tx_buf = &cmd,
+ .len = 1,
+ };
+ struct spi_message msg;
+ int ret;
+
+ spi_message_init(&msg);
+ spi_message_add_tail(&xfer, &msg);
+
+ mutex_lock(&panel->spi_lock);
+ gpiod_set_value_cansleep(panel->dc, 0);
+ usleep_range(1, 5);
+ ret = pixpaper_spi_sync(panel->spi, &msg);
+ mutex_unlock(&panel->spi_lock);
+
+ return ret;
+}
+
+static int pixpaper_send_data(struct pixpaper_panel *panel, u8 data)
+{
+ struct spi_transfer xfer = {
+ .tx_buf = &data,
+ .len = 1,
+ };
+ struct spi_message msg;
+ int ret;
+
+ spi_message_init(&msg);
+ spi_message_add_tail(&xfer, &msg);
+
+ mutex_lock(&panel->spi_lock);
+ gpiod_set_value_cansleep(panel->dc, 1);
+ usleep_range(1, 5);
+ ret = pixpaper_spi_sync(panel->spi, &msg);
+ mutex_unlock(&panel->spi_lock);
+
+ return ret;
+}
+
+static int pixpaper_panel_hw_init(struct pixpaper_panel *panel)
+{
+ struct device *dev = &panel->spi->dev;
+ int ret = 0;
+
+ dev_info(dev, "%s: Starting hardware initialization\n", __func__);
+
+ gpiod_set_value_cansleep(panel->reset, 0);
+ msleep(50);
+ gpiod_set_value_cansleep(panel->reset, 1);
+ msleep(50);
+
+ pixpaper_wait_busy(panel);
+ dev_info(dev, "Hardware reset complete, panel idle.\n");
+
+ ret |= pixpaper_send_cmd(panel, PIXPAPER_CMD_UNKNOWN_4D);
+ ret |= pixpaper_send_data(panel, 0x78);
+ if (ret)
+ goto init_fail;
+ pixpaper_wait_busy(panel);
+
+ ret |= pixpaper_send_cmd(panel, PIXPAPER_CMD_PANEL_SETTING);
+ ret |= pixpaper_send_data(panel, 0x0F);
+ ret |= pixpaper_send_data(panel, 0x09);
+ if (ret)
+ goto init_fail;
+ pixpaper_wait_busy(panel);
+
+ ret |= pixpaper_send_cmd(panel, PIXPAPER_CMD_POWER_SETTING);
+ ret |= pixpaper_send_data(panel, 0x07);
+ ret |= pixpaper_send_data(panel, 0x00);
+ ret |= pixpaper_send_data(panel, 0x22);
+ ret |= pixpaper_send_data(panel, 0x78);
+ ret |= pixpaper_send_data(panel, 0x0A);
+ ret |= pixpaper_send_data(panel, 0x22);
+ if (ret)
+ goto init_fail;
+ pixpaper_wait_busy(panel);
+
+ ret |= pixpaper_send_cmd(panel, PIXPAPER_CMD_POWER_OFF_SEQUENCE);
+ ret |= pixpaper_send_data(panel, 0x10);
+ ret |= pixpaper_send_data(panel, 0x54);
+ ret |= pixpaper_send_data(panel, 0x44);
+ if (ret)
+ goto init_fail;
+ pixpaper_wait_busy(panel);
+
+ ret |= pixpaper_send_cmd(panel, PIXPAPER_CMD_BOOSTER_SOFT_START);
+ ret |= pixpaper_send_data(panel, 0x0F);
+ ret |= pixpaper_send_data(panel, 0x0A);
+ ret |= pixpaper_send_data(panel, 0x2F);
+ ret |= pixpaper_send_data(panel, 0x25);
+ ret |= pixpaper_send_data(panel, 0x22);
+ ret |= pixpaper_send_data(panel, 0x2E);
+ ret |= pixpaper_send_data(panel, 0x21);
+ if (ret)
+ goto init_fail;
+ pixpaper_wait_busy(panel);
+
+ ret |= pixpaper_send_cmd(panel, PIXPAPER_CMD_PLL_CONTROL);
+ ret |= pixpaper_send_data(panel, 0x02);
+ if (ret)
+ goto init_fail;
+ pixpaper_wait_busy(panel);
+
+ ret |= pixpaper_send_cmd(panel, PIXPAPER_CMD_TEMP_SENSOR_CALIB);
+ ret |= pixpaper_send_data(panel, 0x00);
+ if (ret)
+ goto init_fail;
+ pixpaper_wait_busy(panel);
+
+ ret |= pixpaper_send_cmd(panel, PIXPAPER_CMD_VCOM_INTERVAL);
+ ret |= pixpaper_send_data(panel, 0x37);
+ if (ret)
+ goto init_fail;
+ pixpaper_wait_busy(panel);
+
+ ret |= pixpaper_send_cmd(panel, PIXPAPER_CMD_TCON_SETTING);
+ ret |= pixpaper_send_data(panel, 0x02);
+ ret |= pixpaper_send_data(panel, 0x02);
+ if (ret)
+ goto init_fail;
+ pixpaper_wait_busy(panel);
+
+ ret |= pixpaper_send_cmd(panel, PIXPAPER_CMD_RESOLUTION_SETTING);
+ ret |= pixpaper_send_data(panel, 0x00);
+ ret |= pixpaper_send_data(panel, 0x80);
+ ret |= pixpaper_send_data(panel, 0x00);
+ ret |= pixpaper_send_data(panel, 0xFA);
+ if (ret)
+ goto init_fail;
+ pixpaper_wait_busy(panel);
+
+ ret |= pixpaper_send_cmd(panel, PIXPAPER_CMD_GATE_SOURCE_START);
+ ret |= pixpaper_send_data(panel, 0x00);
+ ret |= pixpaper_send_data(panel, 0x00);
+ ret |= pixpaper_send_data(panel, 0x00);
+ ret |= pixpaper_send_data(panel, 0x00);
+ if (ret)
+ goto init_fail;
+ pixpaper_wait_busy(panel);
+
+ ret |= pixpaper_send_cmd(panel, PIXPAPER_CMD_AUTO_MEASURE_VCOM);
+ ret |= pixpaper_send_data(panel, 0x1C);
+ if (ret)
+ goto init_fail;
+ pixpaper_wait_busy(panel);
+
+ ret |= pixpaper_send_cmd(panel, PIXPAPER_CMD_POWER_SAVING);
+ ret |= pixpaper_send_data(panel, 0x22);
+ if (ret)
+ goto init_fail;
+ pixpaper_wait_busy(panel);
+
+ ret |= pixpaper_send_cmd(panel, PIXPAPER_CMD_CASCADE_SETTING);
+ ret |= pixpaper_send_data(panel, 0x00);
+ if (ret)
+ goto init_fail;
+ pixpaper_wait_busy(panel);
+
+ ret |= pixpaper_send_cmd(panel, PIXPAPER_CMD_UNKNOWN_B4);
+ ret |= pixpaper_send_data(panel, 0xD0);
+ if (ret)
+ goto init_fail;
+ pixpaper_wait_busy(panel);
+
+ ret |= pixpaper_send_cmd(panel, PIXPAPER_CMD_UNKNOWN_B5);
+ ret |= pixpaper_send_data(panel, 0x03);
+ if (ret)
+ goto init_fail;
+ pixpaper_wait_busy(panel);
+
+ ret |= pixpaper_send_cmd(panel, PIXPAPER_CMD_UNKNOWN_E9);
+ ret |= pixpaper_send_data(panel, 0x01);
+ if (ret)
+ goto init_fail;
+ pixpaper_wait_busy(panel);
+
+ dev_info(dev, "%s: Hardware initialization successful\n", __func__);
+ panel->init_completed_successfully = true;
+ return 0;
+
+init_fail:
+ dev_err(dev, "%s: Hardware initialization failed (err=%d)\n", __func__, ret);
+ panel->init_completed_successfully = false;
+ return ret;
+}
+
+static void pixpaper_pipe_enable(struct drm_simple_display_pipe *pipe,
+ struct drm_crtc_state *crtc_state,
+ struct drm_plane_state *plane_state)
+{
+ struct pixpaper_panel *panel = container_of(pipe, struct pixpaper_panel, pipe);
+ struct drm_device *drm = &panel->drm;
+ int ret;
+
+ dev_info(drm->dev, "%s: Enabling pipe\n", __func__);
+
+ ret = pixpaper_panel_hw_init(panel);
+ if (ret) {
+ dev_err(drm->dev, "Panel HW Init failed during enable: %d\n", ret);
+ return;
+ }
+
+ dev_info(drm->dev, "Sending Power ON (PON)\n");
+ ret = pixpaper_send_cmd(panel, PIXPAPER_CMD_POWER_ON);
+ if (ret) {
+ dev_err(drm->dev, "Failed to send PON command: %d\n", ret);
+ return;
+ }
+
+ usleep_range(10000, 11000);
+
+ pixpaper_wait_busy(panel);
+
+ dev_info(drm->dev, "Panel enabled and powered on\n");
+}
+
+static void pixpaper_pipe_disable(struct drm_simple_display_pipe *pipe)
+{
+ struct pixpaper_panel *panel = container_of(pipe, struct pixpaper_panel, pipe);
+ struct drm_device *drm = &panel->drm;
+ int ret;
+
+ dev_dbg(drm->dev, "%s: Disabling pipe\n", __func__);
+
+ ret = pixpaper_send_cmd(panel, PIXPAPER_CMD_POWER_OFF);
+ if (!ret) {
+ usleep_range(10000, 11000);
+ pixpaper_wait_busy(panel);
+ } else {
+ dev_warn(drm->dev, "Failed to send POF command: %d\n", ret);
+ }
+ dev_info(drm->dev, "Panel disabled\n");
+}
+
+static u8 pack_pixels_to_byte(u32 *src_pixels, int i, int j, struct drm_framebuffer *fb)
+{
+ u8 packed_byte = 0;
+ int k;
+
+ for (k = 0; k < 4; k++) {
+ int current_pixel_x = j * 4 + k;
+ u8 two_bit_val;
+
+ if (current_pixel_x < PIXPAPER_WIDTH) {
+ u32 pixel_offset = (i * (fb->pitches[0] / 4)) + current_pixel_x;
+ u32 pixel = src_pixels[pixel_offset];
+ u32 r = (pixel >> 16) & 0xFF;
+ u32 g = (pixel >> 8) & 0xFF;
+ u32 b = pixel & 0xFF;
+ u32 gray_val = (r * 299 + g * 587 + b * 114 + 500) / 1000;
+
+ if (gray_val < 64)
+ two_bit_val = 0b00;
+ else if (gray_val < 128)
+ two_bit_val = 0b01;
+ else if (gray_val < 192)
+ two_bit_val = 0b10;
+ else
+ two_bit_val = 0b11;
+ } else {
+ two_bit_val = 0b11;
+ }
+
+ packed_byte |= two_bit_val << ((3 - k) * 2);
+ }
+
+ return packed_byte;
+}
+
+static void pixpaper_pipe_update(struct drm_simple_display_pipe *pipe,
+ struct drm_plane_state *old_plane_state)
+{
+ struct pixpaper_panel *panel = container_of(pipe, struct pixpaper_panel, pipe);
+ struct drm_device *drm = &panel->drm;
+ struct drm_plane_state *plane_state = pipe->plane.state;
+ struct drm_framebuffer *fb = plane_state->fb;
+ struct drm_gem_object *gem_obj;
+ struct dma_buf *dmabuf = NULL;
+ void *vaddr = NULL;
+ int i, j, ret = 0;
+ u32 *src_pixels = NULL;
+
+ if (!panel->init_completed_successfully) {
+ dev_err(drm->dev, "CRITICAL: pipe_update called BEFORE init completed successfully!\n");
+ return;
+ }
+
+ dev_info(drm->dev, "Starting frame update (phys=%dx%d, buf_w=%d)\n",
+ PIXPAPER_WIDTH, PIXPAPER_HEIGHT, PANEL_BUFFER_WIDTH);
+
+ if (mutex_lock_interruptible(&panel->update_lock)) {
+ dev_warn(drm->dev, "Frame update interrupted while waiting for lock\n");
+ return;
+ }
+
+ if (!fb || !plane_state->visible) {
+ dev_dbg(drm->dev, "No framebuffer or plane not visible, skipping update\n");
+ mutex_unlock(&panel->update_lock);
+ return;
+ }
+
+ gem_obj = drm_gem_fb_get_obj(fb, 0);
+ if (!gem_obj) {
+ dev_err(drm->dev, "Framebuffer has no backing GEM object\n");
+ mutex_unlock(&panel->update_lock);
+ return;
+ }
+
+ dmabuf = drm_gem_prime_export(gem_obj, O_RDONLY);
+ if (IS_ERR(dmabuf)) {
+ dev_err(drm->dev, "Failed to export GEM object to dma-buf: %ld\n", PTR_ERR(dmabuf));
+ mutex_unlock(&panel->update_lock);
+ return;
+ }
+
+ vaddr = dma_buf_vmap(dmabuf);
+ if (IS_ERR_OR_NULL(vaddr)) {
+ dev_err(drm->dev, "Failed to vmap dma-buf: %ld\n",
+ vaddr ? PTR_ERR(vaddr) : -ENOMEM);
+ dma_buf_put(dmabuf);
+ mutex_unlock(&panel->update_lock);
+ return;
+ }
+ src_pixels = (u32 *)vaddr;
+
+ dev_info(drm->dev, "Sending DTM command\n");
+ ret = pixpaper_send_cmd(panel, PIXPAPER_CMD_DATA_START_TRANSMISSION);
+ if (ret)
+ goto update_cleanup;
+
+ usleep_range(10000, 11000);
+ pixpaper_wait_busy(panel);
+
+ dev_info(drm->dev, "Panel idle after DTM command, starting data batch send.\n");
+
+ for (i = 0; i < PIXPAPER_HEIGHT; i++) {
+ for (j = 0; j < PANEL_BUFFER_TWO_BYTES_PER_ROW; j++) {
+ u8 packed_byte = pack_pixels_to_byte(src_pixels, i, j, fb);
+
+ pixpaper_wait_busy(panel);
+ pixpaper_send_data(panel, packed_byte);
+ }
+ }
+ pixpaper_wait_busy(panel);
+
+ dev_info(drm->dev, "Sending PON + 0x00 before DRF\n");
+ ret = pixpaper_send_cmd(panel, PIXPAPER_CMD_POWER_ON);
+ if (ret)
+ goto update_cleanup;
+ ret = pixpaper_send_data(panel, 0x00);
+ if (ret) {
+ dev_err(drm->dev, "Failed sending data after PON-before-DRF: %d\n", ret);
+ goto update_cleanup;
+ }
+ usleep_range(10000, 11000);
+ pixpaper_wait_busy(panel);
+
+ dev_info(drm->dev, "Triggering display refresh (DRF)\n");
+ ret = pixpaper_send_cmd(panel, PIXPAPER_CMD_DISPLAY_REFRESH);
+ if (ret)
+ goto update_cleanup;
+ ret = pixpaper_send_data(panel, 0x00);
+ if (ret) {
+ dev_err(drm->dev, "Failed sending data after DRF: %d\n", ret);
+ goto update_cleanup;
+ }
+ usleep_range(10000, 11000);
+ pixpaper_wait_busy(panel);
+
+ dev_info(drm->dev, "Frame update completed and refresh triggered\n");
+
+update_cleanup:
+ if (vaddr && !IS_ERR(vaddr))
+ dma_buf_vunmap(dmabuf, vaddr);
+ if (dmabuf && !IS_ERR(dmabuf))
+ dma_buf_put(dmabuf);
+
+ if (ret && ret != -ETIMEDOUT)
+ dev_err(drm->dev, "Frame update function failed with error %d\n", ret);
+
+ mutex_unlock(&panel->update_lock);
+}
+
+
+static const struct drm_simple_display_pipe_funcs pixpaper_pipe_funcs = {
+ .enable = pixpaper_pipe_enable,
+ .disable = pixpaper_pipe_disable,
+ .update = pixpaper_pipe_update,
+ .prepare_fb = drm_gem_fb_simple_display_pipe_prepare_fb,
+};
+
+static int pixpaper_connector_get_modes(struct drm_connector *connector)
+{
+ struct drm_display_mode *mode;
+
+ dev_info(connector->dev->dev,
+ "%s: CALLED for connector %s (id: %d)\n", __func__,
+ connector->name, connector->base.id);
+
+ mode = drm_mode_create(connector->dev);
+ if (!mode) {
+ DRM_ERROR("Failed to create mode for connector %s\n", connector->name);
+ return 0;
+ }
+
+ mode->hdisplay = PIXPAPER_WIDTH;
+ mode->vdisplay = PIXPAPER_HEIGHT;
+
+ mode->htotal = mode->hdisplay + 80;
+ mode->hsync_start = mode->hdisplay + 8;
+ mode->hsync_end = mode->hdisplay + 8 + 32;
+ mode->vtotal = mode->vdisplay + 10;
+ mode->vsync_start = mode->vdisplay + 2;
+ mode->vsync_end = mode->vdisplay + 2 + 2;
+
+ mode->clock = 6000;
+
+ mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
+ drm_mode_set_name(mode);
+
+ if (drm_mode_validate_size(mode, connector->dev->mode_config.max_width,
+ connector->dev->mode_config.max_height) != MODE_OK) {
+ DRM_WARN("%s: Mode %s (%dx%d) failed size validation against max %dx%d\n", __func__,
+ mode->name, mode->hdisplay, mode->vdisplay,
+ connector->dev->mode_config.max_width,
+ connector->dev->mode_config.max_height);
+ drm_mode_destroy(connector->dev, mode);
+ return 0;
+ }
+
+ drm_mode_probed_add(connector, mode);
+ dev_info(connector->dev->dev, "%s: Added mode '%s' (%dx%d@%d) to connector %s\n", __func__,
+ mode->name, mode->hdisplay, mode->vdisplay, drm_mode_vrefresh(mode),
+ connector->name);
+
+ connector->display_info.width_mm = 30;
+ connector->display_info.height_mm = 47;
+
+ return 1;
+}
+static const struct drm_connector_helper_funcs pixpaper_conn_helpers = {
+ .get_modes = pixpaper_connector_get_modes,
+};
+
+static const struct drm_connector_funcs pixpaper_conn_funcs = {
+ .reset = drm_atomic_helper_connector_reset,
+ .fill_modes = drm_helper_probe_single_connector_modes,
+ .destroy = drm_connector_cleanup,
+ .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
+ .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
+};
+
+DEFINE_DRM_GEM_CMA_FOPS(pixpaper_fops);
+
+static int pixpaper_mode_valid(struct drm_device *dev,
+ const struct drm_display_mode *mode)
+{
+ if (mode->hdisplay == PIXPAPER_WIDTH &&
+ mode->vdisplay == PIXPAPER_HEIGHT) {
+ return MODE_OK;
+ }
+ dev_dbg(dev->dev, "Rejecting mode %dx%d (supports only %dx%d)\n",
+ mode->hdisplay, mode->vdisplay, PIXPAPER_WIDTH, PIXPAPER_HEIGHT);
+ return MODE_BAD;
+}
+
+static const struct drm_mode_config_funcs pixpaper_mode_config_funcs = {
+ .fb_create = drm_gem_fb_create_with_dirty,
+ .mode_valid = pixpaper_mode_valid,
+ .atomic_check = drm_atomic_helper_check,
+ .atomic_commit = drm_atomic_helper_commit,
+};
+
+static struct drm_driver pixpaper_drm_driver = {
+ .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
+ .fops = &pixpaper_fops,
+ .name = "pixpaper",
+ .desc = "DRM driver for PIXPAPER e-ink",
+ .date = "2025-06-16",
+ .major = 1,
+ .minor = 0,
+ .dumb_create = drm_gem_cma_dumb_create,
+ DRM_GEM_CMA_DRIVER_OPS_VMAP,
+};
+
+
+static int pixpaper_probe(struct spi_device *spi)
+{
+ struct device *dev = &spi->dev;
+ struct pixpaper_panel *panel;
+ struct drm_device *drm;
+ int ret;
+
+ dev_info(dev, "Probing PIXPAPER panel driver\n");
+
+ panel = devm_drm_dev_alloc(dev, &pixpaper_drm_driver, struct pixpaper_panel, drm);
+ if (IS_ERR(panel)) {
+ ret = PTR_ERR(panel);
+ dev_err(dev, "Failed to allocate DRM device: %d\n", ret);
+ return ret;
+ }
+ panel->init_completed_successfully = false;
+ drm = &panel->drm;
+ panel->spi = spi;
+ spi_set_drvdata(spi, panel);
+
+ mutex_init(&panel->spi_lock);
+ mutex_init(&panel->update_lock);
+
+ spi->mode = SPI_MODE_0;
+ spi->bits_per_word = 8;
+
+ if (!spi->max_speed_hz) {
+ dev_warn(dev,
+ "spi-max-frequency not specified in DT, using default %u Hz\n",
+ PIXPAPER_SPI_SPEED_DEFAULT);
+ spi->max_speed_hz = PIXPAPER_SPI_SPEED_DEFAULT;
+ } else {
+ dev_info(dev, "Using spi-max-frequency from DT: %u Hz\n", spi->max_speed_hz);
+ }
+
+ ret = spi_setup(spi);
+ if (ret < 0) {
+ dev_err(dev, "SPI setup failed: %d\n", ret);
+ return ret;
+ }
+ dev_info(dev, "SPI setup OK (mode=%d, speed=%u Hz, bpw=%d)\n",
+ spi->mode, spi->max_speed_hz, spi->bits_per_word);
+
+ if (!dev->dma_mask)
+ dev->dma_mask = &dev->coherent_dma_mask;
+ ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(32));
+ if (ret) {
+ dev_err(dev, "Failed to set DMA mask: %d\n", ret);
+ return ret;
+ }
+ dev_dbg(dev, "DMA mask set\n");
+
+ panel->reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
+ if (IS_ERR(panel->reset))
+ return dev_err_probe(dev, PTR_ERR(panel->reset), "Failed to get 'reset' GPIO\n");
+ panel->busy = devm_gpiod_get(dev, "busy", GPIOD_IN);
+ if (IS_ERR(panel->busy))
+ return dev_err_probe(dev, PTR_ERR(panel->busy), "Failed to get 'busy' GPIO\n");
+ panel->dc = devm_gpiod_get(dev, "dc", GPIOD_OUT_HIGH);
+ if (IS_ERR(panel->dc))
+ return dev_err_probe(dev, PTR_ERR(panel->dc), "Failed to get 'dc' GPIO\n");
+ dev_info(dev, "All required GPIOs obtained successfully.\n");
+
+ ret = drmm_mode_config_init(drm);
+ if (ret)
+ return ret;
+ drm->mode_config.funcs = &pixpaper_mode_config_funcs;
+ drm->mode_config.min_width = PIXPAPER_WIDTH;
+ drm->mode_config.max_width = PIXPAPER_WIDTH;
+ drm->mode_config.min_height = PIXPAPER_HEIGHT;
+ drm->mode_config.max_height = PIXPAPER_HEIGHT;
+
+ ret = drm_connector_init(drm, &panel->connector, &pixpaper_conn_funcs,
+ DRM_MODE_CONNECTOR_SPI);
+ if (ret)
+ return ret;
+ drm_connector_helper_add(&panel->connector, &pixpaper_conn_helpers);
+ panel->connector.polled = DRM_CONNECTOR_POLL_CONNECT;
+
+ ret = drm_simple_display_pipe_init(drm, &panel->pipe, &pixpaper_pipe_funcs,
+ pixpaper_formats, ARRAY_SIZE(pixpaper_formats),
+ NULL, &panel->connector);
+ if (ret)
+ return ret;
+ drm_mode_config_reset(drm);
+
+ ret = drm_dev_register(drm, 0);
+ if (ret)
+ return ret;
+
+ drm_fbdev_generic_setup(drm, 32);
+
+ dev_info(dev, "Initialized PIXPAPER panel driver successfully\n");
+ return 0;
+}
+
+static int pixpaper_remove(struct spi_device *spi)
+{
+ struct pixpaper_panel *panel = spi_get_drvdata(spi);
+
+ if (!panel)
+ return -ENODEV;
+
+ dev_info(&spi->dev, "Removing PIXPAPER panel driver\n");
+
+ drm_dev_unplug(&panel->drm);
+ drm_atomic_helper_shutdown(&panel->drm);
+ return 0;
+}
+
+static const struct of_device_id pixpaper_dt_ids[] = {
+ { .compatible = "mayqueen,pixpaper" },
+ {}
+};
+MODULE_DEVICE_TABLE(of, pixpaper_dt_ids);
+
+static struct spi_driver pixpaper_spi_driver = {
+ .driver = {
+ .name = "pixpaper",
+ .of_match_table = pixpaper_dt_ids,
+ },
+ .probe = pixpaper_probe,
+ .remove = pixpaper_remove,
+};
+
+module_spi_driver(pixpaper_spi_driver);
+
+MODULE_AUTHOR("LC Wang");
+MODULE_DESCRIPTION("DRM SPI driver for PIXPAPER e-ink panel");
+MODULE_LICENSE("GPL");
--
2.34.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 3/3] dt-bindings: display: Add MAYQUEEN PIXPAPER e-ink panel
2025-06-18 3:49 [PATCH 0/3] drm/tiny: Add MAYQUEEN PIXPAPER e-ink panel support LiangCheng Wang
2025-06-18 3:49 ` [PATCH 1/3] dt-bindings: vendor-prefixes: Add Mayqueen name LiangCheng Wang
2025-06-18 3:49 ` [PATCH 2/3] drm: tiny: Add support for PIXPAPER e-ink panel LiangCheng Wang
@ 2025-06-18 3:49 ` LiangCheng Wang
2025-06-18 6:13 ` Krzysztof Kozlowski
2025-06-18 6:14 ` [PATCH 0/3] drm/tiny: Add MAYQUEEN PIXPAPER e-ink panel support Krzysztof Kozlowski
3 siblings, 1 reply; 16+ messages in thread
From: LiangCheng Wang @ 2025-06-18 3:49 UTC (permalink / raw)
To: cip-dev; +Cc: drm, devicetree, noralf, robh+dt, krzk, zaq14760, onlywig
The binding is for the MAYQUEEN PIXPAPER e-ink display panel,
controlled via an SPI interface.
Signed-off-by: LiangCheng Wang <zaq14760@gmail.com>
---
.../bindings/display/mayqueen,pixpaper.yaml | 67 +++++++++++++++++++
1 file changed, 67 insertions(+)
create mode 100644 Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml
diff --git a/Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml b/Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml
new file mode 100644
index 000000000..f7c33957e
--- /dev/null
+++ b/Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml
@@ -0,0 +1,67 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/display/mayqueen,pixpaper.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MAYQUEEN PIXPAPER e-ink display panel
+
+maintainers:
+ - LC Wang <zaq14760@gmail.com>
+
+description: |
+ The PIXPAPER is an e-ink display panel controlled via an SPI interface.
+ The panel has a resolution of 122x250 pixels and requires GPIO pins for
+ reset, busy, and data/command control.
+
+allOf:
+ - $ref: /schemas/spi/spi-peripheral-props.yaml#
+
+properties:
+ compatible:
+ const: mayqueen,pixpaper
+
+ reg:
+ maxItems: 1
+ description: SPI chip select number for the device.
+
+ spi-max-frequency:
+ default: 1000000
+ description: Maximum SPI clock frequency in Hz.
+
+ reset-gpios:
+ maxItems: 1
+ description: GPIO for the panel reset pin.
+
+ busy-gpios:
+ maxItems: 1
+ description: GPIO for the panel busy pin.
+
+ dc-gpios:
+ maxItems: 1
+ description: GPIO for the data/command pin.
+
+required:
+ - compatible
+ - reg
+ - reset-gpios
+ - busy-gpios
+ - dc-gpios
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/gpio/gpio.h>
+ spi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ display@0 {
+ compatible = "mayqueen,pixpaper";
+ reg = <0>;
+ spi-max-frequency = <1000000>;
+ reset-gpios = <&gpio1 17 GPIO_ACTIVE_HIGH>;
+ busy-gpios = <&gpio1 18 GPIO_ACTIVE_HIGH>;
+ dc-gpios = <&gpio1 19 GPIO_ACTIVE_HIGH>;
+ };
+ };
--
2.34.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 3/3] dt-bindings: display: Add MAYQUEEN PIXPAPER e-ink panel
2025-06-18 3:49 ` [PATCH 3/3] dt-bindings: display: Add MAYQUEEN " LiangCheng Wang
@ 2025-06-18 6:13 ` Krzysztof Kozlowski
0 siblings, 0 replies; 16+ messages in thread
From: Krzysztof Kozlowski @ 2025-06-18 6:13 UTC (permalink / raw)
To: LiangCheng Wang, cip-dev; +Cc: drm, devicetree, noralf, robh+dt, onlywig
On 18/06/2025 05:49, LiangCheng Wang wrote:
> The binding is for the MAYQUEEN PIXPAPER e-ink display panel,
> controlled via an SPI interface.
>
> Signed-off-by: LiangCheng Wang <zaq14760@gmail.com>
> ---
> .../bindings/display/mayqueen,pixpaper.yaml | 67 +++++++++++++++++++
Don't send multiple patches but version them correctly.
> 1 file changed, 67 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml
>
> diff --git a/Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml b/Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml
> new file mode 100644
> index 000000000..f7c33957e
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml
> @@ -0,0 +1,67 @@
> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/display/mayqueen,pixpaper.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: MAYQUEEN PIXPAPER e-ink display panel
Don't capitalize all letters. Mayqueen Pixpaper or whatever it is really
called.
> +
> +maintainers:
> + - LC Wang <zaq14760@gmail.com>
> +
> +description: |
Do not need '|' unless you need to preserve formatting.
> + The PIXPAPER is an e-ink display panel controlled via an SPI interface.
> + The panel has a resolution of 122x250 pixels and requires GPIO pins for
> + reset, busy, and data/command control.
> +
> +allOf:
> + - $ref: /schemas/spi/spi-peripheral-props.yaml#
> +
> +properties:
> + compatible:
> + const: mayqueen,pixpaper
> +
> + reg:
> + maxItems: 1
> + description: SPI chip select number for the device.
Drop description
> +
> + spi-max-frequency:
> + default: 1000000
> + description: Maximum SPI clock frequency in Hz.
Drop description
> +
> + reset-gpios:
> + maxItems: 1
> + description: GPIO for the panel reset pin.
Drop description
> +
> + busy-gpios:
> + maxItems: 1
> + description: GPIO for the panel busy pin.
> +
> + dc-gpios:
> + maxItems: 1
> + description: GPIO for the data/command pin.
> +
> +required:
> + - compatible
> + - reg
> + - reset-gpios
> + - busy-gpios
> + - dc-gpios
> +
> +additionalProperties: false
unevaluatedProperties instead
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 0/3] drm/tiny: Add MAYQUEEN PIXPAPER e-ink panel support
2025-06-18 3:49 [PATCH 0/3] drm/tiny: Add MAYQUEEN PIXPAPER e-ink panel support LiangCheng Wang
` (2 preceding siblings ...)
2025-06-18 3:49 ` [PATCH 3/3] dt-bindings: display: Add MAYQUEEN " LiangCheng Wang
@ 2025-06-18 6:14 ` Krzysztof Kozlowski
3 siblings, 0 replies; 16+ messages in thread
From: Krzysztof Kozlowski @ 2025-06-18 6:14 UTC (permalink / raw)
To: LiangCheng Wang, cip-dev; +Cc: drm, devicetree, noralf, robh+dt, onlywig
On 18/06/2025 05:49, LiangCheng Wang wrote:
> This series adds support for the MAYQUEEN PIXPAPER e-ink panel
> (122x250 pixels, SPI-controlled) to the tiny drm subsystem.
>
> Patches (must be applied in order due to dependencies):
> Patch 1/3: Adds 'mayqueen' vendor prefix.
> Patch 2/3: Implements PIXPAPER tiny drm driver.
> Patch 3/3: Adds PIXPAPER device tree bindings.
>
> Tested on PIXPAPER hardware with linux-5.10.y-cip,
> verifying display initialization and refresh.
> All patches pass checkpatch.pl.
>
> Signed-off-by: Wig Cheng <onlywig@gmail.com>
> Signed-off-by: LiangCheng Wang <zaq14760@gmail.com>
>
I don't understand this CC list. Cip is for sure incorrect... unless you
target CIP, but such patches must not be sent to upstream because that
would be waste of our time.
<form letter>
Please use scripts/get_maintainers.pl to get a list of necessary people
and lists to CC (and consider --no-git-fallback argument, so you will
not CC people just because they made one commit years ago). It might
happen, that command when run on an older kernel, gives you outdated
entries. Therefore please be sure you base your patches on recent Linux
kernel.
Tools like b4 or scripts/get_maintainer.pl provide you proper list of
people, so fix your workflow. Tools might also fail if you work on some
ancient tree (don't, instead use mainline) or work on fork of kernel
(don't, instead use mainline). Just use b4 and everything should be
fine, although remember about `b4 prep --auto-to-cc` if you added new
patches to the patchset.
</form letter>
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 3/3] dt-bindings: display: Add MAYQUEEN PIXPAPER e-ink panel
2025-06-18 3:37 ` [PATCH 3/3] dt-bindings: display: Add MAYQUEEN PIXPAPER e-ink panel LiangCheng Wang
@ 2025-06-19 15:43 ` Conor Dooley
2025-06-19 16:01 ` Krzysztof Kozlowski
` (2 more replies)
0 siblings, 3 replies; 16+ messages in thread
From: Conor Dooley @ 2025-06-19 15:43 UTC (permalink / raw)
To: LiangCheng Wang; +Cc: cip-dev, drm, devicetree, noralf, robh+dt, krzk, onlywig
[-- Attachment #1: Type: text/plain, Size: 2754 bytes --]
On Wed, Jun 18, 2025 at 11:37:31AM +0800, LiangCheng Wang wrote:
> The binding is for the MAYQUEEN PIXPAPER e-ink display panel,
> controlled via an SPI interface.
>
> Signed-off-by: LiangCheng Wang <zaq14760@gmail.com>
> ---
> .../bindings/display/mayqueen,pixpaper.yaml | 67 +++++++++++++++++++
> 1 file changed, 67 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml
>
> diff --git a/Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml b/Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml
> new file mode 100644
> index 000000000..f7c33957e
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml
> @@ -0,0 +1,67 @@
> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/display/mayqueen,pixpaper.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: MAYQUEEN PIXPAPER e-ink display panel
> +
> +maintainers:
> + - LC Wang <zaq14760@gmail.com>
> +
> +description: |
> + The PIXPAPER is an e-ink display panel controlled via an SPI interface.
> + The panel has a resolution of 122x250 pixels and requires GPIO pins for
> + reset, busy, and data/command control.
> +
> +allOf:
> + - $ref: /schemas/spi/spi-peripheral-props.yaml#
> +
> +properties:
> + compatible:
> + const: mayqueen,pixpaper
> +
> + reg:
> + maxItems: 1
> + description: SPI chip select number for the device.
> +
> + spi-max-frequency:
> + default: 1000000
> + description: Maximum SPI clock frequency in Hz.
Does this actually not have a max?
The display surely has a maximum supported frequency, which might be
lowered based on the board it is connected to.
> +
> + reset-gpios:
> + maxItems: 1
> + description: GPIO for the panel reset pin.
> +
> + busy-gpios:
> + maxItems: 1
> + description: GPIO for the panel busy pin.
> +
> + dc-gpios:
> + maxItems: 1
> + description: GPIO for the data/command pin.
> +
> +required:
> + - compatible
> + - reg
> + - reset-gpios
> + - busy-gpios
> + - dc-gpios
> +
> +additionalProperties: false
> +
> +examples:
> + - |
> + #include <dt-bindings/gpio/gpio.h>
> + spi {
> + #address-cells = <1>;
> + #size-cells = <0>;
> + display@0 {
> + compatible = "mayqueen,pixpaper";
> + reg = <0>;
> + spi-max-frequency = <1000000>;
> + reset-gpios = <&gpio1 17 GPIO_ACTIVE_HIGH>;
> + busy-gpios = <&gpio1 18 GPIO_ACTIVE_HIGH>;
> + dc-gpios = <&gpio1 19 GPIO_ACTIVE_HIGH>;
> + };
> + };
> --
> 2.34.1
>
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 3/3] dt-bindings: display: Add MAYQUEEN PIXPAPER e-ink panel
2025-06-19 15:43 ` Conor Dooley
@ 2025-06-19 16:01 ` Krzysztof Kozlowski
2025-06-19 16:11 ` Conor Dooley
2025-06-20 3:48 ` lcwang
2025-06-20 3:53 ` lcwang
2 siblings, 1 reply; 16+ messages in thread
From: Krzysztof Kozlowski @ 2025-06-19 16:01 UTC (permalink / raw)
To: Conor Dooley, LiangCheng Wang
Cc: cip-dev, drm, devicetree, noralf, robh+dt, onlywig
On 19/06/2025 17:43, Conor Dooley wrote:
>> +
>> +properties:
>> + compatible:
>> + const: mayqueen,pixpaper
>> +
>> + reg:
>> + maxItems: 1
>> + description: SPI chip select number for the device.
>> +
>> + spi-max-frequency:
>> + default: 1000000
>> + description: Maximum SPI clock frequency in Hz.
>
> Does this actually not have a max?
> The display surely has a maximum supported frequency, which might be
> lowered based on the board it is connected to.
>
Have in mind this is a duplicated thread - same stuff was sent two times
leading to duplicated discussion:
https://lore.kernel.org/all/?q=f%3Azaq14760%40gmail.com
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 3/3] dt-bindings: display: Add MAYQUEEN PIXPAPER e-ink panel
2025-06-19 16:01 ` Krzysztof Kozlowski
@ 2025-06-19 16:11 ` Conor Dooley
0 siblings, 0 replies; 16+ messages in thread
From: Conor Dooley @ 2025-06-19 16:11 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: LiangCheng Wang, cip-dev, drm, devicetree, noralf, robh+dt,
onlywig
[-- Attachment #1: Type: text/plain, Size: 895 bytes --]
On Thu, Jun 19, 2025 at 06:01:41PM +0200, Krzysztof Kozlowski wrote:
> On 19/06/2025 17:43, Conor Dooley wrote:
> >> +
> >> +properties:
> >> + compatible:
> >> + const: mayqueen,pixpaper
> >> +
> >> + reg:
> >> + maxItems: 1
> >> + description: SPI chip select number for the device.
> >> +
> >> + spi-max-frequency:
> >> + default: 1000000
> >> + description: Maximum SPI clock frequency in Hz.
> >
> > Does this actually not have a max?
> > The display surely has a maximum supported frequency, which might be
> > lowered based on the board it is connected to.
> >
>
> Have in mind this is a duplicated thread - same stuff was sent two times
> leading to duplicated discussion:
>
> https://lore.kernel.org/all/?q=f%3Azaq14760%40gmail.com
Yeah, I saw the dupe but I deleted the wrong one and couldn't be
bothered downloading the mbox for it.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 3/3] dt-bindings: display: Add MAYQUEEN PIXPAPER e-ink panel
2025-06-19 15:43 ` Conor Dooley
2025-06-19 16:01 ` Krzysztof Kozlowski
@ 2025-06-20 3:48 ` lcwang
2025-06-20 3:53 ` lcwang
2 siblings, 0 replies; 16+ messages in thread
From: lcwang @ 2025-06-20 3:48 UTC (permalink / raw)
To: zaq14760, Conor Dooley
Cc: cip-dev, drm, devicetree, noralf, robh+dt, krzk, onlywig
From: LiangCheng Wang <zaq14760@gmail.com>
On Thu, Jun 19, 2025 at 16:43:46PM +0100, Conor Dooley wrote:
> > spi-max-frequency:
> > default: 1000000
> > description: Maximum SPI clock frequency in Hz.
>
> Does this actually not have a max?
> The display surely has a maximum supported frequency, which might be
> lowered based on the board it is connected to.
On Wed, Jun 18, 2025 at 08:13:38AM +0200, Krzysztof Kozlowski wrote:
> Don't send multiple patches but version them correctly.
>
> > title: MAYQUEEN PIXPAPER e-ink display panel
>
> Don't capitalize all letters. Mayqueen Pixpaper or whatever it is really called.
>
> > description: |
>
> Do not need '|' unless you need to preserve formatting.
>
> > reg:
> > maxItems: 1
> > description: SPI chip select number for the device.
>
> Drop description
> [similarly for spi-max-frequency, reset-gpios, busy-gpios, dc-gpios]
>
> > additionalProperties: false
>
> unevaluatedProperties instead
Hi Conor, Krzysztof,
Thanks for your detailed reviews!
To Conor:
Regarding the spi-max-frequency property,
you’re correct that the display has a maximum supported SPI clock frequency.
The provided datasheet for the Pixpaper controller does not explicitly specify this value,
but I’ve tested the panel on the RZ/V2H platform and found 1000000 Hz (1 MHz)
to be the most stable operating frequency.
The current binding’s default of 1 MHz reflects this tested configuration.
To ensure clarity and prevent misconfiguration,
I will update the binding to define a maximum: 1000000 constraint for spi-max-frequency in the YAML schema,
pending further datasheet confirmation
To Krzysztof:
I'll make the following changes to the device tree bindings:
- Update the title to "Mayqueen Pixpaper e-ink display panel".
- Remove the '|' from the description.
- Drop redundant descriptions for reg, spi-max-frequency, reset-gpios,
busy-gpios, and dc-gpios.
- Replace `additionalProperties: false` with `unevaluatedProperties: false`.
Best regards,
LiangCheng Wang
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 3/3] dt-bindings: display: Add MAYQUEEN PIXPAPER e-ink panel
2025-06-19 15:43 ` Conor Dooley
2025-06-19 16:01 ` Krzysztof Kozlowski
2025-06-20 3:48 ` lcwang
@ 2025-06-20 3:53 ` lcwang
2025-06-20 3:53 ` [PATCH 3/3] dt-bindings: display: Add Mayqueen Pixpaper " lcwang
2 siblings, 1 reply; 16+ messages in thread
From: lcwang @ 2025-06-20 3:53 UTC (permalink / raw)
To: conor; +Cc: drm, devicetree, noralf, robh+dt, krzk, zaq14760, onlywig,
cip-dev
From: LiangCheng Wang <zaq14760@gmail.com>
On Thu, Jun 19, 2025 at 16:43:46PM +0100, Conor Dooley wrote:
> > spi-max-frequency:
> > default: 1000000
> > description: Maximum SPI clock frequency in Hz.
>
> Does this actually not have a max?
> The display surely has a maximum supported frequency, which might be
> lowered based on the board it is connected to.
On Wed, Jun 18, 2025 at 08:13:38AM +0200, Krzysztof Kozlowski wrote:
> Don't send multiple patches but version them correctly.
>
> > title: MAYQUEEN PIXPAPER e-ink display panel
>
> Don't capitalize all letters. Mayqueen Pixpaper or whatever it is really called.
>
> > description: |
>
> Do not need '|' unless you need to preserve formatting.
>
> > reg:
> > maxItems: 1
> > description: SPI chip select number for the device.
>
> Drop description
> [similarly for spi-max-frequency, reset-gpios, busy-gpios, dc-gpios]
>
> > additionalProperties: false
>
> unevaluatedProperties instead
Hi Conor, Krzysztof,
Thanks for your detailed reviews!
To Conor:
Regarding the spi-max-frequency property,
you’re correct that the display has a maximum supported SPI clock frequency.
The provided datasheet for the Pixpaper controller does not explicitly specify this value,
but I’ve tested the panel on the RZ/V2H platform and found 1000000 Hz (1 MHz)
to be the most stable operating frequency.
The current binding’s default of 1 MHz reflects this tested configuration.
To ensure clarity and prevent misconfiguration,
I will update the binding to define a maximum: 1000000 constraint for spi-max-frequency in the YAML schema,
pending further datasheet confirmation
To Krzysztof:
I'll make the following changes to the device tree bindings:
- Update the title to "Mayqueen Pixpaper e-ink display panel".
- Remove the '|' from the description.
- Drop redundant descriptions for reg, spi-max-frequency, reset-gpios,
busy-gpios, and dc-gpios.
- Replace `additionalProperties: false` with `unevaluatedProperties: false`.
Best regards,
LiangCheng Wang
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 3/3] dt-bindings: display: Add Mayqueen Pixpaper e-ink panel
2025-06-20 3:53 ` lcwang
@ 2025-06-20 3:53 ` lcwang
2025-06-20 5:28 ` Krzysztof Kozlowski
0 siblings, 1 reply; 16+ messages in thread
From: lcwang @ 2025-06-20 3:53 UTC (permalink / raw)
To: conor; +Cc: drm, devicetree, noralf, robh+dt, krzk, zaq14760, onlywig,
cip-dev
From: LiangCheng Wang <zaq14760@gmail.com>
The binding is for the Mayqueen Pixpaper e-ink display panel,
controlled via an SPI interface.
Changes in v2:
- Corrected capitalization in the title.
- Removed unnecessary '|' from description.
- Removed redundant description lines for standard properties
- Added 'maximum: 1000000' for spi-max-frequency property definition
- Changed 'additionalProperties: false' to 'unevaluatedProperties: false'.
Signed-off-by: LiangCheng Wang <zaq14760@gmail.com>
---
.../bindings/display/mayqueen,pixpaper.yaml | 63 +++++++++++++++++++
1 file changed, 63 insertions(+)
create mode 100644 Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml
diff --git a/Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml b/Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml
new file mode 100644
index 000000000000..cd27f8ba5ae1
--- /dev/null
+++ b/Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml
@@ -0,0 +1,63 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/display/mayqueen,pixpaper.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Mayqueen Pixpaper e-ink display panel
+
+maintainers:
+ - LiangCheng Wang <zaq14760@gmail.com>
+
+description:
+ The Pixpaper is an e-ink display panel controlled via an SPI interface.
+ The panel has a resolution of 122x250 pixels and requires GPIO pins for
+ reset, busy, and data/command control.
+
+allOf:
+ - $ref: /schemas/spi/spi-peripheral-props.yaml#
+
+properties:
+ compatible:
+ const: mayqueen,pixpaper
+
+ reg:
+ maxItems: 1
+
+ spi-max-frequency:
+ maximum: 1000000
+ default: 1000000
+
+ reset-gpios:
+ maxItems: 1
+
+ busy-gpios:
+ maxItems: 1
+
+ dc-gpios:
+ maxItems: 1
+
+required:
+ - compatible
+ - reg
+ - reset-gpios
+ - busy-gpios
+ - dc-gpios
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/gpio/gpio.h>
+ spi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ display@0 {
+ compatible = "mayqueen,pixpaper";
+ reg = <0>;
+ spi-max-frequency = <1000000>;
+ reset-gpios = <&gpio1 17 GPIO_ACTIVE_HIGH>;
+ busy-gpios = <&gpio1 18 GPIO_ACTIVE_HIGH>;
+ dc-gpios = <&gpio1 19 GPIO_ACTIVE_HIGH>;
+ };
+ };
--
2.34.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 3/3] dt-bindings: display: Add Mayqueen Pixpaper e-ink panel
2025-06-20 3:53 ` [PATCH 3/3] dt-bindings: display: Add Mayqueen Pixpaper " lcwang
@ 2025-06-20 5:28 ` Krzysztof Kozlowski
0 siblings, 0 replies; 16+ messages in thread
From: Krzysztof Kozlowski @ 2025-06-20 5:28 UTC (permalink / raw)
To: lcwang, conor; +Cc: drm, devicetree, noralf, robh+dt, onlywig, cip-dev
On 20/06/2025 05:53, lcwang wrote:
> From: LiangCheng Wang <zaq14760@gmail.com>
>
> The binding is for the Mayqueen Pixpaper e-ink display panel,
> controlled via an SPI interface.
>
> Changes in v2:
This goes to changelog.
Please version your patches correctly, e.g. use b4 or git format-patch
-vX, and add changelog in cover letter or under '---' of individual
patches describing changes from previous version.
Just look at other patches on the list.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 3/3] dt-bindings: display: Add Mayqueen Pixpaper e-ink panel
2025-07-08 10:06 [PATCH 0/3] Add support for Mayqueen Pixpaper e-ink panel LiangCheng Wang
@ 2025-07-08 10:06 ` LiangCheng Wang
2025-07-08 21:21 ` Rob Herring (Arm)
0 siblings, 1 reply; 16+ messages in thread
From: LiangCheng Wang @ 2025-07-08 10:06 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Sumit Semwal, Christian König, Wig Cheng
Cc: devicetree, linux-kernel, dri-devel, linux-media, linaro-mm-sig,
LiangCheng Wang
The binding is for the Mayqueen Pixpaper e-ink display panel,
controlled via an SPI interface.
Signed-off-by: LiangCheng Wang <zaq14760@gmail.com>
---
.../bindings/display/mayqueen,pixpaper.yaml | 63 ++++++++++++++++++++++
1 file changed, 63 insertions(+)
diff --git a/Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml b/Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..cd27f8ba5ae1d94660818525b5fa71db98c8acb7
--- /dev/null
+++ b/Documentation/devicetree/bindings/display/mayqueen,pixpaper.yaml
@@ -0,0 +1,63 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/display/mayqueen,pixpaper.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Mayqueen Pixpaper e-ink display panel
+
+maintainers:
+ - LiangCheng Wang <zaq14760@gmail.com>
+
+description:
+ The Pixpaper is an e-ink display panel controlled via an SPI interface.
+ The panel has a resolution of 122x250 pixels and requires GPIO pins for
+ reset, busy, and data/command control.
+
+allOf:
+ - $ref: /schemas/spi/spi-peripheral-props.yaml#
+
+properties:
+ compatible:
+ const: mayqueen,pixpaper
+
+ reg:
+ maxItems: 1
+
+ spi-max-frequency:
+ maximum: 1000000
+ default: 1000000
+
+ reset-gpios:
+ maxItems: 1
+
+ busy-gpios:
+ maxItems: 1
+
+ dc-gpios:
+ maxItems: 1
+
+required:
+ - compatible
+ - reg
+ - reset-gpios
+ - busy-gpios
+ - dc-gpios
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/gpio/gpio.h>
+ spi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ display@0 {
+ compatible = "mayqueen,pixpaper";
+ reg = <0>;
+ spi-max-frequency = <1000000>;
+ reset-gpios = <&gpio1 17 GPIO_ACTIVE_HIGH>;
+ busy-gpios = <&gpio1 18 GPIO_ACTIVE_HIGH>;
+ dc-gpios = <&gpio1 19 GPIO_ACTIVE_HIGH>;
+ };
+ };
--
2.34.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 3/3] dt-bindings: display: Add Mayqueen Pixpaper e-ink panel
2025-07-08 10:06 ` [PATCH 3/3] dt-bindings: display: Add " LiangCheng Wang
@ 2025-07-08 21:21 ` Rob Herring (Arm)
0 siblings, 0 replies; 16+ messages in thread
From: Rob Herring (Arm) @ 2025-07-08 21:21 UTC (permalink / raw)
To: LiangCheng Wang
Cc: Maxime Ripard, Simona Vetter, Conor Dooley, linux-kernel,
linux-media, Maarten Lankhorst, dri-devel, Thomas Zimmermann,
devicetree, linaro-mm-sig, David Airlie, Krzysztof Kozlowski,
Wig Cheng, Sumit Semwal, Christian König
On Tue, 08 Jul 2025 18:06:46 +0800, LiangCheng Wang wrote:
> The binding is for the Mayqueen Pixpaper e-ink display panel,
> controlled via an SPI interface.
>
> Signed-off-by: LiangCheng Wang <zaq14760@gmail.com>
> ---
> .../bindings/display/mayqueen,pixpaper.yaml | 63 ++++++++++++++++++++++
> 1 file changed, 63 insertions(+)
>
This should be patch 2. Bindings come before users of them.
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2025-07-08 21:21 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-18 3:49 [PATCH 0/3] drm/tiny: Add MAYQUEEN PIXPAPER e-ink panel support LiangCheng Wang
2025-06-18 3:49 ` [PATCH 1/3] dt-bindings: vendor-prefixes: Add Mayqueen name LiangCheng Wang
2025-06-18 3:49 ` [PATCH 2/3] drm: tiny: Add support for PIXPAPER e-ink panel LiangCheng Wang
2025-06-18 3:49 ` [PATCH 3/3] dt-bindings: display: Add MAYQUEEN " LiangCheng Wang
2025-06-18 6:13 ` Krzysztof Kozlowski
2025-06-18 6:14 ` [PATCH 0/3] drm/tiny: Add MAYQUEEN PIXPAPER e-ink panel support Krzysztof Kozlowski
-- strict thread matches above, loose matches on Subject: below --
2025-07-08 10:06 [PATCH 0/3] Add support for Mayqueen Pixpaper e-ink panel LiangCheng Wang
2025-07-08 10:06 ` [PATCH 3/3] dt-bindings: display: Add " LiangCheng Wang
2025-07-08 21:21 ` Rob Herring (Arm)
2025-06-18 3:37 [PATCH 0/3] drm/tiny: Add MAYQUEEN PIXPAPER e-ink panel support LiangCheng Wang
2025-06-18 3:37 ` [PATCH 3/3] dt-bindings: display: Add MAYQUEEN PIXPAPER e-ink panel LiangCheng Wang
2025-06-19 15:43 ` Conor Dooley
2025-06-19 16:01 ` Krzysztof Kozlowski
2025-06-19 16:11 ` Conor Dooley
2025-06-20 3:48 ` lcwang
2025-06-20 3:53 ` lcwang
2025-06-20 3:53 ` [PATCH 3/3] dt-bindings: display: Add Mayqueen Pixpaper " lcwang
2025-06-20 5:28 ` Krzysztof Kozlowski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).