Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1 0/3] drm/bridge: Add Thine THC63LVD827 LVDS encoder and 10inch LVDS panel on Colibri iMX7
@ 2026-09-08 10:02 Francesco Dolcini
  2026-09-08 10:02 ` [PATCH v1 1/3] dt-bindings: display: bridge: Add THine THC63LVD827 Francesco Dolcini
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Francesco Dolcini @ 2026-09-08 10:02 UTC (permalink / raw)
  To: Francesco Dolcini, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Luca Ceresoli,
	David Airlie, Simona Vetter, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Frank Li, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
  Cc: Francesco Dolcini, dri-devel, devicetree, linux-kernel, imx,
	linux-arm-kernel

From: Francesco Dolcini <francesco.dolcini@toradex.com>

This series adds support for the Thine THC63LVD827 DPI to LVDS encoder and
afterward uses it to add a DT overlay to enable the Toradex 10inch LVDS panel
on Colibri iMX7 / Iris

Francesco Dolcini (3):
  dt-bindings: display: bridge: Add THine THC63LVD827
  drm/bridge: Add THine THC63LVD827 LVDS encoder
  ARM: dts: imx7d-colibri-emmc: Add Toradex Capacitive Touch Display 10"
    LVDS

 .../display/bridge/thine,thc63lvd827.yaml     | 126 ++++++++++++
 MAINTAINERS                                   |   6 +
 arch/arm/boot/dts/nxp/imx/Makefile            |   6 +
 ...emmc-iris-panel-cap-touch-10inch-lvds.dtso |  92 +++++++++
 drivers/gpu/drm/bridge/Kconfig                |  11 +
 drivers/gpu/drm/bridge/Makefile               |   1 +
 drivers/gpu/drm/bridge/thc63lvd827.c          | 193 ++++++++++++++++++
 7 files changed, 435 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/display/bridge/thine,thc63lvd827.yaml
 create mode 100644 arch/arm/boot/dts/nxp/imx/imx7d-colibri-emmc-iris-panel-cap-touch-10inch-lvds.dtso
 create mode 100644 drivers/gpu/drm/bridge/thc63lvd827.c

-- 
2.47.3



^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v1 1/3] dt-bindings: display: bridge: Add THine THC63LVD827
  2026-09-08 10:02 [PATCH v1 0/3] drm/bridge: Add Thine THC63LVD827 LVDS encoder and 10inch LVDS panel on Colibri iMX7 Francesco Dolcini
@ 2026-09-08 10:02 ` Francesco Dolcini
  2026-09-09 19:18   ` Frank Li
  2026-09-08 10:02 ` [PATCH v1 2/3] drm/bridge: Add THine THC63LVD827 LVDS encoder Francesco Dolcini
  2026-09-08 10:02 ` [PATCH v1 3/3] ARM: dts: imx7d-colibri-emmc: Add Toradex Capacitive Touch Display 10" LVDS Francesco Dolcini
  2 siblings, 1 reply; 5+ messages in thread
From: Francesco Dolcini @ 2026-09-08 10:02 UTC (permalink / raw)
  To: Francesco Dolcini, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Luca Ceresoli,
	Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Frank Li, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
  Cc: Francesco Dolcini, dri-devel, devicetree, linux-kernel, imx,
	linux-arm-kernel

From: Francesco Dolcini <francesco.dolcini@toradex.com>

Add THine THC63LVD827 DPI to LVDS encoder.

The THC63LVD827 is a simple DPI to LVDS encoder that can be configured
with input pins.

Link: https://www.thine.co.jp/en/products/detail/THC63LVD827.html
Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
---
 .../display/bridge/thine,thc63lvd827.yaml     | 126 ++++++++++++++++++
 MAINTAINERS                                   |   5 +
 2 files changed, 131 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/display/bridge/thine,thc63lvd827.yaml

diff --git a/Documentation/devicetree/bindings/display/bridge/thine,thc63lvd827.yaml b/Documentation/devicetree/bindings/display/bridge/thine,thc63lvd827.yaml
new file mode 100644
index 000000000000..ead50802e11e
--- /dev/null
+++ b/Documentation/devicetree/bindings/display/bridge/thine,thc63lvd827.yaml
@@ -0,0 +1,126 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/display/bridge/thine,thc63lvd827.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: THine THC63LVD827 DPI to LVDS encoder
+
+maintainers:
+  - Francesco Dolcini <francesco.dolcini@toradex.com>
+
+description: |
+  The THC63LVD827 converts a 24-bit parallel RGB interface plus HSYNC,
+  VSYNC and data-enable to single-link or dual-link LVDS.
+
+  The LVDS output data mapping is configured using the MAP and 6B/8B inputs,
+  that can be controlled by GPIOs.
+
+  The LVDS output link mode (single/dual) is configured using the MODE input.
+
+  The parallel interface pixel clock sample polarity is configurable with the
+  R/F input strap option.
+
+properties:
+  compatible:
+    const: thine,thc63lvd827
+
+  map-gpios:
+    maxItems: 1
+    description:
+      GPIO connected to the MAP input. A high level selects Mapping Mode 1
+      and a low level selects Mapping Mode 2.
+
+  mode-gpios:
+    maxItems: 1
+    description:
+      GPIO connected to the MODE input. A high level selects single-link
+      LVDS output and a low level selects dual-link LVDS output.
+
+  b6b8-gpios:
+    maxItems: 1
+    description:
+      GPIO connected to the 6B/8B input. A high level selects 6-bit (21-bit)
+      mode and a low level selects 8-bit (27-bit) mode.
+
+  powerdown-gpios:
+    maxItems: 1
+    description:
+      GPIO connected to the active-low /PDWN input. A high level selects
+      normal operation and a low level power down the chip.
+
+  ports:
+    $ref: /schemas/graph.yaml#/properties/ports
+
+    properties:
+      port@0:
+        $ref: /schemas/graph.yaml#/$defs/port-base
+        unevaluatedProperties: false
+        description: Parallel RGB input
+
+        properties:
+          endpoint:
+            $ref: /schemas/media/video-interfaces.yaml
+            unevaluatedProperties: false
+
+            properties:
+              pclk-sample:
+                description:
+                  Sample data on falling (0) or rising (1) edges of the pixel
+                  clock signal.
+                enum: [ 0, 1 ]
+                default: 0
+
+      port@1:
+        $ref: /schemas/graph.yaml#/properties/port
+        description: LVDS output 1st link, used in single- and dual-link mode.
+
+      port@2:
+        $ref: /schemas/graph.yaml#/properties/port
+        description: Optional LVDS output 2nd link, for dual-link mode.
+
+    required:
+      - port@0
+      - port@1
+
+required:
+  - compatible
+  - ports
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/gpio/gpio.h>
+
+    lvds-encoder {
+        compatible = "thine,thc63lvd827";
+
+        map-gpios = <&gpio4 10 GPIO_ACTIVE_HIGH>;
+        mode-gpios = <&gpio4 11 GPIO_ACTIVE_HIGH>;
+        powerdown-gpios = <&gpio4 12 GPIO_ACTIVE_LOW>;
+
+        ports {
+            #address-cells = <1>;
+            #size-cells = <0>;
+
+            port@0 {
+                reg = <0>;
+
+                endpoint {
+                    pclk-sample = <1>;
+                    remote-endpoint = <&dpi_out>;
+                };
+            };
+
+            port@1 {
+                reg = <1>;
+
+                endpoint {
+                    remote-endpoint = <&lvds_display_in>;
+                };
+            };
+        };
+    };
+
+...
diff --git a/MAINTAINERS b/MAINTAINERS
index 6215fcb07770..0b5a25a35367 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -8580,6 +8580,11 @@ F:	Documentation/devicetree/bindings/display/rockchip/rockchip,dw-dp.yaml
 F:	drivers/gpu/drm/bridge/synopsys/dw-dp.c
 F:	include/drm/bridge/dw_dp.h
 
+DRM DRIVER FOR THINE THC63LVD827 DPI TO LVDS BRIDGE
+M:	Francesco Dolcini <francesco@dolcini.it>
+S:	Maintained
+F:	Documentation/devicetree/bindings/display/bridge/thine,thc63lvd827.yaml
+
 DRM DRIVER FOR TI DLPC3433 MIPI DSI TO DMD BRIDGE
 M:	Jagan Teki <jagan@amarulasolutions.com>
 S:	Maintained
-- 
2.47.3



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v1 2/3] drm/bridge: Add THine THC63LVD827 LVDS encoder
  2026-09-08 10:02 [PATCH v1 0/3] drm/bridge: Add Thine THC63LVD827 LVDS encoder and 10inch LVDS panel on Colibri iMX7 Francesco Dolcini
  2026-09-08 10:02 ` [PATCH v1 1/3] dt-bindings: display: bridge: Add THine THC63LVD827 Francesco Dolcini
@ 2026-09-08 10:02 ` Francesco Dolcini
  2026-09-08 10:02 ` [PATCH v1 3/3] ARM: dts: imx7d-colibri-emmc: Add Toradex Capacitive Touch Display 10" LVDS Francesco Dolcini
  2 siblings, 0 replies; 5+ messages in thread
From: Francesco Dolcini @ 2026-09-08 10:02 UTC (permalink / raw)
  To: Francesco Dolcini, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Luca Ceresoli,
	Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
	Simona Vetter, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Frank Li, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
  Cc: Francesco Dolcini, dri-devel, devicetree, linux-kernel, imx,
	linux-arm-kernel

From: Francesco Dolcini <francesco.dolcini@toradex.com>

Add THC63LVD827 DPI to LVDS bridge driver. The driver supports
configuring the LVDS data mapping. As of now only single link LVDS is
supported, dual link support can be added if/when needed.

Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
---
 MAINTAINERS                          |   1 +
 drivers/gpu/drm/bridge/Kconfig       |  11 ++
 drivers/gpu/drm/bridge/Makefile      |   1 +
 drivers/gpu/drm/bridge/thc63lvd827.c | 193 +++++++++++++++++++++++++++
 4 files changed, 206 insertions(+)
 create mode 100644 drivers/gpu/drm/bridge/thc63lvd827.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 0b5a25a35367..ee24b15b26d3 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -8584,6 +8584,7 @@ DRM DRIVER FOR THINE THC63LVD827 DPI TO LVDS BRIDGE
 M:	Francesco Dolcini <francesco@dolcini.it>
 S:	Maintained
 F:	Documentation/devicetree/bindings/display/bridge/thine,thc63lvd827.yaml
+F:	drivers/gpu/drm/bridge/thc63lvd827.c
 
 DRM DRIVER FOR TI DLPC3433 MIPI DSI TO DMD BRIDGE
 M:	Jagan Teki <jagan@amarulasolutions.com>
diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig
index 4a57d49b4c6d..70ebc6b50e59 100644
--- a/drivers/gpu/drm/bridge/Kconfig
+++ b/drivers/gpu/drm/bridge/Kconfig
@@ -365,6 +365,17 @@ config DRM_THINE_THC63LVD1024
 	help
 	  Thine THC63LVD1024 LVDS/parallel converter driver.
 
+config DRM_THINE_THC63LVD827
+	tristate "THine THC63LVD827 DPI/LVDS bridge"
+	depends on OF
+	select DRM_KMS_HELPER
+	help
+	  Enable support for the THine THC63LVD827 DPI to LVDS bridge.
+
+	  The device converts a parallel RGB display interface to an LVDS
+	  output for connection to LVDS display panels.
+	  The bridge supports configurable JEIDA and VESA LVDS data mapping.
+
 config DRM_THEAD_TH1520_DW_HDMI
 	tristate "T-Head TH1520 DesignWare HDMI bridge"
 	depends on OF
diff --git a/drivers/gpu/drm/bridge/Makefile b/drivers/gpu/drm/bridge/Makefile
index 15cc821d85b7..5d578f7112c8 100644
--- a/drivers/gpu/drm/bridge/Makefile
+++ b/drivers/gpu/drm/bridge/Makefile
@@ -33,6 +33,7 @@ obj-$(CONFIG_DRM_SIMPLE_BRIDGE) += simple-bridge.o
 obj-$(CONFIG_DRM_SOLOMON_SSD2825) += ssd2825.o
 obj-$(CONFIG_DRM_THEAD_TH1520_DW_HDMI) += th1520-dw-hdmi.o
 obj-$(CONFIG_DRM_THINE_THC63LVD1024) += thc63lvd1024.o
+obj-$(CONFIG_DRM_THINE_THC63LVD827) += thc63lvd827.o
 obj-$(CONFIG_DRM_TOSHIBA_TC358762) += tc358762.o
 obj-$(CONFIG_DRM_TOSHIBA_TC358764) += tc358764.o
 obj-$(CONFIG_DRM_TOSHIBA_TC358767) += tc358767.o
diff --git a/drivers/gpu/drm/bridge/thc63lvd827.c b/drivers/gpu/drm/bridge/thc63lvd827.c
new file mode 100644
index 000000000000..d3c7e0fff126
--- /dev/null
+++ b/drivers/gpu/drm/bridge/thc63lvd827.c
@@ -0,0 +1,193 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) Toradex
+ * Author: Francesco Dolcini <francesco.dolcini@toradex.com>
+ */
+
+#include <linux/gpio/consumer.h>
+#include <linux/media-bus-format.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_graph.h>
+#include <linux/platform_device.h>
+#include <linux/slab.h>
+
+#include <drm/drm_atomic_helper.h>
+#include <drm/drm_bridge.h>
+#include <drm/drm_of.h>
+
+struct thc63lvd827 {
+	struct device *dev;
+	struct drm_bridge bridge;
+	struct drm_bridge *next_bridge;
+
+	struct gpio_desc *map_gpio;
+	struct gpio_desc *mode_gpio;
+	struct gpio_desc *b6b8_gpio;
+	struct gpio_desc *pd_gpio;
+
+	struct drm_bridge_timings timings;
+};
+
+static struct thc63lvd827 *bridge_to_thc63lvd827(struct drm_bridge *bridge)
+{
+	return container_of(bridge, struct thc63lvd827, bridge);
+}
+
+static int thc63lvd827_attach(struct drm_bridge *bridge,
+			      struct drm_encoder *encoder,
+			      enum drm_bridge_attach_flags flags)
+{
+	struct thc63lvd827 *thc63lvd827 = bridge_to_thc63lvd827(bridge);
+
+	return drm_bridge_attach(encoder, thc63lvd827->next_bridge, bridge, flags);
+}
+
+static u32 *
+thc63lvd827_atomic_get_input_bus_fmts(struct drm_bridge *bridge,
+				      struct drm_bridge_state *bridge_state,
+				      struct drm_crtc_state *crtc_state,
+				      struct drm_connector_state *conn_state,
+				      u32 output_fmt,
+				      unsigned int *num_input_fmts)
+{
+	u32 *input_fmts;
+
+	*num_input_fmts = 0;
+
+	input_fmts = kmalloc_obj(*input_fmts);
+	if (!input_fmts)
+		return NULL;
+
+	input_fmts[0] = MEDIA_BUS_FMT_RGB888_1X24;
+	*num_input_fmts = 1;
+
+	return input_fmts;
+}
+
+static void thc63lvd827_atomic_pre_enable(struct drm_bridge *bridge,
+					  struct drm_atomic_commit *state)
+{
+	struct thc63lvd827 *thc63lvd827 = bridge_to_thc63lvd827(bridge);
+	const struct drm_bridge_state *bridge_state;
+	int b6b8_val, map_val;
+
+	bridge_state = drm_atomic_get_new_bridge_state(state, bridge);
+
+	/*
+	 * 6B/8B: H = 6-bit (21-bit) mode, L = 8-bit (27-bit) mode.
+	 * MAP: H = Mapping Mode 1, L = Mapping Mode 2.
+	 */
+	switch (bridge_state->output_bus_cfg.format) {
+	case MEDIA_BUS_FMT_RGB666_1X7X3_SPWG:
+		b6b8_val = 1;
+		map_val = 1;
+		break;
+	case MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA:
+		b6b8_val = 0;
+		map_val = 1;
+		break;
+	default:
+	case MEDIA_BUS_FMT_RGB888_1X7X4_SPWG:
+		b6b8_val = 0;
+		map_val = 0;
+		break;
+	}
+
+	gpiod_set_value_cansleep(thc63lvd827->b6b8_gpio, b6b8_val);
+	gpiod_set_value_cansleep(thc63lvd827->map_gpio, map_val);
+	gpiod_set_value_cansleep(thc63lvd827->pd_gpio, 0);
+}
+
+static void thc63lvd827_atomic_post_disable(struct drm_bridge *bridge,
+					    struct drm_atomic_commit *state)
+{
+	struct thc63lvd827 *thc63lvd827 = bridge_to_thc63lvd827(bridge);
+
+	gpiod_set_value_cansleep(thc63lvd827->pd_gpio, 1);
+}
+
+static const struct drm_bridge_funcs thc63lvd827_bridge_funcs = {
+	.attach = thc63lvd827_attach,
+	.atomic_pre_enable = thc63lvd827_atomic_pre_enable,
+	.atomic_post_disable = thc63lvd827_atomic_post_disable,
+	.atomic_get_input_bus_fmts = thc63lvd827_atomic_get_input_bus_fmts,
+	.atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
+	.atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
+	.atomic_create_state = drm_atomic_helper_bridge_create_state,
+};
+
+static int thc63lvd827_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct thc63lvd827 *thc63lvd827;
+	struct device_node *ep;
+	u32 pclk_sample = 0;
+
+	thc63lvd827 = devm_drm_bridge_alloc(dev, struct thc63lvd827, bridge,
+					    &thc63lvd827_bridge_funcs);
+	if (IS_ERR(thc63lvd827))
+		return PTR_ERR(thc63lvd827);
+
+	thc63lvd827->dev = dev;
+
+	thc63lvd827->map_gpio = devm_gpiod_get_optional(dev, "map", GPIOD_OUT_LOW);
+	if (IS_ERR(thc63lvd827->map_gpio))
+		return dev_err_probe(dev, PTR_ERR(thc63lvd827->map_gpio),
+				     "failed to get MAP GPIO\n");
+
+	thc63lvd827->mode_gpio = devm_gpiod_get_optional(dev, "mode", GPIOD_OUT_HIGH);
+	if (IS_ERR(thc63lvd827->mode_gpio))
+		return dev_err_probe(dev, PTR_ERR(thc63lvd827->mode_gpio),
+				     "failed to get MODE GPIO\n");
+
+	thc63lvd827->b6b8_gpio = devm_gpiod_get_optional(dev, "b6b8", GPIOD_OUT_LOW);
+	if (IS_ERR(thc63lvd827->b6b8_gpio))
+		return dev_err_probe(dev, PTR_ERR(thc63lvd827->b6b8_gpio),
+				     "failed to get 6B/8B GPIO\n");
+
+	thc63lvd827->pd_gpio = devm_gpiod_get_optional(dev, "powerdown", GPIOD_OUT_HIGH);
+	if (IS_ERR(thc63lvd827->pd_gpio))
+		return dev_err_probe(dev, PTR_ERR(thc63lvd827->pd_gpio),
+				     "failed to get /PDWN GPIO\n");
+
+	thc63lvd827->next_bridge = devm_drm_of_get_bridge(dev, dev->of_node, 1, 0);
+	if (IS_ERR(thc63lvd827->next_bridge))
+		return dev_err_probe(dev, PTR_ERR(thc63lvd827->next_bridge),
+				     "failed to get downstream bridge\n");
+
+	ep = of_graph_get_endpoint_by_regs(dev->of_node, 0, 0);
+	of_property_read_u32(ep, "pclk-sample", &pclk_sample);
+	of_node_put(ep);
+
+	if (pclk_sample == 1)
+		thc63lvd827->timings.input_bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE;
+	else
+		thc63lvd827->timings.input_bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE;
+
+	thc63lvd827->bridge.of_node = dev->of_node;
+	thc63lvd827->bridge.timings = &thc63lvd827->timings;
+	thc63lvd827->bridge.type = DRM_MODE_CONNECTOR_LVDS;
+
+	platform_set_drvdata(pdev, thc63lvd827);
+
+	return devm_drm_bridge_add(dev, &thc63lvd827->bridge);
+}
+
+static const struct of_device_id thc63lvd827_of_match[] = {
+	{ .compatible = "thine,thc63lvd827" },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, thc63lvd827_of_match);
+
+static struct platform_driver thc63lvd827_driver = {
+	.probe = thc63lvd827_probe,
+	.driver = {
+		.name = "thc63lvd827",
+		.of_match_table = thc63lvd827_of_match,
+	},
+};
+module_platform_driver(thc63lvd827_driver);
+
+MODULE_DESCRIPTION("THine THC63LVD827 DPI to LVDS bridge driver");
+MODULE_LICENSE("GPL");
-- 
2.47.3



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v1 3/3] ARM: dts: imx7d-colibri-emmc: Add Toradex Capacitive Touch Display 10" LVDS
  2026-09-08 10:02 [PATCH v1 0/3] drm/bridge: Add Thine THC63LVD827 LVDS encoder and 10inch LVDS panel on Colibri iMX7 Francesco Dolcini
  2026-09-08 10:02 ` [PATCH v1 1/3] dt-bindings: display: bridge: Add THine THC63LVD827 Francesco Dolcini
  2026-09-08 10:02 ` [PATCH v1 2/3] drm/bridge: Add THine THC63LVD827 LVDS encoder Francesco Dolcini
@ 2026-09-08 10:02 ` Francesco Dolcini
  2 siblings, 0 replies; 5+ messages in thread
From: Francesco Dolcini @ 2026-09-08 10:02 UTC (permalink / raw)
  To: Francesco Dolcini, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec, Luca Ceresoli,
	David Airlie, Simona Vetter, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Frank Li, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
  Cc: Francesco Dolcini, dri-devel, devicetree, linux-kernel, imx,
	linux-arm-kernel

From: Francesco Dolcini <francesco.dolcini@toradex.com>

Add a device tree overlay for the Toradex Capacitive Touch Display 10.1"
LVDS connected via a DPI to LVDS on Iris carrier board. The panel is a
LogicTechno LT170410-2WHC 10.1" WXGA IPS LCD and the touch input is
provided by an Atmel MaxTouch capacitive touch controller.

The overlay is also combined with the Iris v2 carrier board device tree
to provide a ready-to-use DTB.

Link: https://developer.toradex.com/hardware/accessories/displays/capacitive-touch-display-101inch-lvds
Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
---
this is based on https://lore.kernel.org/all/20260901124921.78635-1-francesco@dolcini.it/
---
 arch/arm/boot/dts/nxp/imx/Makefile            |  6 ++
 ...emmc-iris-panel-cap-touch-10inch-lvds.dtso | 92 +++++++++++++++++++
 2 files changed, 98 insertions(+)
 create mode 100644 arch/arm/boot/dts/nxp/imx/imx7d-colibri-emmc-iris-panel-cap-touch-10inch-lvds.dtso

diff --git a/arch/arm/boot/dts/nxp/imx/Makefile b/arch/arm/boot/dts/nxp/imx/Makefile
index d1272104ef27..b9456e7e5310 100644
--- a/arch/arm/boot/dts/nxp/imx/Makefile
+++ b/arch/arm/boot/dts/nxp/imx/Makefile
@@ -424,6 +424,10 @@ imx7d-colibri-emmc-aster-panel-cap-touch-7inch-parallel-dtbs := \
 	imx7d-colibri-emmc-aster.dtb \
 	imx7d-colibri-emmc-panel-cap-touch-7inch-parallel.dtbo
 
+imx7d-colibri-emmc-iris-v2-panel-cap-touch-10inch-lvds-dtbs := \
+	imx7d-colibri-emmc-iris-v2.dtb \
+	imx7d-colibri-emmc-iris-panel-cap-touch-10inch-lvds.dtbo
+
 imx7d-colibri-emmc-iris-v2-panel-cap-touch-7inch-parallel-dtbs := \
 	imx7d-colibri-emmc-iris-v2.dtb \
 	imx7d-colibri-emmc-panel-cap-touch-7inch-parallel.dtbo
@@ -459,8 +463,10 @@ dtb-$(CONFIG_SOC_IMX7D) += \
 	imx7d-colibri-emmc-aster-panel-cap-touch-7inch-parallel.dtb \
 	imx7d-colibri-emmc-aster-vga.dtb \
 	imx7d-colibri-emmc-iris.dtb \
+	imx7d-colibri-emmc-iris-panel-cap-touch-10inch-lvds.dtbo \
 	imx7d-colibri-emmc-iris-vga.dtb \
 	imx7d-colibri-emmc-iris-v2.dtb \
+	imx7d-colibri-emmc-iris-v2-panel-cap-touch-10inch-lvds.dtb \
 	imx7d-colibri-emmc-iris-v2-panel-cap-touch-7inch-parallel.dtb \
 	imx7d-colibri-emmc-iris-v2-vga.dtb \
 	imx7d-colibri-emmc-eval-v3.dtb \
diff --git a/arch/arm/boot/dts/nxp/imx/imx7d-colibri-emmc-iris-panel-cap-touch-10inch-lvds.dtso b/arch/arm/boot/dts/nxp/imx/imx7d-colibri-emmc-iris-panel-cap-touch-10inch-lvds.dtso
new file mode 100644
index 000000000000..ad0f37c71708
--- /dev/null
+++ b/arch/arm/boot/dts/nxp/imx/imx7d-colibri-emmc-iris-panel-cap-touch-10inch-lvds.dtso
@@ -0,0 +1,92 @@
+// SPDX-License-Identifier: GPL-2.0-only OR MIT
+/*
+ * Copyright (c) Toradex
+ *
+ * Toradex Capacitive Touch Display 10.1" LVDS
+ *
+ * Toradex Capacitive Touch Display 10.1" on Iris v2 carrier board X7 / X5
+ * connectors through on-carrier LVDS transmitter
+ *
+ * https://developer.toradex.com/hardware/accessories/displays/capacitive-touch-display-101inch-lvds
+ * https://www.toradex.com/accessories/capacitive-touch-display-10.1-inch-lvds
+ * https://developer.toradex.com/hardware/colibri-som-family/carrier-boards/iris-carrier-board/
+ * https://www.toradex.com/products/carrier-board/iris-carrier-board
+ * https://docs.toradex.com/108421-colibri_arm_iris_carrier_board_datasheet.pdf
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+
+&{/} {
+	lvds-encoder {
+		compatible = "thine,thc63lvd827";
+		pinctrl-names = "default";
+		pinctrl-0 = <&pinctrl_lvds_transceiver>;
+		b6b8-gpios = <&gpio7 2 GPIO_ACTIVE_HIGH>;
+		map-gpios = <&gpio2 13 GPIO_ACTIVE_HIGH>;
+		mode-gpios = <&gpio7 3 GPIO_ACTIVE_HIGH>;
+		powerdown-gpios = <&gpio7 11 GPIO_ACTIVE_LOW>;
+
+		ports {
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			port@0 {
+				reg = <0>;
+
+				lvds_bridge_in: endpoint {
+					pclk-sample = <1>;
+					remote-endpoint = <&lcdif_out>;
+				};
+			};
+
+			port@1 {
+				reg = <1>;
+
+				lvds_bridge_out: endpoint {
+					remote-endpoint = <&lvds_panel_in>;
+				};
+			};
+		};
+	};
+
+	lvds-panel {
+		compatible = "logictechno,lt170410-2whc";
+		backlight = <&backlight>;
+		power-supply = <&reg_3v3>;
+
+		port {
+			lvds_panel_in: endpoint {
+				remote-endpoint = <&lvds_bridge_out>;
+			};
+		};
+	};
+};
+
+&atmel_mxt_ts {
+	pinctrl-0 = <&pinctrl_atmel_connector>;
+	/* SODIMM 107 / TOUCH_INT# */
+	interrupt-parent = <&gpio2>;
+	interrupts = <15 IRQ_TYPE_EDGE_FALLING>;
+	/* SODIMM 106 / TOUCH_RST# */
+	reset-gpios = <&gpio2 28 GPIO_ACTIVE_LOW>;
+
+	status = "okay";
+};
+
+&backlight {
+	status = "okay";
+};
+
+&lcdif {
+	status = "okay";
+
+	port {
+		lcdif_out: endpoint {
+			remote-endpoint = <&lvds_bridge_in>;
+		};
+	};
+};
-- 
2.47.3



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v1 1/3] dt-bindings: display: bridge: Add THine THC63LVD827
  2026-09-08 10:02 ` [PATCH v1 1/3] dt-bindings: display: bridge: Add THine THC63LVD827 Francesco Dolcini
@ 2026-09-09 19:18   ` Frank Li
  0 siblings, 0 replies; 5+ messages in thread
From: Frank Li @ 2026-09-09 19:18 UTC (permalink / raw)
  To: Francesco Dolcini
  Cc: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
	Jonas Karlman, Jernej Skrabec, Luca Ceresoli, Maarten Lankhorst,
	Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Frank Li,
	Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	Francesco Dolcini, dri-devel, devicetree, linux-kernel, imx,
	linux-arm-kernel

On Tue, Sep 08, 2026 at 12:02:25PM +0200, Francesco Dolcini wrote:
> From: Francesco Dolcini <francesco.dolcini@toradex.com>
>
> Add THine THC63LVD827 DPI to LVDS encoder.
>
> The THC63LVD827 is a simple DPI to LVDS encoder that can be configured
> with input pins.
>
> Link: https://www.thine.co.jp/en/products/detail/THC63LVD827.html
> Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
> ---
>  .../display/bridge/thine,thc63lvd827.yaml     | 126 ++++++++++++++++++
>  MAINTAINERS                                   |   5 +
>  2 files changed, 131 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/display/bridge/thine,thc63lvd827.yaml
>
> diff --git a/Documentation/devicetree/bindings/display/bridge/thine,thc63lvd827.yaml b/Documentation/devicetree/bindings/display/bridge/thine,thc63lvd827.yaml
> new file mode 100644
> index 000000000000..ead50802e11e
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/display/bridge/thine,thc63lvd827.yaml
> @@ -0,0 +1,126 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/display/bridge/thine,thc63lvd827.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: THine THC63LVD827 DPI to LVDS encoder
> +
> +maintainers:
> +  - Francesco Dolcini <francesco.dolcini@toradex.com>
> +
> +description: |

Nit: Needn't "|"  should be ">" here

Frank

> +  The THC63LVD827 converts a 24-bit parallel RGB interface plus HSYNC,
> +  VSYNC and data-enable to single-link or dual-link LVDS.
> +
> +  The LVDS output data mapping is configured using the MAP and 6B/8B inputs,
> +  that can be controlled by GPIOs.
> +
> +  The LVDS output link mode (single/dual) is configured using the MODE input.
> +
> +  The parallel interface pixel clock sample polarity is configurable with the
> +  R/F input strap option.
> +
> +properties:
> +  compatible:
> +    const: thine,thc63lvd827
> +
> +  map-gpios:
> +    maxItems: 1
> +    description:
> +      GPIO connected to the MAP input. A high level selects Mapping Mode 1
> +      and a low level selects Mapping Mode 2.
> +
> +  mode-gpios:
> +    maxItems: 1
> +    description:
> +      GPIO connected to the MODE input. A high level selects single-link
> +      LVDS output and a low level selects dual-link LVDS output.
> +
> +  b6b8-gpios:
> +    maxItems: 1
> +    description:
> +      GPIO connected to the 6B/8B input. A high level selects 6-bit (21-bit)
> +      mode and a low level selects 8-bit (27-bit) mode.
> +
> +  powerdown-gpios:
> +    maxItems: 1
> +    description:
> +      GPIO connected to the active-low /PDWN input. A high level selects
> +      normal operation and a low level power down the chip.
> +
> +  ports:
> +    $ref: /schemas/graph.yaml#/properties/ports
> +
> +    properties:
> +      port@0:
> +        $ref: /schemas/graph.yaml#/$defs/port-base
> +        unevaluatedProperties: false
> +        description: Parallel RGB input
> +
> +        properties:
> +          endpoint:
> +            $ref: /schemas/media/video-interfaces.yaml
> +            unevaluatedProperties: false
> +
> +            properties:
> +              pclk-sample:
> +                description:
> +                  Sample data on falling (0) or rising (1) edges of the pixel
> +                  clock signal.
> +                enum: [ 0, 1 ]
> +                default: 0
> +
> +      port@1:
> +        $ref: /schemas/graph.yaml#/properties/port
> +        description: LVDS output 1st link, used in single- and dual-link mode.
> +
> +      port@2:
> +        $ref: /schemas/graph.yaml#/properties/port
> +        description: Optional LVDS output 2nd link, for dual-link mode.
> +
> +    required:
> +      - port@0
> +      - port@1
> +
> +required:
> +  - compatible
> +  - ports
> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    #include <dt-bindings/gpio/gpio.h>
> +
> +    lvds-encoder {
> +        compatible = "thine,thc63lvd827";
> +
> +        map-gpios = <&gpio4 10 GPIO_ACTIVE_HIGH>;
> +        mode-gpios = <&gpio4 11 GPIO_ACTIVE_HIGH>;
> +        powerdown-gpios = <&gpio4 12 GPIO_ACTIVE_LOW>;
> +
> +        ports {
> +            #address-cells = <1>;
> +            #size-cells = <0>;
> +
> +            port@0 {
> +                reg = <0>;
> +
> +                endpoint {
> +                    pclk-sample = <1>;
> +                    remote-endpoint = <&dpi_out>;
> +                };
> +            };
> +
> +            port@1 {
> +                reg = <1>;
> +
> +                endpoint {
> +                    remote-endpoint = <&lvds_display_in>;
> +                };
> +            };
> +        };
> +    };
> +
> +...
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 6215fcb07770..0b5a25a35367 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -8580,6 +8580,11 @@ F:	Documentation/devicetree/bindings/display/rockchip/rockchip,dw-dp.yaml
>  F:	drivers/gpu/drm/bridge/synopsys/dw-dp.c
>  F:	include/drm/bridge/dw_dp.h
>
> +DRM DRIVER FOR THINE THC63LVD827 DPI TO LVDS BRIDGE
> +M:	Francesco Dolcini <francesco@dolcini.it>
> +S:	Maintained
> +F:	Documentation/devicetree/bindings/display/bridge/thine,thc63lvd827.yaml
> +
>  DRM DRIVER FOR TI DLPC3433 MIPI DSI TO DMD BRIDGE
>  M:	Jagan Teki <jagan@amarulasolutions.com>
>  S:	Maintained
> --
> 2.47.3
>
>


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-09-09 19:19 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-08 10:02 [PATCH v1 0/3] drm/bridge: Add Thine THC63LVD827 LVDS encoder and 10inch LVDS panel on Colibri iMX7 Francesco Dolcini
2026-09-08 10:02 ` [PATCH v1 1/3] dt-bindings: display: bridge: Add THine THC63LVD827 Francesco Dolcini
2026-09-09 19:18   ` Frank Li
2026-09-08 10:02 ` [PATCH v1 2/3] drm/bridge: Add THine THC63LVD827 LVDS encoder Francesco Dolcini
2026-09-08 10:02 ` [PATCH v1 3/3] ARM: dts: imx7d-colibri-emmc: Add Toradex Capacitive Touch Display 10" LVDS Francesco Dolcini

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox