All of lore.kernel.org
 help / color / mirror / Atom feed
From: Biju Das <biju.das.jz@bp.renesas.com>
To: cip-dev@lists.cip-project.org,
	Nobuhiro Iwamatsu <nobuhiro1.iwamatsu@toshiba.co.jp>,
	Pavel Machek <pavel@denx.de>
Cc: Biju Das <biju.das.jz@bp.renesas.com>,
	Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Subject: [PATCH 5.10.y-cip v2 04/25] drm: of: Add drm_of_get_data_lanes_count and drm_of_get_data_lanes_ep
Date: Fri,  8 Dec 2023 13:19:46 +0000	[thread overview]
Message-ID: <20231208132007.108762-5-biju.das.jz@bp.renesas.com> (raw)
In-Reply-To: <20231208132007.108762-1-biju.das.jz@bp.renesas.com>

From: Marek Vasut <marex@denx.de>

commit fc801750b197d0f00c09e01e59a7dcd240fddcb5 upstream.

Add helper function to count and sanitize DT "data-lanes" property
and return either error or the data-lanes count. This is useful for
both DSI and (e)DP "data-lanes" property. The later version of the
function is an extra wrapper which handles the endpoint look up by
regs, that's what majority of the drivers duplicate too, but not all
of them.

Reviewed-by: Andrzej Hajda <andrzej.hajda@intel.com>
Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Andrzej Hajda <andrzej.hajda@intel.com>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Lucas Stach <l.stach@pengutronix.de>
Cc: Maxime Ripard <maxime@cerno.tech>
Cc: Robert Foss <robert.foss@linaro.org>
Cc: Sam Ravnborg <sam@ravnborg.org>
To: dri-devel@lists.freedesktop.org
Link: https://patchwork.freedesktop.org/patch/msgid/20220524010522.528569-1-marex@denx.de
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
 drivers/gpu/drm/drm_of.c | 61 ++++++++++++++++++++++++++++++++++++++++
 include/drm/drm_of.h     | 20 +++++++++++++
 2 files changed, 81 insertions(+)

diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c
index 37c34146eea8..041af8d30857 100644
--- a/drivers/gpu/drm/drm_of.c
+++ b/drivers/gpu/drm/drm_of.c
@@ -402,3 +402,64 @@ int drm_of_lvds_get_dual_link_pixel_order(const struct device_node *port1,
 		DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS;
 }
 EXPORT_SYMBOL_GPL(drm_of_lvds_get_dual_link_pixel_order);
+
+/**
+ * drm_of_get_data_lanes_count - Get DSI/(e)DP data lane count
+ * @endpoint: DT endpoint node of the DSI/(e)DP source or sink
+ * @min: minimum supported number of data lanes
+ * @max: maximum supported number of data lanes
+ *
+ * Count DT "data-lanes" property elements and check for validity.
+ *
+ * Return:
+ * * min..max - positive integer count of "data-lanes" elements
+ * * -ve - the "data-lanes" property is missing or invalid
+ * * -EINVAL - the "data-lanes" property is unsupported
+ */
+int drm_of_get_data_lanes_count(const struct device_node *endpoint,
+				const unsigned int min, const unsigned int max)
+{
+	int ret;
+
+	ret = of_property_count_u32_elems(endpoint, "data-lanes");
+	if (ret < 0)
+		return ret;
+
+	if (ret < min || ret > max)
+		return -EINVAL;
+
+	return ret;
+}
+EXPORT_SYMBOL_GPL(drm_of_get_data_lanes_count);
+
+/**
+ * drm_of_get_data_lanes_count_ep - Get DSI/(e)DP data lane count by endpoint
+ * @port: DT port node of the DSI/(e)DP source or sink
+ * @port_reg: identifier (value of reg property) of the parent port node
+ * @reg: identifier (value of reg property) of the endpoint node
+ * @min: minimum supported number of data lanes
+ * @max: maximum supported number of data lanes
+ *
+ * Count DT "data-lanes" property elements and check for validity.
+ * This variant uses endpoint specifier.
+ *
+ * Return:
+ * * min..max - positive integer count of "data-lanes" elements
+ * * -EINVAL - the "data-mapping" property is unsupported
+ * * -ENODEV - the "data-mapping" property is missing
+ */
+int drm_of_get_data_lanes_count_ep(const struct device_node *port,
+				   int port_reg, int reg,
+				   const unsigned int min,
+				   const unsigned int max)
+{
+	struct device_node *endpoint;
+	int ret;
+
+	endpoint = of_graph_get_endpoint_by_regs(port, port_reg, reg);
+	ret = drm_of_get_data_lanes_count(endpoint, min, max);
+	of_node_put(endpoint);
+
+	return ret;
+}
+EXPORT_SYMBOL_GPL(drm_of_get_data_lanes_count_ep);
diff --git a/include/drm/drm_of.h b/include/drm/drm_of.h
index b9b093add92e..5a6bf7146028 100644
--- a/include/drm/drm_of.h
+++ b/include/drm/drm_of.h
@@ -49,6 +49,12 @@ int drm_of_find_panel_or_bridge(const struct device_node *np,
 				struct drm_bridge **bridge);
 int drm_of_lvds_get_dual_link_pixel_order(const struct device_node *port1,
 					  const struct device_node *port2);
+int drm_of_get_data_lanes_count(const struct device_node *endpoint,
+				const unsigned int min, const unsigned int max);
+int drm_of_get_data_lanes_count_ep(const struct device_node *port,
+				   int port_reg, int reg,
+				   const unsigned int min,
+				   const unsigned int max);
 #else
 static inline uint32_t drm_of_crtc_port_mask(struct drm_device *dev,
 					  struct device_node *port)
@@ -98,6 +104,20 @@ drm_of_lvds_get_dual_link_pixel_order(const struct device_node *port1,
 {
 	return -EINVAL;
 }
+
+int drm_of_get_data_lanes_count(const struct device_node *endpoint,
+				const unsigned int min, const unsigned int max)
+{
+	return -EINVAL;
+}
+
+int drm_of_get_data_lanes_count_ep(const struct device_node *port,
+				   int port_reg, int reg
+				   const unsigned int min,
+				   const unsigned int max)
+{
+	return -EINVAL;
+}
 #endif
 
 /*
-- 
2.25.1



  parent reply	other threads:[~2023-12-08 13:20 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-08 13:19 [PATCH 5.10.y-cip v2 00/25] Add RZ/G2L DSI support Biju Das
2023-12-08 13:19 ` [PATCH 5.10.y-cip v2 01/25] drm/bridge: Add a function to abstract away panels Biju Das
2023-12-08 13:19 ` [PATCH 5.10.y-cip v2 02/25] drm/bridge: Add stubs for devm_drm_of_get_bridge when OF is disabled Biju Das
2023-12-08 13:19 ` [PATCH 5.10.y-cip v2 03/25] drm/bridge: Move devm_drm_of_get_bridge to bridge/panel.c Biju Das
2023-12-08 13:19 ` Biju Das [this message]
2023-12-08 13:19 ` [PATCH 5.10.y-cip v2 05/25] drm: of: Mark empty drm_of_get_data_lanes_count and drm_of_get_data_lanes_ep static Biju Das
2023-12-08 13:19 ` [PATCH 5.10.y-cip v2 06/25] dt-bindings: display: bridge: Document RZ/G2L MIPI DSI TX bindings Biju Das
2023-12-08 13:19 ` [PATCH 5.10.y-cip v2 07/25] dt-bindings: display: bridge: renesas,rzg2l-mipi-dsi: Document RZ/V2L support Biju Das
2023-12-08 13:19 ` [PATCH 5.10.y-cip v2 08/25] drm: rcar-du: Add RZ/G2L DSI driver Biju Das
2023-12-08 13:19 ` [PATCH 5.10.y-cip v2 09/25] drm: rcar-du: Fix Kconfig dependency between DRM and RZG2L_MIPI_DSI Biju Das
2023-12-08 13:19 ` [PATCH 5.10.y-cip v2 10/25] drm: rcar-du: rzg2l_mipi_dsi: Enhance device lanes check Biju Das
2023-12-08 13:19 ` [PATCH 5.10.y-cip v2 11/25] drm: rcar-du: rzg2l_mipi_dsi: Reorder bridge attach Biju Das
2023-12-08 13:19 ` [PATCH 5.10.y-cip v2 12/25] arm64: defconfig: Enable Renesas RZ/G2L MIPI DSI driver Biju Das
2023-12-08 13:19 ` [PATCH 5.10.y-cip v2 13/25] arm64: dts: renesas: r9a07g044: Add DSI node Biju Das
2023-12-08 13:19 ` [PATCH 5.10.y-cip v2 14/25] arm64: dts: renesas: r9a07g054: " Biju Das
2023-12-08 13:19 ` [PATCH 5.10.y-cip v2 15/25] arm64: dts: renesas: rzg2l-smarc: Link DSI with ADV7535 Biju Das
2023-12-08 13:19 ` [PATCH 5.10.y-cip v2 16/25] arm64: dts: renesas: rzg2lc-smarc: " Biju Das
2023-12-08 13:19 ` [PATCH 5.10.y-cip v2 17/25] arm64: dts: renesas: Drop ADV7535 IRQ Biju Das
2023-12-08 13:20 ` [PATCH 5.10.y-cip v2 18/25] arm64: dts: renesas: r9a07g044: [HACK DO NOT APPLY] Add DU node Biju Das
2023-12-08 13:20 ` [PATCH 5.10.y-cip v2 19/25] arm64: dts: renesas: r9a07g054: " Biju Das
2023-12-08 13:20 ` [PATCH 5.10.y-cip v2 20/25] arm64: dts: renesas: rzg2l-smarc: [HACK DO NOT APPLY] Enable DU and link with DSI Biju Das
2023-12-08 13:20 ` [PATCH 5.10.y-cip v2 21/25] arm64: dts: renesas: rzg2lc-smarc: " Biju Das
2023-12-08 13:20 ` [PATCH 5.10.y-cip v2 22/25] drm: [HACK DO NOT APPLY] add drmm_encoder_alloc() Biju Das
2023-12-08 13:20 ` [PATCH 5.10.y-cip v2 23/25] drm: [HACK DO NOT APPLY] Allow const struct drm_driver Biju Das
2023-12-08 13:20 ` [PATCH 5.10.y-cip v2 24/25] drm: [HACK DO NOT APPLY] Add RZ/G2L DU Support Biju Das
2023-12-08 13:20 ` [PATCH 5.10.y-cip v2 25/25] defconfig: [HACK DO NOT APPLY] Enable display on RZ/G2L SMARC EVK Biju Das
2023-12-09 10:21 ` [PATCH 5.10.y-cip v2 00/25] Add RZ/G2L DSI support Pavel Machek
2023-12-11  8:06 ` Pavel Machek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231208132007.108762-5-biju.das.jz@bp.renesas.com \
    --to=biju.das.jz@bp.renesas.com \
    --cc=cip-dev@lists.cip-project.org \
    --cc=nobuhiro1.iwamatsu@toshiba.co.jp \
    --cc=pavel@denx.de \
    --cc=prabhakar.mahadev-lad.rj@bp.renesas.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.