<br><br><br>Sent from ProtonMail mobile<br><br><br><br>-------- Original Message --------<br>On Mar 10, 2021, 12:10, < dri-devel-request@lists.freedesktop.org> wrote:<blockquote class="protonmail_quote"><br><p dir="ltr">Send dri-devel mailing list submissions to<br>
dri-devel@lists.freedesktop.org</p>
<p dir="ltr">To subscribe or unsubscribe via the World Wide Web, visit<br>
<a href="https://lists.freedesktop.org/mailman/listinfo/dri-devel">https://lists.freedesktop.org/mailman/listinfo/dri-devel</a><br>
or, via email, send a message with subject or body 'help' to<br>
dri-devel-request@lists.freedesktop.org</p>
<p dir="ltr">You can reach the person managing the list at<br>
dri-devel-owner@lists.freedesktop.org</p>
<p dir="ltr">When replying, please edit your Subject line so it is more specific<br>
than "Re: Contents of dri-devel digest..."<br></p>
<p dir="ltr">Today's Topics:</p>
<p dir="ltr">1. [PATCH v5 10/14] drm/bridge: imx: Add LDB driver helper<br>
support (Liu Ying)<br>
2. [PATCH v5 11/14] dt-bindings: display: bridge: Add<br>
i.MX8qm/qxp LVDS display bridge binding (Liu Ying)<br></p>
<p dir="ltr">----------------------------------------------------------------------</p>
<p dir="ltr">Message: 1<br>
Date: Wed, 10 Mar 2021 17:55:34 +0800<br>
From: Liu Ying <victor.liu@nxp.com><br>
To: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org,<br>
linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org,<br>
linux-media@vger.kernel.org<br>
Cc: airlied@linux.ie, daniel@ffwll.ch, robh+dt@kernel.org,<br>
shawnguo@kernel.org, s.hauer@pengutronix.de, kernel@pengutronix.de,<br>
festevam@gmail.com, linux-imx@nxp.com, mchehab@kernel.org,<br>
a.hajda@samsung.com, narmstrong@baylibre.com,<br>
Laurent.pinchart@ideasonboard.com, jonas@kwiboo.se,<br>
jernej.skrabec@siol.net, kishon@ti.com, vkoul@kernel.org,<br>
robert.foss@linaro.org, lee.jones@linaro.org<br>
Subject: [PATCH v5 10/14] drm/bridge: imx: Add LDB driver helper<br>
support<br>
Message-ID: <1615370138-5673-11-git-send-email-victor.liu@nxp.com><br>
Content-Type: text/plain</p>
<p dir="ltr">This patch adds a helper to support LDB drm bridge drivers for<br>
<a href="http://i.MX">i.MX</a> SoCs. Helper functions supported by this helper should<br>
implement common logics for all LDB modules embedded in <a href="http://i.MX">i.MX</a> SoCs.</p>
<p dir="ltr">Signed-off-by: Liu Ying <victor.liu@nxp.com><br>
---<br>
v4->v5:<br>
* Make imx-ldb-helper be a pure object to be linked with i.MX8qxp LDB bridge<br>
driver and i.MX8qm LDB bridge driver. (Robert)<br>
* Move 'imx_ldb_helper.h' to 'drivers/gpu/drm/bridge/imx/imx-ldb-helper.h'.<br>
(Robert)<br>
* s/__FSL_IMX_LDB__/__IMX_LDB_HELPER__/ for 'imx-ldb-helper.h'.</p>
<p dir="ltr">v3->v4:<br>
* No change.</p>
<p dir="ltr">v2->v3:<br>
* Call syscon_node_to_regmap() to get regmap instead of<br>
syscon_regmap_lookup_by_phandle().</p>
<p dir="ltr">v1->v2:<br>
* No change.</p>
<p dir="ltr">drivers/gpu/drm/bridge/imx/imx-ldb-helper.c | 232 ++++++++++++++++++++++++++++<br>
drivers/gpu/drm/bridge/imx/imx-ldb-helper.h | 98 ++++++++++++<br>
2 files changed, 330 insertions(+)<br>
create mode 100644 drivers/gpu/drm/bridge/imx/imx-ldb-helper.c<br>
create mode 100644 drivers/gpu/drm/bridge/imx/imx-ldb-helper.h</p>
<p dir="ltr">diff --git a/drivers/gpu/drm/bridge/imx/imx-ldb-helper.c b/drivers/gpu/drm/bridge/imx/imx-ldb-helper.c<br>
new file mode 100644<br>
index 00000000..d01c4ff9<br>
--- /dev/null<br>
+++ b/drivers/gpu/drm/bridge/imx/imx-ldb-helper.c<br>
@@ -0,0 +1,232 @@<br>
+// SPDX-License-Identifier: GPL-2.0+<br>
+/*<br>
+ * Copyright (C) 2012 Sascha Hauer, Pengutronix<br>
+ * Copyright 2019,2020 NXP<br>
+ */<br>
+<br>
+#include <linux/mfd/syscon.h><br>
+#include <linux/of.h><br>
+#include <linux/regmap.h><br>
+<br>
+#include <drm/drm_of.h><br>
+#include <drm/drm_panel.h><br>
+#include <drm/drm_print.h><br>
+<br>
+#include "imx-ldb-helper.h"<br>
+<br>
+bool ldb_channel_is_single_link(struct ldb_channel *ldb_ch)<br>
+{<br>
+ return ldb_ch->link_type == LDB_CH_SINGLE_LINK;<br>
+}<br>
+<br>
+bool ldb_channel_is_split_link(struct ldb_channel *ldb_ch)<br>
+{<br>
+ return ldb_ch->link_type == LDB_CH_DUAL_LINK_EVEN_ODD_PIXELS ||<br>
+  ldb_ch->link_type == LDB_CH_DUAL_LINK_ODD_EVEN_PIXELS;<br>
+}<br>
+<br>
+int ldb_bridge_atomic_check_helper(struct drm_bridge *bridge,<br>
+  struct drm_bridge_state *bridge_state,<br>
+  struct drm_crtc_state *crtc_state,<br>
+  struct drm_connector_state *conn_state)<br>
+{<br>
+ struct ldb_channel *ldb_ch = bridge->driver_private;<br>
+<br>
+ ldb_ch->in_bus_format = bridge_state->input_bus_cfg.format;<br>
+ ldb_ch->out_bus_format = bridge_state->output_bus_cfg.format;<br>
+<br>
+ return 0;<br>
+}<br>
+<br>
+void ldb_bridge_mode_set_helper(struct drm_bridge *bridge,<br>
+ const struct drm_display_mode *mode,<br>
+ const struct drm_display_mode *adjusted_mode)<br>
+{<br>
+ struct ldb_channel *ldb_ch = bridge->driver_private;<br>
+ struct ldb *ldb = ldb_ch->ldb;<br>
+ bool is_split = ldb_channel_is_split_link(ldb_ch);<br>
+<br>
+ if (is_split)<br>
+ ldb->ldb_ctrl |= LDB_SPLIT_MODE_EN;<br>
+<br>
+ switch (ldb_ch->out_bus_format) {<br>
+ case MEDIA_BUS_FMT_RGB666_1X7X3_SPWG:<br>
+ break;<br>
+ case MEDIA_BUS_FMT_RGB888_1X7X4_SPWG:<br>
+ if (ldb_ch->chno == 0 || is_split)<br>
+ ldb->ldb_ctrl |= LDB_DATA_WIDTH_CH0_24;<br>
+ if (ldb_ch->chno == 1 || is_split)<br>
+ ldb->ldb_ctrl |= LDB_DATA_WIDTH_CH1_24;<br>
+ break;<br>
+ case MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA:<br>
+ if (ldb_ch->chno == 0 || is_split)<br>
+ ldb->ldb_ctrl |= LDB_DATA_WIDTH_CH0_24 |<br>
+  LDB_BIT_MAP_CH0_JEIDA;<br>
+ if (ldb_ch->chno == 1 || is_split)<br>
+ ldb->ldb_ctrl |= LDB_DATA_WIDTH_CH1_24 |<br>
+  LDB_BIT_MAP_CH1_JEIDA;<br>
+ break;<br>
+ }<br>
+}<br>
+<br>
+void ldb_bridge_enable_helper(struct drm_bridge *bridge)<br>
+{<br>
+ struct ldb_channel *ldb_ch = bridge->driver_private;<br>
+ struct ldb *ldb = ldb_ch->ldb;<br>
+<br>
+ /*<br>
+  * Platform specific bridge drivers should set ldb_ctrl properly<br>
+  * for the enablement, so just write the ctrl_reg here.<br>
+  */<br>
+ regmap_write(ldb->regmap, ldb->ctrl_reg, ldb->ldb_ctrl);<br>
+}<br>
+<br>
+void ldb_bridge_disable_helper(struct drm_bridge *bridge)<br>
+{<br>
+ struct ldb_channel *ldb_ch = bridge->driver_private;<br>
+ struct ldb *ldb = ldb_ch->ldb;<br>
+ bool is_split = ldb_channel_is_split_link(ldb_ch);<br>
+<br>
+ if (ldb_ch->chno == 0 || is_split)<br>
+ ldb->ldb_ctrl &= ~LDB_CH0_MODE_EN_MASK;<br>
+ if (ldb_ch->chno == 1 || is_split)<br>
+ ldb->ldb_ctrl &= ~LDB_CH1_MODE_EN_MASK;<br>
+<br>
+ regmap_write(ldb->regmap, ldb->ctrl_reg, ldb->ldb_ctrl);<br>
+}<br>
+<br>
+int ldb_bridge_attach_helper(struct drm_bridge *bridge,<br>
+  enum drm_bridge_attach_flags flags)<br>
+{<br>
+ struct ldb_channel *ldb_ch = bridge->driver_private;<br>
+ struct ldb *ldb = ldb_ch->ldb;<br>
+<br>
+ if (!(flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR)) {<br>
+ DRM_DEV_ERROR(ldb->dev,<br>
+  "do not support creating a drm_connector\n");<br>
+ return -EINVAL;<br>
+ }<br>
+<br>
+ if (!bridge->encoder) {<br>
+ DRM_DEV_ERROR(ldb->dev, "missing encoder\n");<br>
+ return -ENODEV;<br>
+ }<br>
+<br>
+ return drm_bridge_attach(bridge->encoder,<br>
+ ldb_ch->next_bridge, bridge,<br>
+ DRM_BRIDGE_ATTACH_NO_CONNECTOR);<br>
+}<br>
+<br>
+int ldb_init_helper(struct ldb *ldb)<br>
+{<br>
+ struct device *dev = ldb->dev;<br>
+ struct device_node *np = dev->of_node;<br>
+ struct device_node *child;<br>
+ int ret;<br>
+ u32 i;<br>
+<br>
+ ldb->regmap = syscon_node_to_regmap(np->parent);<br>
+ if (IS_ERR(ldb->regmap)) {<br>
+ ret = PTR_ERR(ldb->regmap);<br>
+ if (ret != -EPROBE_DEFER)<br>
+ DRM_DEV_ERROR(dev, "failed to get regmap: %d\n", ret);<br>
+ return ret;<br>
+ }<br>
+<br>
+ for_each_available_child_of_node(np, child) {<br>
+ struct ldb_channel *ldb_ch;<br>
+<br>
+ ret = of_property_read_u32(child, "reg", &i);<br>
+ if (ret || i > MAX_LDB_CHAN_NUM - 1) {<br>
+ ret = -EINVAL;<br>
+ DRM_DEV_ERROR(dev,<br>
+  "invalid channel node address: %u\n", i);<br>
+ of_node_put(child);<br>
+ return ret;<br>
+ }<br>
+<br>
+ ldb_ch = ldb->channel[i];<br>
+ ldb_ch->ldb = ldb;<br>
+ ldb_ch->chno = i;<br>
+ ldb_ch->is_available = true;<br>
+ ldb_ch->np = child;<br>
+<br>
+ ldb->available_ch_cnt++;<br>
+ }<br>
+<br>
+ return 0;<br>
+}<br>
+<br>
+int ldb_find_next_bridge_helper(struct ldb *ldb)<br>
+{<br>
+ struct device *dev = ldb->dev;<br>
+ struct ldb_channel *ldb_ch;<br>
+ int ret, i;<br>
+<br>
+ for (i = 0; i < MAX_LDB_CHAN_NUM; i++) {<br>
+ ldb_ch = ldb->channel[i];<br>
+<br>
+ if (!ldb_ch->is_available)<br>
+ continue;<br>
+<br>
+ ret = drm_of_find_panel_or_bridge(ldb_ch->np, 1, 0,<br>
+  &ldb_ch->panel,<br>
+  &ldb_ch->next_bridge);<br>
+ if (ret) {<br>
+ if (ret != -EPROBE_DEFER)<br>
+ DRM_DEV_ERROR(dev,<br>
+ "failed to find panel or bridge: %d\n",<br>
+ ret);<br>
+ return ret;<br>
+ }<br>
+<br>
+ if (ldb_ch->panel) {<br>
+ ldb_ch->next_bridge = devm_drm_panel_bridge_add(dev,<br>
+ ldb_ch->panel);<br>
+ if (IS_ERR(ldb_ch->next_bridge)) {<br>
+ ret = PTR_ERR(ldb_ch->next_bridge);<br>
+ DRM_DEV_ERROR(dev,<br>
+ "failed to add panel bridge: %d\n",<br>
+ ret);<br>
+ return ret;<br>
+ }<br>
+ }<br>
+ }<br>
+<br>
+ return 0;<br>
+}<br>
+<br>
+void ldb_add_bridge_helper(struct ldb *ldb,<br>
+  const struct drm_bridge_funcs *bridge_funcs)<br>
+{<br>
+ struct ldb_channel *ldb_ch;<br>
+ int i;<br>
+<br>
+ for (i = 0; i < MAX_LDB_CHAN_NUM; i++) {<br>
+ ldb_ch = ldb->channel[i];<br>
+<br>
+ if (!ldb_ch->is_available)<br>
+ continue;<br>
+<br>
+ ldb_ch->bridge.driver_private = ldb_ch;<br>
+ ldb_ch->bridge.funcs = bridge_funcs;<br>
+ ldb_ch->bridge.of_node = ldb_ch->np;<br>
+<br>
+ drm_bridge_add(&ldb_ch->bridge);<br>
+ }<br>
+}<br>
+<br>
+void ldb_remove_bridge_helper(struct ldb *ldb)<br>
+{<br>
+ struct ldb_channel *ldb_ch;<br>
+ int i;<br>
+<br>
+ for (i = 0; i < MAX_LDB_CHAN_NUM; i++) {<br>
+ ldb_ch = ldb->channel[i];<br>
+<br>
+ if (!ldb_ch->is_available)<br>
+ continue;<br>
+<br>
+ drm_bridge_remove(&ldb_ch->bridge);<br>
+ }<br>
+}<br>
diff --git a/drivers/gpu/drm/bridge/imx/imx-ldb-helper.h b/drivers/gpu/drm/bridge/imx/imx-ldb-helper.h<br>
new file mode 100644<br>
index 00000000..748c378<br>
--- /dev/null<br>
+++ b/drivers/gpu/drm/bridge/imx/imx-ldb-helper.h<br>
@@ -0,0 +1,98 @@<br>
+/* SPDX-License-Identifier: GPL-2.0+ */<br>
+<br>
+/*<br>
+ * Copyright 2019,2020 NXP<br>
+ */<br>
+<br>
+#ifndef __IMX_LDB_HELPER__<br>
+#define __IMX_LDB_HELPER__<br>
+<br>
+#include <linux/device.h><br>
+#include <linux/kernel.h><br>
+#include <linux/of.h><br>
+#include <linux/regmap.h><br>
+<br>
+#include <drm/drm_atomic.h><br>
+#include <drm/drm_bridge.h><br>
+#include <drm/drm_device.h><br>
+#include <drm/drm_encoder.h><br>
+#include <drm/drm_modeset_helper_vtables.h><br>
+#include <drm/drm_panel.h><br>
+<br>
+#define LDB_CH0_MODE_EN_TO_DI0 (1 << 0)<br>
+#define LDB_CH0_MODE_EN_TO_DI1 (3 << 0)<br>
+#define LDB_CH0_MODE_EN_MASK (3 << 0)<br>
+#define LDB_CH1_MODE_EN_TO_DI0 (1 << 2)<br>
+#define LDB_CH1_MODE_EN_TO_DI1 (3 << 2)<br>
+#define LDB_CH1_MODE_EN_MASK (3 << 2)<br>
+#define LDB_SPLIT_MODE_EN (1 << 4)<br>
+#define LDB_DATA_WIDTH_CH0_24 (1 << 5)<br>
+#define LDB_BIT_MAP_CH0_JEIDA (1 << 6)<br>
+#define LDB_DATA_WIDTH_CH1_24 (1 << 7)<br>
+#define LDB_BIT_MAP_CH1_JEIDA (1 << 8)<br>
+#define LDB_DI0_VS_POL_ACT_LOW (1 << 9)<br>
+#define LDB_DI1_VS_POL_ACT_LOW (1 << 10)<br>
+<br>
+#define MAX_LDB_CHAN_NUM 2<br>
+<br>
+enum ldb_channel_link_type {<br>
+ LDB_CH_SINGLE_LINK,<br>
+ LDB_CH_DUAL_LINK_EVEN_ODD_PIXELS,<br>
+ LDB_CH_DUAL_LINK_ODD_EVEN_PIXELS,<br>
+};<br>
+<br>
+struct ldb;<br>
+<br>
+struct ldb_channel {<br>
+ struct ldb *ldb;<br>
+ struct drm_bridge bridge;<br>
+ struct drm_panel *panel;<br>
+ struct drm_bridge *next_bridge;<br>
+ struct device_node *np;<br>
+ u32 chno;<br>
+ bool is_available;<br>
+ u32 in_bus_format;<br>
+ u32 out_bus_format;<br>
+ enum ldb_channel_link_type link_type;<br>
+};<br>
+<br>
+struct ldb {<br>
+ struct regmap *regmap;<br>
+ struct device *dev;<br>
+ struct ldb_channel *channel[MAX_LDB_CHAN_NUM];<br>
+ unsigned int ctrl_reg;<br>
+ u32 ldb_ctrl;<br>
+ unsigned int available_ch_cnt;<br>
+};<br>
+<br>
+#define bridge_to_ldb_ch(b) container_of(b, struct ldb_channel, bridge)<br>
+<br>
+bool ldb_channel_is_single_link(struct ldb_channel *ldb_ch);<br>
+bool ldb_channel_is_split_link(struct ldb_channel *ldb_ch);<br>
+<br>
+int ldb_bridge_atomic_check_helper(struct drm_bridge *bridge,<br>
+  struct drm_bridge_state *bridge_state,<br>
+  struct drm_crtc_state *crtc_state,<br>
+  struct drm_connector_state *conn_state);<br>
+<br>
+void ldb_bridge_mode_set_helper(struct drm_bridge *bridge,<br>
+ const struct drm_display_mode *mode,<br>
+ const struct drm_display_mode *adjusted_mode);<br>
+<br>
+void ldb_bridge_enable_helper(struct drm_bridge *bridge);<br>
+<br>
+void ldb_bridge_disable_helper(struct drm_bridge *bridge);<br>
+<br>
+int ldb_bridge_attach_helper(struct drm_bridge *bridge,<br>
+  enum drm_bridge_attach_flags flags);<br>
+<br>
+int ldb_init_helper(struct ldb *ldb);<br>
+<br>
+int ldb_find_next_bridge_helper(struct ldb *ldb);<br>
+<br>
+void ldb_add_bridge_helper(struct ldb *ldb,<br>
+  const struct drm_bridge_funcs *bridge_funcs);<br>
+<br>
+void ldb_remove_bridge_helper(struct ldb *ldb);<br>
+<br>
+#endif /* __IMX_LDB_HELPER__ */<br>
--<br>
2.7.4<br><br></p>
<p dir="ltr">------------------------------</p>
<p dir="ltr">Message: 2<br>
Date: Wed, 10 Mar 2021 17:55:35 +0800<br>
From: Liu Ying <victor.liu@nxp.com><br>
To: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org,<br>
linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org,<br>
linux-media@vger.kernel.org<br>
Cc: airlied@linux.ie, daniel@ffwll.ch, robh+dt@kernel.org,<br>
shawnguo@kernel.org, s.hauer@pengutronix.de, kernel@pengutronix.de,<br>
festevam@gmail.com, linux-imx@nxp.com, mchehab@kernel.org,<br>
a.hajda@samsung.com, narmstrong@baylibre.com,<br>
Laurent.pinchart@ideasonboard.com, jonas@kwiboo.se,<br>
jernej.skrabec@siol.net, kishon@ti.com, vkoul@kernel.org,<br>
robert.foss@linaro.org, lee.jones@linaro.org<br>
Subject: [PATCH v5 11/14] dt-bindings: display: bridge: Add<br>
i.MX8qm/qxp LVDS display bridge binding<br>
Message-ID: <1615370138-5673-12-git-send-email-victor.liu@nxp.com><br>
Content-Type: text/plain</p>
<p dir="ltr">This patch adds bindings for i.MX8qm/qxp LVDS display bridge(LDB).</p>
<p dir="ltr">Reviewed-by: Rob Herring <robh@kernel.org><br>
Signed-off-by: Liu Ying <victor.liu@nxp.com><br>
---<br>
v4->v5:<br>
* No change.</p>
<p dir="ltr">v3->v4:<br>
* Add Rob's R-b tag.</p>
<p dir="ltr">v2->v3:<br>
* Drop 'fsl,syscon' property. (Rob)<br>
* Mention the CSR module controls LDB.</p>
<p dir="ltr">v1->v2:<br>
* Use graph schema. (Laurent)<br>
* Side note i.MX8qxp LDB official name 'pixel mapper'. (Laurent)</p>
<p dir="ltr">.../bindings/display/bridge/fsl,imx8qxp-ldb.yaml | 173 +++++++++++++++++++++<br>
1 file changed, 173 insertions(+)<br>
create mode 100644 Documentation/devicetree/bindings/display/bridge/fsl,imx8qxp-ldb.yaml</p>
<p dir="ltr">diff --git a/Documentation/devicetree/bindings/display/bridge/fsl,imx8qxp-ldb.yaml b/Documentation/devicetree/bindings/display/bridge/fsl,imx8qxp-ldb.yaml<br>
new file mode 100644<br>
index 00000000..9454300<br>
--- /dev/null<br>
+++ b/Documentation/devicetree/bindings/display/bridge/fsl,imx8qxp-ldb.yaml<br>
@@ -0,0 +1,173 @@<br>
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)<br>
+%YAML 1.2<br>
+---<br>
+$id: <a href="http://devicetree.org/schemas/display/bridge/fsl,imx8qxp-ldb.yaml">http://devicetree.org/schemas/display/bridge/fsl,imx8qxp-ldb.yaml</a>#<br>
+$schema: <a href="http://devicetree.org/meta-schemas/core.yaml">http://devicetree.org/meta-schemas/core.yaml</a>#<br>
+<br>
+title: Freescale i.MX8qm/qxp LVDS Display Bridge<br>
+<br>
+maintainers:<br>
+ - Liu Ying <victor.liu@nxp.com><br>
+<br>
+description: |<br>
+ The Freescale i.MX8qm/qxp LVDS Display Bridge(LDB) has two channels.<br>
+<br>
+ The i.MX8qm/qxp LDB is controlled by Control and Status Registers(CSR) module.<br>
+ The CSR module, as a system controller, contains the LDB's configuration<br>
+ registers.<br>
+<br>
+ For i.MX8qxp LDB, each channel supports up to 24bpp parallel input color<br>
+ format and can map the input to VESA or JEIDA standards. The two channels<br>
+ cannot be used simultaneously, that is to say, the user should pick one of<br>
+ them to use. Two LDB channels from two LDB instances can work together in<br>
+ LDB split mode to support a dual link LVDS display. The channel indexes<br>
+ have to be different. Channel0 outputs odd pixels and channel1 outputs<br>
+ even pixels.<br>
+<br>
+ For i.MX8qm LDB, each channel additionally supports up to 30bpp parallel<br>
+ input color format. The two channels can be used simultaneously, either<br>
+ in dual mode or split mode. In dual mode, the two channels output identical<br>
+ data. In split mode, channel0 outputs odd pixels and channel1 outputs even<br>
+ pixels.<br>
+<br>
+ A side note is that i.MX8qm/qxp LDB is officially called pixel mapper in<br>
+ the SoC reference manuals. The pixel mapper uses logic of LDBs embedded in<br>
+ i.MX6qdl/sx SoCs, i.e., it is essentially based on them. To keep the naming<br>
+ consistency, this binding calls it LDB.<br>
+<br>
+properties:<br>
+ compatible:<br>
+ enum:<br>
+ - fsl,imx8qm-ldb<br>
+ - fsl,imx8qxp-ldb<br>
+<br>
+ "#address-cells":<br>
+ const: 1<br>
+<br>
+ "#size-cells":<br>
+ const: 0<br>
+<br>
+ clocks:<br>
+ items:<br>
+ - description: pixel clock<br>
+ - description: bypass clock<br>
+<br>
+ clock-names:<br>
+ items:<br>
+ - const: pixel<br>
+ - const: bypass<br>
+<br>
+ power-domains:<br>
+ maxItems: 1<br>
+<br>
+ fsl,companion-ldb:<br>
+ $ref: /schemas/types.yaml#/definitions/phandle<br>
+ description: |<br>
+ A phandle which points to companion LDB which is used in LDB split mode.<br>
+<br>
+patternProperties:<br>
+ "^channel@[0-1]$":<br>
+ type: object<br>
+ description: Represents a channel of LDB.<br>
+<br>
+ properties:<br>
+ "#address-cells":<br>
+ const: 1<br>
+<br>
+ "#size-cells":<br>
+ const: 0<br>
+<br>
+ reg:<br>
+ description: The channel index.<br>
+ enum: [ 0, 1 ]<br>
+<br>
+ phys:<br>
+ description: A phandle to the phy module representing the LVDS PHY.<br>
+ maxItems: 1<br>
+<br>
+ phy-names:<br>
+ const: lvds_phy<br>
+<br>
+ port@0:<br>
+ $ref: /schemas/graph.yaml#/properties/port<br>
+ description: Input port of the channel.<br>
+<br>
+ port@1:<br>
+ $ref: /schemas/graph.yaml#/properties/port<br>
+ description: Output port of the channel.<br>
+<br>
+ required:<br>
+ - "#address-cells"<br>
+ - "#size-cells"<br>
+ - reg<br>
+ - phys<br>
+ - phy-names<br>
+<br>
+ additionalProperties: false<br>
+<br>
+required:<br>
+ - compatible<br>
+ - "#address-cells"<br>
+ - "#size-cells"<br>
+ - clocks<br>
+ - clock-names<br>
+ - power-domains<br>
+ - channel@0<br>
+ - channel@1<br>
+<br>
+allOf:<br>
+ - if:<br>
+ properties:<br>
+ compatible:<br>
+ contains:<br>
+ const: fsl,imx8qm-ldb<br>
+ then:<br>
+ properties:<br>
+ fsl,companion-ldb: false<br>
+<br>
+additionalProperties: false<br>
+<br>
+examples:<br>
+ - |<br>
+ #include <dt-bindings/firmware/imx/rsrc.h><br>
+ ldb {<br>
+ #address-cells = <1>;<br>
+ #size-cells = <0>;<br>
+ compatible = "fsl,imx8qxp-ldb";<br>
+ clocks = <&clk IMX_SC_R_LVDS_0 IMX_SC_PM_CLK_MISC2>,<br>
+ <&clk IMX_SC_R_LVDS_0 IMX_SC_PM_CLK_BYPASS>;<br>
+ clock-names = "pixel", "bypass";<br>
+ power-domains = <&pd IMX_SC_R_LVDS_0>;<br>
+<br>
+ channel@0 {<br>
+ #address-cells = <1>;<br>
+ #size-cells = <0>;<br>
+ reg = <0>;<br>
+ phys = <&mipi_lvds_0_phy>;<br>
+ phy-names = "lvds_phy";<br>
+<br>
+ port@0 {<br>
+ reg = <0>;<br>
+<br>
+ mipi_lvds_0_ldb_ch0_mipi_lvds_0_pxl2dpi: endpoint {<br>
+ remote-endpoint = <&mipi_lvds_0_pxl2dpi_mipi_lvds_0_ldb_ch0>;<br>
+ };<br>
+ };<br>
+ };<br>
+<br>
+ channel@1 {<br>
+ #address-cells = <1>;<br>
+ #size-cells = <0>;<br>
+ reg = <1>;<br>
+ phys = <&mipi_lvds_0_phy>;<br>
+ phy-names = "lvds_phy";<br>
+<br>
+ port@0 {<br>
+ reg = <0>;<br>
+<br>
+ mipi_lvds_0_ldb_ch1_mipi_lvds_0_pxl2dpi: endpoint {<br>
+ remote-endpoint = <&mipi_lvds_0_pxl2dpi_mipi_lvds_0_ldb_ch1>;<br>
+ };<br>
+ };<br>
+ };<br>
+ };<br>
--<br>
2.7.4<br><br></p>
<p dir="ltr">------------------------------</p>
<p dir="ltr">Subject: Digest Footer</p>
<p dir="ltr">_______________________________________________<br>
dri-devel mailing list<br>
dri-devel@lists.freedesktop.org<br>
<a href="https://lists.freedesktop.org/mailman/listinfo/dri-devel">https://lists.freedesktop.org/mailman/listinfo/dri-devel</a><br></p>
<p dir="ltr">------------------------------</p>
<p dir="ltr">End of dri-devel Digest, Vol 132, Issue 196<br>
*******************************************<br>
</p>
</div>