dri-devel.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 00/39] drm/bridge: switch to struct drm_edid
@ 2024-01-23 19:37 Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 01/39] drm/bridge: add ->edid_read hook and drm_bridge_edid_read() Jani Nikula
                   ` (39 more replies)
  0 siblings, 40 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

v3 of [1] with a couple of patches fixed.

BR,
Jani.

[1] https://patchwork.freedesktop.org/series/128149/


Jani Nikula (39):
  drm/bridge: add ->edid_read hook and drm_bridge_edid_read()
  drm/bridge: switch to drm_bridge_read_edid()
  drm/bridge: chrontel-ch7033: switch to drm_bridge_read_edid()
  drm/bridge: lt8912b: use drm_bridge_read_edid()
  drm/bridge: lt8912b: clear the EDID property on failures
  drm/bridge: lt8912b: use ->edid_read callback
  drm/bridge: lt9611uxc: use drm_bridge_read_edid()
  drm: bridge: simple-bridge: use drm_bridge_edid_read()
  drm: bridge: simple-bridge: clear the EDID property on failures
  drm/bridge: tfp410: use drm_bridge_edid_read()
  drm/bridge: tfp410: clear the EDID property on failures
  drm/meson: switch to drm_bridge_edid_read()
  drm/bridge: remove drm_bridge_get_edid() in favour of
    drm_bridge_edid_read()
  drm/bridge: anx7625: switch to ->edid_read callback
  drm/bridge: cdns-mhdp8546: switch to ->edid_read callback
  drm/bridge: cdns-mhdp8546: clear the EDID property on failures
  drm/bridge: display-connector: switch to ->edid_read callback
  drm/bridge: it6505: switch to ->edid_read callback
  drm: bridge: it66121: switch to ->edid_read callback
  drm/bridge: lt9611: switch to ->edid_read callback
  drm/bridge: lt9611uxc: switch to ->edid_read callback
  drm/bridge: megachips: switch to ->edid_read callback
  drm/bridge: nxp-ptn3460: switch to ->edid_read callback
  drm/bridge: sii902x: use display info is_hdmi
  drm/bridge: sii902x: switch to ->edid_read callback
  drm/mediatek/dp: switch to ->edid_read callback
  drm/mediatek/hdmi: switch to ->edid_read callback
  drm/msm/hdmi: fix indent
  drm/msm/hdmi: switch to ->edid_read callback
  drm/omap/hdmi4: switch to ->edid_read callback
  drm/omap/hdmi5: switch to ->edid_read callback
  drm: xlnx: zynqmp_dpsub: switch to ->edid_read callback
  drm: adv7511: switch to ->edid_read callback
  drm: bridge: dw_hdmi: switch to ->edid_read callback
  drm: bridge: dw_hdmi: clear the EDID property and CEC address on
    failures
  drm/bridge: tc358767: update the EDID property
  drm/bridge: tc358767: switch to ->edid_read callback
  drm/bridge: ti-sn65dsi86: switch to ->edid_read callback
  drm/bridge: remove ->get_edid callback

 drivers/gpu/drm/bridge/adv7511/adv7511_drv.c  | 47 ++++++++++++-------
 drivers/gpu/drm/bridge/analogix/anx7625.c     | 30 ++++--------
 .../drm/bridge/cadence/cdns-mhdp8546-core.c   | 28 ++++++-----
 drivers/gpu/drm/bridge/chrontel-ch7033.c      | 12 ++---
 drivers/gpu/drm/bridge/display-connector.c    |  8 ++--
 drivers/gpu/drm/bridge/ite-it6505.c           | 17 +++----
 drivers/gpu/drm/bridge/ite-it66121.c          | 16 +++----
 drivers/gpu/drm/bridge/lontium-lt8912b.c      | 20 ++++----
 drivers/gpu/drm/bridge/lontium-lt9611.c       |  8 ++--
 drivers/gpu/drm/bridge/lontium-lt9611uxc.c    | 18 +++----
 .../bridge/megachips-stdpxxxx-ge-b850v3-fw.c  | 18 +++----
 drivers/gpu/drm/bridge/nxp-ptn3460.c          | 22 +++++----
 drivers/gpu/drm/bridge/sii902x.c              | 38 +++++++--------
 drivers/gpu/drm/bridge/simple-bridge.c        | 17 +++----
 drivers/gpu/drm/bridge/synopsys/dw-hdmi.c     | 43 ++++++++++-------
 drivers/gpu/drm/bridge/tc358767.c             | 17 +++----
 drivers/gpu/drm/bridge/ti-sn65dsi86.c         |  8 ++--
 drivers/gpu/drm/bridge/ti-tfp410.c            | 18 +++----
 drivers/gpu/drm/drm_bridge.c                  | 17 +++----
 drivers/gpu/drm/drm_bridge_connector.c        | 16 +++----
 drivers/gpu/drm/mediatek/mtk_dp.c             | 31 +++++++-----
 drivers/gpu/drm/mediatek/mtk_hdmi.c           | 26 ++++++----
 drivers/gpu/drm/meson/meson_encoder_hdmi.c    | 20 ++++++--
 drivers/gpu/drm/msm/hdmi/hdmi_bridge.c        | 33 ++++++++-----
 drivers/gpu/drm/omapdrm/dss/hdmi4.c           | 22 ++++++---
 drivers/gpu/drm/omapdrm/dss/hdmi5.c           | 12 ++---
 drivers/gpu/drm/xlnx/zynqmp_dp.c              |  8 ++--
 include/drm/drm_bridge.h                      | 25 +++++-----
 28 files changed, 328 insertions(+), 267 deletions(-)

-- 
2.39.2


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

* [PATCH v3 01/39] drm/bridge: add ->edid_read hook and drm_bridge_edid_read()
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-25 10:33   ` Neil Armstrong
  2024-01-23 19:37 ` [PATCH v3 02/39] drm/bridge: switch to drm_bridge_read_edid() Jani Nikula
                   ` (38 subsequent siblings)
  39 siblings, 1 reply; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Add new struct drm_edid based ->edid_read hook and
drm_bridge_edid_read() function to call the hook.

v2: Include drm/drm_edid.h

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/drm_bridge.c | 46 +++++++++++++++++++++++++++++++++++-
 include/drm/drm_bridge.h     | 33 ++++++++++++++++++++++++++
 2 files changed, 78 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
index cee3188adf3d..4f6f8c662d3f 100644
--- a/drivers/gpu/drm/drm_bridge.c
+++ b/drivers/gpu/drm/drm_bridge.c
@@ -27,8 +27,9 @@
 #include <linux/mutex.h>
 
 #include <drm/drm_atomic_state_helper.h>
-#include <drm/drm_debugfs.h>
 #include <drm/drm_bridge.h>
+#include <drm/drm_debugfs.h>
+#include <drm/drm_edid.h>
 #include <drm/drm_encoder.h>
 #include <drm/drm_file.h>
 #include <drm/drm_of.h>
@@ -1206,6 +1207,47 @@ int drm_bridge_get_modes(struct drm_bridge *bridge,
 }
 EXPORT_SYMBOL_GPL(drm_bridge_get_modes);
 
+/**
+ * drm_bridge_edid_read - read the EDID data of the connected display
+ * @bridge: bridge control structure
+ * @connector: the connector to read EDID for
+ *
+ * If the bridge supports output EDID retrieval, as reported by the
+ * DRM_BRIDGE_OP_EDID bridge ops flag, call &drm_bridge_funcs.edid_read to get
+ * the EDID and return it. Otherwise return NULL.
+ *
+ * If &drm_bridge_funcs.edid_read is not set, fall back to using
+ * drm_bridge_get_edid() and wrapping it in struct drm_edid.
+ *
+ * RETURNS:
+ * The retrieved EDID on success, or NULL otherwise.
+ */
+const struct drm_edid *drm_bridge_edid_read(struct drm_bridge *bridge,
+					    struct drm_connector *connector)
+{
+	if (!(bridge->ops & DRM_BRIDGE_OP_EDID))
+		return NULL;
+
+	/* Transitional: Fall back to ->get_edid. */
+	if (!bridge->funcs->edid_read) {
+		const struct drm_edid *drm_edid;
+		struct edid *edid;
+
+		edid = drm_bridge_get_edid(bridge, connector);
+		if (!edid)
+			return NULL;
+
+		drm_edid = drm_edid_alloc(edid, (edid->extensions + 1) * EDID_LENGTH);
+
+		kfree(edid);
+
+		return drm_edid;
+	}
+
+	return bridge->funcs->edid_read(bridge, connector);
+}
+EXPORT_SYMBOL_GPL(drm_bridge_edid_read);
+
 /**
  * drm_bridge_get_edid - get the EDID data of the connected display
  * @bridge: bridge control structure
@@ -1215,6 +1257,8 @@ EXPORT_SYMBOL_GPL(drm_bridge_get_modes);
  * DRM_BRIDGE_OP_EDID bridge ops flag, call &drm_bridge_funcs.get_edid to
  * get the EDID and return it. Otherwise return NULL.
  *
+ * Deprecated. Prefer using drm_bridge_edid_read().
+ *
  * RETURNS:
  * The retrieved EDID on success, or NULL otherwise.
  */
diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
index e39da5807ba7..b7aed3ead705 100644
--- a/include/drm/drm_bridge.h
+++ b/include/drm/drm_bridge.h
@@ -557,6 +557,37 @@ struct drm_bridge_funcs {
 	int (*get_modes)(struct drm_bridge *bridge,
 			 struct drm_connector *connector);
 
+	/**
+	 * @edid_read:
+	 *
+	 * Read the EDID data of the connected display.
+	 *
+	 * The @edid_read callback is the preferred way of reporting mode
+	 * information for a display connected to the bridge output. Bridges
+	 * that support reading EDID shall implement this callback and leave
+	 * the @get_modes callback unimplemented.
+	 *
+	 * The caller of this operation shall first verify the output
+	 * connection status and refrain from reading EDID from a disconnected
+	 * output.
+	 *
+	 * This callback is optional. Bridges that implement it shall set the
+	 * DRM_BRIDGE_OP_EDID flag in their &drm_bridge->ops.
+	 *
+	 * The connector parameter shall be used for the sole purpose of EDID
+	 * retrieval, and shall not be stored internally by bridge drivers for
+	 * future usage.
+	 *
+	 * RETURNS:
+	 *
+	 * An edid structure newly allocated with drm_edid_alloc() or returned
+	 * from drm_edid_read() family of functions on success, or NULL
+	 * otherwise. The caller is responsible for freeing the returned edid
+	 * structure with drm_edid_free().
+	 */
+	const struct drm_edid *(*edid_read)(struct drm_bridge *bridge,
+					    struct drm_connector *connector);
+
 	/**
 	 * @get_edid:
 	 *
@@ -888,6 +919,8 @@ drm_atomic_helper_bridge_propagate_bus_fmt(struct drm_bridge *bridge,
 enum drm_connector_status drm_bridge_detect(struct drm_bridge *bridge);
 int drm_bridge_get_modes(struct drm_bridge *bridge,
 			 struct drm_connector *connector);
+const struct drm_edid *drm_bridge_edid_read(struct drm_bridge *bridge,
+					    struct drm_connector *connector);
 struct edid *drm_bridge_get_edid(struct drm_bridge *bridge,
 				 struct drm_connector *connector);
 void drm_bridge_hpd_enable(struct drm_bridge *bridge,
-- 
2.39.2


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

* [PATCH v3 02/39] drm/bridge: switch to drm_bridge_read_edid()
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 01/39] drm/bridge: add ->edid_read hook and drm_bridge_edid_read() Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 03/39] drm/bridge: chrontel-ch7033: " Jani Nikula
                   ` (37 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based functions.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/drm_bridge_connector.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/drm_bridge_connector.c b/drivers/gpu/drm/drm_bridge_connector.c
index 3acd67021ec6..982552c9f92c 100644
--- a/drivers/gpu/drm/drm_bridge_connector.c
+++ b/drivers/gpu/drm/drm_bridge_connector.c
@@ -239,27 +239,27 @@ static int drm_bridge_connector_get_modes_edid(struct drm_connector *connector,
 					       struct drm_bridge *bridge)
 {
 	enum drm_connector_status status;
-	struct edid *edid;
+	const struct drm_edid *drm_edid;
 	int n;
 
 	status = drm_bridge_connector_detect(connector, false);
 	if (status != connector_status_connected)
 		goto no_edid;
 
-	edid = drm_bridge_get_edid(bridge, connector);
-	if (!drm_edid_is_valid(edid)) {
-		kfree(edid);
+	drm_edid = drm_bridge_edid_read(bridge, connector);
+	if (!drm_edid_valid(drm_edid)) {
+		drm_edid_free(drm_edid);
 		goto no_edid;
 	}
 
-	drm_connector_update_edid_property(connector, edid);
-	n = drm_add_edid_modes(connector, edid);
+	drm_edid_connector_update(connector, drm_edid);
+	n = drm_edid_connector_add_modes(connector);
 
-	kfree(edid);
+	drm_edid_free(drm_edid);
 	return n;
 
 no_edid:
-	drm_connector_update_edid_property(connector, NULL);
+	drm_edid_connector_update(connector, NULL);
 	return 0;
 }
 
-- 
2.39.2


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

* [PATCH v3 03/39] drm/bridge: chrontel-ch7033: switch to drm_bridge_read_edid()
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 01/39] drm/bridge: add ->edid_read hook and drm_bridge_edid_read() Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 02/39] drm/bridge: switch to drm_bridge_read_edid() Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 04/39] drm/bridge: lt8912b: use drm_bridge_read_edid() Jani Nikula
                   ` (36 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based functions.

Cc: Andrzej Hajda <andrzej.hajda@intel.com>
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Robert Foss <rfoss@kernel.org>
Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
Cc: Jonas Karlman <jonas@kwiboo.se>
Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/chrontel-ch7033.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/bridge/chrontel-ch7033.c b/drivers/gpu/drm/bridge/chrontel-ch7033.c
index 483c28c7fc99..c83486cf6b15 100644
--- a/drivers/gpu/drm/bridge/chrontel-ch7033.c
+++ b/drivers/gpu/drm/bridge/chrontel-ch7033.c
@@ -230,14 +230,14 @@ static const struct drm_connector_funcs ch7033_connector_funcs = {
 static int ch7033_connector_get_modes(struct drm_connector *connector)
 {
 	struct ch7033_priv *priv = conn_to_ch7033_priv(connector);
-	struct edid *edid;
+	const struct drm_edid *drm_edid;
 	int ret;
 
-	edid = drm_bridge_get_edid(priv->next_bridge, connector);
-	drm_connector_update_edid_property(connector, edid);
-	if (edid) {
-		ret = drm_add_edid_modes(connector, edid);
-		kfree(edid);
+	drm_edid = drm_bridge_edid_read(priv->next_bridge, connector);
+	drm_edid_connector_update(connector, drm_edid);
+	if (drm_edid) {
+		ret = drm_edid_connector_add_modes(connector);
+		drm_edid_free(drm_edid);
 	} else {
 		ret = drm_add_modes_noedid(connector, 1920, 1080);
 		drm_set_preferred_mode(connector, 1024, 768);
-- 
2.39.2


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

* [PATCH v3 04/39] drm/bridge: lt8912b: use drm_bridge_read_edid()
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (2 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 03/39] drm/bridge: chrontel-ch7033: " Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 05/39] drm/bridge: lt8912b: clear the EDID property on failures Jani Nikula
                   ` (35 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula, Adrien Grassein

Prefer using the struct drm_edid based functions.

cc: Adrien Grassein <adrien.grassein@gmail.com>
Cc: Andrzej Hajda <andrzej.hajda@intel.com>
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Robert Foss <rfoss@kernel.org>
Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
Cc: Jonas Karlman <jonas@kwiboo.se>
Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/lontium-lt8912b.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/bridge/lontium-lt8912b.c b/drivers/gpu/drm/bridge/lontium-lt8912b.c
index 273157428c82..4dc748d5d1ee 100644
--- a/drivers/gpu/drm/bridge/lontium-lt8912b.c
+++ b/drivers/gpu/drm/bridge/lontium-lt8912b.c
@@ -440,16 +440,16 @@ lt8912_connector_mode_valid(struct drm_connector *connector,
 
 static int lt8912_connector_get_modes(struct drm_connector *connector)
 {
-	struct edid *edid;
+	const struct drm_edid *drm_edid;
 	int ret = -1;
 	int num = 0;
 	struct lt8912 *lt = connector_to_lt8912(connector);
 	u32 bus_format = MEDIA_BUS_FMT_RGB888_1X24;
 
-	edid = drm_bridge_get_edid(lt->hdmi_port, connector);
-	if (edid) {
-		drm_connector_update_edid_property(connector, edid);
-		num = drm_add_edid_modes(connector, edid);
+	drm_edid = drm_bridge_edid_read(lt->hdmi_port, connector);
+	if (drm_edid) {
+		drm_edid_connector_update(connector, drm_edid);
+		num = drm_edid_connector_add_modes(connector);
 	} else {
 		return ret;
 	}
@@ -459,7 +459,7 @@ static int lt8912_connector_get_modes(struct drm_connector *connector)
 	if (ret)
 		num = ret;
 
-	kfree(edid);
+	drm_edid_free(drm_edid);
 	return num;
 }
 
-- 
2.39.2


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

* [PATCH v3 05/39] drm/bridge: lt8912b: clear the EDID property on failures
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (3 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 04/39] drm/bridge: lt8912b: use drm_bridge_read_edid() Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 06/39] drm/bridge: lt8912b: use ->edid_read callback Jani Nikula
                   ` (34 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula, Adrien Grassein

If EDID read fails, clear the EDID property.

Cc: Adrien Grassein <adrien.grassein@gmail.com>
Cc: Andrzej Hajda <andrzej.hajda@intel.com>
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Robert Foss <rfoss@kernel.org>
Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
Cc: Jonas Karlman <jonas@kwiboo.se>
Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/lontium-lt8912b.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/bridge/lontium-lt8912b.c b/drivers/gpu/drm/bridge/lontium-lt8912b.c
index 4dc748d5d1ee..9c0ffc1c6fac 100644
--- a/drivers/gpu/drm/bridge/lontium-lt8912b.c
+++ b/drivers/gpu/drm/bridge/lontium-lt8912b.c
@@ -447,8 +447,8 @@ static int lt8912_connector_get_modes(struct drm_connector *connector)
 	u32 bus_format = MEDIA_BUS_FMT_RGB888_1X24;
 
 	drm_edid = drm_bridge_edid_read(lt->hdmi_port, connector);
+	drm_edid_connector_update(connector, drm_edid);
 	if (drm_edid) {
-		drm_edid_connector_update(connector, drm_edid);
 		num = drm_edid_connector_add_modes(connector);
 	} else {
 		return ret;
-- 
2.39.2


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

* [PATCH v3 06/39] drm/bridge: lt8912b: use ->edid_read callback
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (4 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 05/39] drm/bridge: lt8912b: clear the EDID property on failures Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 07/39] drm/bridge: lt9611uxc: use drm_bridge_read_edid() Jani Nikula
                   ` (33 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula, Adrien Grassein

Prefer using the struct drm_edid based functions.

Cc: Adrien Grassein <adrien.grassein@gmail.com>
Cc: Andrzej Hajda <andrzej.hajda@intel.com>
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Robert Foss <rfoss@kernel.org>
Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
Cc: Jonas Karlman <jonas@kwiboo.se>
Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/lontium-lt8912b.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/bridge/lontium-lt8912b.c b/drivers/gpu/drm/bridge/lontium-lt8912b.c
index 9c0ffc1c6fac..e7c4bef74aa4 100644
--- a/drivers/gpu/drm/bridge/lontium-lt8912b.c
+++ b/drivers/gpu/drm/bridge/lontium-lt8912b.c
@@ -620,8 +620,8 @@ lt8912_bridge_detect(struct drm_bridge *bridge)
 	return lt8912_check_cable_status(lt);
 }
 
-static struct edid *lt8912_bridge_get_edid(struct drm_bridge *bridge,
-					   struct drm_connector *connector)
+static const struct drm_edid *lt8912_bridge_edid_read(struct drm_bridge *bridge,
+						      struct drm_connector *connector)
 {
 	struct lt8912 *lt = bridge_to_lt8912(bridge);
 
@@ -630,7 +630,7 @@ static struct edid *lt8912_bridge_get_edid(struct drm_bridge *bridge,
 	 * given to the hdmi connector node.
 	 */
 	if (lt->hdmi_port->ops & DRM_BRIDGE_OP_EDID)
-		return drm_bridge_get_edid(lt->hdmi_port, connector);
+		return drm_bridge_edid_read(lt->hdmi_port, connector);
 
 	dev_warn(lt->dev, "The connected bridge does not supports DRM_BRIDGE_OP_EDID\n");
 	return NULL;
@@ -642,7 +642,7 @@ static const struct drm_bridge_funcs lt8912_bridge_funcs = {
 	.mode_set = lt8912_bridge_mode_set,
 	.enable = lt8912_bridge_enable,
 	.detect = lt8912_bridge_detect,
-	.get_edid = lt8912_bridge_get_edid,
+	.edid_read = lt8912_bridge_edid_read,
 };
 
 static int lt8912_bridge_resume(struct device *dev)
-- 
2.39.2


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

* [PATCH v3 07/39] drm/bridge: lt9611uxc: use drm_bridge_read_edid()
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (5 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 06/39] drm/bridge: lt8912b: use ->edid_read callback Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 08/39] drm: bridge: simple-bridge: use drm_bridge_edid_read() Jani Nikula
                   ` (32 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based functions.

Cc: Andrzej Hajda <andrzej.hajda@intel.com>
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Robert Foss <rfoss@kernel.org>
Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
Cc: Jonas Karlman <jonas@kwiboo.se>
Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/lontium-lt9611uxc.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c b/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
index f3f130c1ef0a..4eaf99618749 100644
--- a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
+++ b/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
@@ -295,12 +295,12 @@ static int lt9611uxc_connector_get_modes(struct drm_connector *connector)
 {
 	struct lt9611uxc *lt9611uxc = connector_to_lt9611uxc(connector);
 	unsigned int count;
-	struct edid *edid;
+	const struct drm_edid *drm_edid;
 
-	edid = drm_bridge_get_edid(&lt9611uxc->bridge, connector);
-	drm_connector_update_edid_property(connector, edid);
-	count = drm_add_edid_modes(connector, edid);
-	kfree(edid);
+	drm_edid = drm_bridge_edid_read(&lt9611uxc->bridge, connector);
+	drm_edid_connector_update(connector, drm_edid);
+	count = drm_edid_connector_add_modes(connector);
+	drm_edid_free(drm_edid);
 
 	return count;
 }
-- 
2.39.2


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

* [PATCH v3 08/39] drm: bridge: simple-bridge: use drm_bridge_edid_read()
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (6 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 07/39] drm/bridge: lt9611uxc: use drm_bridge_read_edid() Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 09/39] drm: bridge: simple-bridge: clear the EDID property on failures Jani Nikula
                   ` (31 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based functions.

Cc: Andrzej Hajda <andrzej.hajda@intel.com>
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Robert Foss <rfoss@kernel.org>
Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
Cc: Jonas Karlman <jonas@kwiboo.se>
Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/simple-bridge.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/bridge/simple-bridge.c b/drivers/gpu/drm/bridge/simple-bridge.c
index cbe8e778d7c7..e0cf7721bb8c 100644
--- a/drivers/gpu/drm/bridge/simple-bridge.c
+++ b/drivers/gpu/drm/bridge/simple-bridge.c
@@ -51,18 +51,18 @@ drm_connector_to_simple_bridge(struct drm_connector *connector)
 static int simple_bridge_get_modes(struct drm_connector *connector)
 {
 	struct simple_bridge *sbridge = drm_connector_to_simple_bridge(connector);
-	struct edid *edid;
+	const struct drm_edid *drm_edid;
 	int ret;
 
 	if (sbridge->next_bridge->ops & DRM_BRIDGE_OP_EDID) {
-		edid = drm_bridge_get_edid(sbridge->next_bridge, connector);
-		if (!edid)
+		drm_edid = drm_bridge_edid_read(sbridge->next_bridge, connector);
+		if (!drm_edid)
 			DRM_INFO("EDID read failed. Fallback to standard modes\n");
 	} else {
-		edid = NULL;
+		drm_edid = NULL;
 	}
 
-	if (!edid) {
+	if (!drm_edid) {
 		/*
 		 * In case we cannot retrieve the EDIDs (missing or broken DDC
 		 * bus from the next bridge), fallback on the XGA standards and
@@ -73,9 +73,9 @@ static int simple_bridge_get_modes(struct drm_connector *connector)
 		return ret;
 	}
 
-	drm_connector_update_edid_property(connector, edid);
-	ret = drm_add_edid_modes(connector, edid);
-	kfree(edid);
+	drm_edid_connector_update(connector, drm_edid);
+	ret = drm_edid_connector_add_modes(connector);
+	drm_edid_free(drm_edid);
 
 	return ret;
 }
-- 
2.39.2


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

* [PATCH v3 09/39] drm: bridge: simple-bridge: clear the EDID property on failures
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (7 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 08/39] drm: bridge: simple-bridge: use drm_bridge_edid_read() Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 10/39] drm/bridge: tfp410: use drm_bridge_edid_read() Jani Nikula
                   ` (30 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

If EDID read fails, clear the EDID property.

Cc: Andrzej Hajda <andrzej.hajda@intel.com>
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Robert Foss <rfoss@kernel.org>
Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
Cc: Jonas Karlman <jonas@kwiboo.se>
Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/simple-bridge.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/bridge/simple-bridge.c b/drivers/gpu/drm/bridge/simple-bridge.c
index e0cf7721bb8c..5813a2c4fc5e 100644
--- a/drivers/gpu/drm/bridge/simple-bridge.c
+++ b/drivers/gpu/drm/bridge/simple-bridge.c
@@ -62,6 +62,8 @@ static int simple_bridge_get_modes(struct drm_connector *connector)
 		drm_edid = NULL;
 	}
 
+	drm_edid_connector_update(connector, drm_edid);
+
 	if (!drm_edid) {
 		/*
 		 * In case we cannot retrieve the EDIDs (missing or broken DDC
@@ -73,7 +75,6 @@ static int simple_bridge_get_modes(struct drm_connector *connector)
 		return ret;
 	}
 
-	drm_edid_connector_update(connector, drm_edid);
 	ret = drm_edid_connector_add_modes(connector);
 	drm_edid_free(drm_edid);
 
-- 
2.39.2


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

* [PATCH v3 10/39] drm/bridge: tfp410: use drm_bridge_edid_read()
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (8 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 09/39] drm: bridge: simple-bridge: clear the EDID property on failures Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 11/39] drm/bridge: tfp410: clear the EDID property on failures Jani Nikula
                   ` (29 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based functions.

Cc: Andrzej Hajda <andrzej.hajda@intel.com>
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Robert Foss <rfoss@kernel.org>
Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
Cc: Jonas Karlman <jonas@kwiboo.se>
Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/ti-tfp410.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/bridge/ti-tfp410.c b/drivers/gpu/drm/bridge/ti-tfp410.c
index 28848a8eb42e..dd14731eb03e 100644
--- a/drivers/gpu/drm/bridge/ti-tfp410.c
+++ b/drivers/gpu/drm/bridge/ti-tfp410.c
@@ -50,18 +50,18 @@ drm_connector_to_tfp410(struct drm_connector *connector)
 static int tfp410_get_modes(struct drm_connector *connector)
 {
 	struct tfp410 *dvi = drm_connector_to_tfp410(connector);
-	struct edid *edid;
+	const struct drm_edid *drm_edid;
 	int ret;
 
 	if (dvi->next_bridge->ops & DRM_BRIDGE_OP_EDID) {
-		edid = drm_bridge_get_edid(dvi->next_bridge, connector);
-		if (!edid)
+		drm_edid = drm_bridge_edid_read(dvi->next_bridge, connector);
+		if (!drm_edid)
 			DRM_INFO("EDID read failed. Fallback to standard modes\n");
 	} else {
-		edid = NULL;
+		drm_edid = NULL;
 	}
 
-	if (!edid) {
+	if (!drm_edid) {
 		/*
 		 * No EDID, fallback on the XGA standard modes and prefer a mode
 		 * pretty much anything can handle.
@@ -71,11 +71,11 @@ static int tfp410_get_modes(struct drm_connector *connector)
 		return ret;
 	}
 
-	drm_connector_update_edid_property(connector, edid);
+	drm_edid_connector_update(connector, drm_edid);
 
-	ret = drm_add_edid_modes(connector, edid);
+	ret = drm_edid_connector_add_modes(connector);
 
-	kfree(edid);
+	drm_edid_free(drm_edid);
 
 	return ret;
 }
-- 
2.39.2


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

* [PATCH v3 11/39] drm/bridge: tfp410: clear the EDID property on failures
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (9 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 10/39] drm/bridge: tfp410: use drm_bridge_edid_read() Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 12/39] drm/meson: switch to drm_bridge_edid_read() Jani Nikula
                   ` (28 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

If EDID read fails, clear the EDID property.

Cc: Andrzej Hajda <andrzej.hajda@intel.com>
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Robert Foss <rfoss@kernel.org>
Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
Cc: Jonas Karlman <jonas@kwiboo.se>
Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/ti-tfp410.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/bridge/ti-tfp410.c b/drivers/gpu/drm/bridge/ti-tfp410.c
index dd14731eb03e..c7bef5c23927 100644
--- a/drivers/gpu/drm/bridge/ti-tfp410.c
+++ b/drivers/gpu/drm/bridge/ti-tfp410.c
@@ -61,6 +61,8 @@ static int tfp410_get_modes(struct drm_connector *connector)
 		drm_edid = NULL;
 	}
 
+	drm_edid_connector_update(connector, drm_edid);
+
 	if (!drm_edid) {
 		/*
 		 * No EDID, fallback on the XGA standard modes and prefer a mode
@@ -71,8 +73,6 @@ static int tfp410_get_modes(struct drm_connector *connector)
 		return ret;
 	}
 
-	drm_edid_connector_update(connector, drm_edid);
-
 	ret = drm_edid_connector_add_modes(connector);
 
 	drm_edid_free(drm_edid);
-- 
2.39.2


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

* [PATCH v3 12/39] drm/meson: switch to drm_bridge_edid_read()
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (10 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 11/39] drm/bridge: tfp410: clear the EDID property on failures Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 13/39] drm/bridge: remove drm_bridge_get_edid() in favour of drm_bridge_edid_read() Jani Nikula
                   ` (27 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based functions.

Not ideal, should use source physical address from connector info.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/meson/meson_encoder_hdmi.c | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/meson/meson_encoder_hdmi.c b/drivers/gpu/drm/meson/meson_encoder_hdmi.c
index 25ea76558690..fff6ce394f98 100644
--- a/drivers/gpu/drm/meson/meson_encoder_hdmi.c
+++ b/drivers/gpu/drm/meson/meson_encoder_hdmi.c
@@ -323,19 +323,31 @@ static void meson_encoder_hdmi_hpd_notify(struct drm_bridge *bridge,
 					  enum drm_connector_status status)
 {
 	struct meson_encoder_hdmi *encoder_hdmi = bridge_to_meson_encoder_hdmi(bridge);
-	struct edid *edid;
 
 	if (!encoder_hdmi->cec_notifier)
 		return;
 
 	if (status == connector_status_connected) {
-		edid = drm_bridge_get_edid(encoder_hdmi->next_bridge, encoder_hdmi->connector);
-		if (!edid)
+		const struct drm_edid *drm_edid;
+		const struct edid *edid;
+
+		drm_edid = drm_bridge_edid_read(encoder_hdmi->next_bridge,
+						encoder_hdmi->connector);
+		if (!drm_edid)
 			return;
 
+		/*
+		 * FIXME: The CEC physical address should be set using
+		 * cec_notifier_set_phys_addr(encoder_hdmi->cec_notifier,
+		 * connector->display_info.source_physical_address) from a path
+		 * that has read the EDID and called
+		 * drm_edid_connector_update().
+		 */
+		edid = drm_edid_raw(drm_edid);
+
 		cec_notifier_set_phys_addr_from_edid(encoder_hdmi->cec_notifier, edid);
 
-		kfree(edid);
+		drm_edid_free(drm_edid);
 	} else
 		cec_notifier_phys_addr_invalidate(encoder_hdmi->cec_notifier);
 }
-- 
2.39.2


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

* [PATCH v3 13/39] drm/bridge: remove drm_bridge_get_edid() in favour of drm_bridge_edid_read()
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (11 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 12/39] drm/meson: switch to drm_bridge_edid_read() Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 14/39] drm/bridge: anx7625: switch to ->edid_read callback Jani Nikula
                   ` (26 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

All users of drm_bridge_get_edid() have been converted to use
drm_bridge_edid_read(). Remove drm_bridge_get_edid().

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/drm_bridge.c | 28 ++--------------------------
 include/drm/drm_bridge.h     |  2 --
 2 files changed, 2 insertions(+), 28 deletions(-)

diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
index 4f6f8c662d3f..a3065d4aa3d6 100644
--- a/drivers/gpu/drm/drm_bridge.c
+++ b/drivers/gpu/drm/drm_bridge.c
@@ -1217,7 +1217,7 @@ EXPORT_SYMBOL_GPL(drm_bridge_get_modes);
  * the EDID and return it. Otherwise return NULL.
  *
  * If &drm_bridge_funcs.edid_read is not set, fall back to using
- * drm_bridge_get_edid() and wrapping it in struct drm_edid.
+ * &drm_bridge_funcs.get_edid and wrapping it in struct drm_edid.
  *
  * RETURNS:
  * The retrieved EDID on success, or NULL otherwise.
@@ -1233,7 +1233,7 @@ const struct drm_edid *drm_bridge_edid_read(struct drm_bridge *bridge,
 		const struct drm_edid *drm_edid;
 		struct edid *edid;
 
-		edid = drm_bridge_get_edid(bridge, connector);
+		edid = bridge->funcs->get_edid(bridge, connector);
 		if (!edid)
 			return NULL;
 
@@ -1248,30 +1248,6 @@ const struct drm_edid *drm_bridge_edid_read(struct drm_bridge *bridge,
 }
 EXPORT_SYMBOL_GPL(drm_bridge_edid_read);
 
-/**
- * drm_bridge_get_edid - get the EDID data of the connected display
- * @bridge: bridge control structure
- * @connector: the connector to read EDID for
- *
- * If the bridge supports output EDID retrieval, as reported by the
- * DRM_BRIDGE_OP_EDID bridge ops flag, call &drm_bridge_funcs.get_edid to
- * get the EDID and return it. Otherwise return NULL.
- *
- * Deprecated. Prefer using drm_bridge_edid_read().
- *
- * RETURNS:
- * The retrieved EDID on success, or NULL otherwise.
- */
-struct edid *drm_bridge_get_edid(struct drm_bridge *bridge,
-				 struct drm_connector *connector)
-{
-	if (!(bridge->ops & DRM_BRIDGE_OP_EDID))
-		return NULL;
-
-	return bridge->funcs->get_edid(bridge, connector);
-}
-EXPORT_SYMBOL_GPL(drm_bridge_get_edid);
-
 /**
  * drm_bridge_hpd_enable - enable hot plug detection for the bridge
  * @bridge: bridge control structure
diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
index b7aed3ead705..ee12f829aaf7 100644
--- a/include/drm/drm_bridge.h
+++ b/include/drm/drm_bridge.h
@@ -921,8 +921,6 @@ int drm_bridge_get_modes(struct drm_bridge *bridge,
 			 struct drm_connector *connector);
 const struct drm_edid *drm_bridge_edid_read(struct drm_bridge *bridge,
 					    struct drm_connector *connector);
-struct edid *drm_bridge_get_edid(struct drm_bridge *bridge,
-				 struct drm_connector *connector);
 void drm_bridge_hpd_enable(struct drm_bridge *bridge,
 			   void (*cb)(void *data,
 				      enum drm_connector_status status),
-- 
2.39.2


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

* [PATCH v3 14/39] drm/bridge: anx7625: switch to ->edid_read callback
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (12 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 13/39] drm/bridge: remove drm_bridge_get_edid() in favour of drm_bridge_edid_read() Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 15/39] drm/bridge: cdns-mhdp8546: " Jani Nikula
                   ` (25 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based callback.

v2: Fix build (goto out;)

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/analogix/anx7625.c | 30 ++++++++---------------
 1 file changed, 10 insertions(+), 20 deletions(-)

diff --git a/drivers/gpu/drm/bridge/analogix/anx7625.c b/drivers/gpu/drm/bridge/analogix/anx7625.c
index 29d91493b101..9d96d28d6fe8 100644
--- a/drivers/gpu/drm/bridge/analogix/anx7625.c
+++ b/drivers/gpu/drm/bridge/analogix/anx7625.c
@@ -1784,24 +1784,14 @@ static ssize_t anx7625_aux_transfer(struct drm_dp_aux *aux,
 	return ret;
 }
 
-static struct edid *anx7625_get_edid(struct anx7625_data *ctx)
+static const struct drm_edid *anx7625_edid_read(struct anx7625_data *ctx)
 {
 	struct device *dev = ctx->dev;
 	struct s_edid_data *p_edid = &ctx->slimport_edid_p;
 	int edid_num;
-	u8 *edid;
 
-	edid = kmalloc(FOUR_BLOCK_SIZE, GFP_KERNEL);
-	if (!edid) {
-		DRM_DEV_ERROR(dev, "Fail to allocate buffer\n");
-		return NULL;
-	}
-
-	if (ctx->slimport_edid_p.edid_block_num > 0) {
-		memcpy(edid, ctx->slimport_edid_p.edid_raw_data,
-		       FOUR_BLOCK_SIZE);
-		return (struct edid *)edid;
-	}
+	if (ctx->slimport_edid_p.edid_block_num > 0)
+		goto out;
 
 	pm_runtime_get_sync(dev);
 	_anx7625_hpd_polling(ctx, 5000 * 100);
@@ -1810,14 +1800,14 @@ static struct edid *anx7625_get_edid(struct anx7625_data *ctx)
 
 	if (edid_num < 1) {
 		DRM_DEV_ERROR(dev, "Fail to read EDID: %d\n", edid_num);
-		kfree(edid);
 		return NULL;
 	}
 
 	p_edid->edid_block_num = edid_num;
 
-	memcpy(edid, ctx->slimport_edid_p.edid_raw_data, FOUR_BLOCK_SIZE);
-	return (struct edid *)edid;
+out:
+	return drm_edid_alloc(ctx->slimport_edid_p.edid_raw_data,
+			      FOUR_BLOCK_SIZE);
 }
 
 static enum drm_connector_status anx7625_sink_detect(struct anx7625_data *ctx)
@@ -2492,15 +2482,15 @@ anx7625_bridge_detect(struct drm_bridge *bridge)
 	return anx7625_sink_detect(ctx);
 }
 
-static struct edid *anx7625_bridge_get_edid(struct drm_bridge *bridge,
-					    struct drm_connector *connector)
+static const struct drm_edid *anx7625_bridge_edid_read(struct drm_bridge *bridge,
+						       struct drm_connector *connector)
 {
 	struct anx7625_data *ctx = bridge_to_anx7625(bridge);
 	struct device *dev = ctx->dev;
 
 	DRM_DEV_DEBUG_DRIVER(dev, "drm bridge get edid\n");
 
-	return anx7625_get_edid(ctx);
+	return anx7625_edid_read(ctx);
 }
 
 static const struct drm_bridge_funcs anx7625_bridge_funcs = {
@@ -2515,7 +2505,7 @@ static const struct drm_bridge_funcs anx7625_bridge_funcs = {
 	.atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
 	.atomic_reset = drm_atomic_helper_bridge_reset,
 	.detect = anx7625_bridge_detect,
-	.get_edid = anx7625_bridge_get_edid,
+	.edid_read = anx7625_bridge_edid_read,
 };
 
 static int anx7625_register_i2c_dummy_clients(struct anx7625_data *ctx,
-- 
2.39.2


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

* [PATCH v3 15/39] drm/bridge: cdns-mhdp8546: switch to ->edid_read callback
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (13 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 14/39] drm/bridge: anx7625: switch to ->edid_read callback Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 16/39] drm/bridge: cdns-mhdp8546: clear the EDID property on failures Jani Nikula
                   ` (24 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based callback and functions.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 .../drm/bridge/cadence/cdns-mhdp8546-core.c   | 26 +++++++++----------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
index 7d470527455b..e44cb89c33f0 100644
--- a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
+++ b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
@@ -1505,33 +1505,33 @@ static void cdns_mhdp_link_down(struct cdns_mhdp_device *mhdp)
 	mhdp->link_up = false;
 }
 
-static struct edid *cdns_mhdp_get_edid(struct cdns_mhdp_device *mhdp,
-				       struct drm_connector *connector)
+static const struct drm_edid *cdns_mhdp_edid_read(struct cdns_mhdp_device *mhdp,
+						  struct drm_connector *connector)
 {
 	if (!mhdp->plugged)
 		return NULL;
 
-	return drm_do_get_edid(connector, cdns_mhdp_get_edid_block, mhdp);
+	return drm_edid_read_custom(connector, cdns_mhdp_get_edid_block, mhdp);
 }
 
 static int cdns_mhdp_get_modes(struct drm_connector *connector)
 {
 	struct cdns_mhdp_device *mhdp = connector_to_mhdp(connector);
-	struct edid *edid;
+	const struct drm_edid *drm_edid;
 	int num_modes;
 
 	if (!mhdp->plugged)
 		return 0;
 
-	edid = cdns_mhdp_get_edid(mhdp, connector);
-	if (!edid) {
+	drm_edid = cdns_mhdp_edid_read(mhdp, connector);
+	if (!drm_edid) {
 		dev_err(mhdp->dev, "Failed to read EDID\n");
 		return 0;
 	}
 
-	drm_connector_update_edid_property(connector, edid);
-	num_modes = drm_add_edid_modes(connector, edid);
-	kfree(edid);
+	drm_edid_connector_update(connector, drm_edid);
+	num_modes = drm_edid_connector_add_modes(connector);
+	drm_edid_free(drm_edid);
 
 	/*
 	 * HACK: Warn about unsupported display formats until we deal
@@ -2220,12 +2220,12 @@ static enum drm_connector_status cdns_mhdp_bridge_detect(struct drm_bridge *brid
 	return cdns_mhdp_detect(mhdp);
 }
 
-static struct edid *cdns_mhdp_bridge_get_edid(struct drm_bridge *bridge,
-					      struct drm_connector *connector)
+static const struct drm_edid *cdns_mhdp_bridge_edid_read(struct drm_bridge *bridge,
+							 struct drm_connector *connector)
 {
 	struct cdns_mhdp_device *mhdp = bridge_to_mhdp(bridge);
 
-	return cdns_mhdp_get_edid(mhdp, connector);
+	return cdns_mhdp_edid_read(mhdp, connector);
 }
 
 static const struct drm_bridge_funcs cdns_mhdp_bridge_funcs = {
@@ -2239,7 +2239,7 @@ static const struct drm_bridge_funcs cdns_mhdp_bridge_funcs = {
 	.atomic_reset = cdns_mhdp_bridge_atomic_reset,
 	.atomic_get_input_bus_fmts = cdns_mhdp_get_input_bus_fmts,
 	.detect = cdns_mhdp_bridge_detect,
-	.get_edid = cdns_mhdp_bridge_get_edid,
+	.edid_read = cdns_mhdp_bridge_edid_read,
 	.hpd_enable = cdns_mhdp_bridge_hpd_enable,
 	.hpd_disable = cdns_mhdp_bridge_hpd_disable,
 };
-- 
2.39.2


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

* [PATCH v3 16/39] drm/bridge: cdns-mhdp8546: clear the EDID property on failures
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (14 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 15/39] drm/bridge: cdns-mhdp8546: " Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 17/39] drm/bridge: display-connector: switch to ->edid_read callback Jani Nikula
                   ` (23 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

If EDID read fails, clear the EDID property.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
index e44cb89c33f0..e226acc5c15e 100644
--- a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
+++ b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
@@ -1524,12 +1524,14 @@ static int cdns_mhdp_get_modes(struct drm_connector *connector)
 		return 0;
 
 	drm_edid = cdns_mhdp_edid_read(mhdp, connector);
+
+	drm_edid_connector_update(connector, drm_edid);
+
 	if (!drm_edid) {
 		dev_err(mhdp->dev, "Failed to read EDID\n");
 		return 0;
 	}
 
-	drm_edid_connector_update(connector, drm_edid);
 	num_modes = drm_edid_connector_add_modes(connector);
 	drm_edid_free(drm_edid);
 
-- 
2.39.2


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

* [PATCH v3 17/39] drm/bridge: display-connector: switch to ->edid_read callback
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (15 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 16/39] drm/bridge: cdns-mhdp8546: clear the EDID property on failures Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 18/39] drm/bridge: it6505: " Jani Nikula
                   ` (22 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based callback and functions.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/display-connector.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/bridge/display-connector.c b/drivers/gpu/drm/bridge/display-connector.c
index 08bd5695ddae..ab8e00baf3f1 100644
--- a/drivers/gpu/drm/bridge/display-connector.c
+++ b/drivers/gpu/drm/bridge/display-connector.c
@@ -81,12 +81,12 @@ display_connector_detect(struct drm_bridge *bridge)
 	}
 }
 
-static struct edid *display_connector_get_edid(struct drm_bridge *bridge,
-					       struct drm_connector *connector)
+static const struct drm_edid *display_connector_edid_read(struct drm_bridge *bridge,
+							  struct drm_connector *connector)
 {
 	struct display_connector *conn = to_display_connector(bridge);
 
-	return drm_get_edid(connector, conn->bridge.ddc);
+	return drm_edid_read_ddc(connector, conn->bridge.ddc);
 }
 
 /*
@@ -172,7 +172,7 @@ static u32 *display_connector_get_input_bus_fmts(struct drm_bridge *bridge,
 static const struct drm_bridge_funcs display_connector_bridge_funcs = {
 	.attach = display_connector_attach,
 	.detect = display_connector_detect,
-	.get_edid = display_connector_get_edid,
+	.edid_read = display_connector_edid_read,
 	.atomic_get_output_bus_fmts = display_connector_get_output_bus_fmts,
 	.atomic_get_input_bus_fmts = display_connector_get_input_bus_fmts,
 	.atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
-- 
2.39.2


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

* [PATCH v3 18/39] drm/bridge: it6505: switch to ->edid_read callback
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (16 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 17/39] drm/bridge: display-connector: switch to ->edid_read callback Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 19/39] drm: bridge: it66121: " Jani Nikula
                   ` (21 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based callback and functions.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/ite-it6505.c | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/bridge/ite-it6505.c b/drivers/gpu/drm/bridge/ite-it6505.c
index b589136ca6da..27334173e911 100644
--- a/drivers/gpu/drm/bridge/ite-it6505.c
+++ b/drivers/gpu/drm/bridge/ite-it6505.c
@@ -458,7 +458,7 @@ struct it6505 {
 	/* it6505 driver hold option */
 	bool enable_drv_hold;
 
-	struct edid *cached_edid;
+	const struct drm_edid *cached_edid;
 };
 
 struct it6505_step_train_para {
@@ -2263,7 +2263,7 @@ static void it6505_plugged_status_to_codec(struct it6505 *it6505)
 
 static void it6505_remove_edid(struct it6505 *it6505)
 {
-	kfree(it6505->cached_edid);
+	drm_edid_free(it6505->cached_edid);
 	it6505->cached_edid = NULL;
 }
 
@@ -3034,15 +3034,16 @@ it6505_bridge_detect(struct drm_bridge *bridge)
 	return it6505_detect(it6505);
 }
 
-static struct edid *it6505_bridge_get_edid(struct drm_bridge *bridge,
-					   struct drm_connector *connector)
+static const struct drm_edid *it6505_bridge_edid_read(struct drm_bridge *bridge,
+						      struct drm_connector *connector)
 {
 	struct it6505 *it6505 = bridge_to_it6505(bridge);
 	struct device *dev = it6505->dev;
 
 	if (!it6505->cached_edid) {
-		it6505->cached_edid = drm_do_get_edid(connector, it6505_get_edid_block,
-						      it6505);
+		it6505->cached_edid = drm_edid_read_custom(connector,
+							   it6505_get_edid_block,
+							   it6505);
 
 		if (!it6505->cached_edid) {
 			DRM_DEV_DEBUG_DRIVER(dev, "failed to get edid!");
@@ -3050,7 +3051,7 @@ static struct edid *it6505_bridge_get_edid(struct drm_bridge *bridge,
 		}
 	}
 
-	return drm_edid_duplicate(it6505->cached_edid);
+	return drm_edid_dup(it6505->cached_edid);
 }
 
 static const struct drm_bridge_funcs it6505_bridge_funcs = {
@@ -3065,7 +3066,7 @@ static const struct drm_bridge_funcs it6505_bridge_funcs = {
 	.atomic_pre_enable = it6505_bridge_atomic_pre_enable,
 	.atomic_post_disable = it6505_bridge_atomic_post_disable,
 	.detect = it6505_bridge_detect,
-	.get_edid = it6505_bridge_get_edid,
+	.edid_read = it6505_bridge_edid_read,
 };
 
 static __maybe_unused int it6505_bridge_resume(struct device *dev)
-- 
2.39.2


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

* [PATCH v3 19/39] drm: bridge: it66121: switch to ->edid_read callback
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (17 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 18/39] drm/bridge: it6505: " Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 20/39] drm/bridge: lt9611: " Jani Nikula
                   ` (20 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based callback and functions.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/ite-it66121.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/bridge/ite-it66121.c b/drivers/gpu/drm/bridge/ite-it66121.c
index 1cf3fb1f13dc..1c3433b5e366 100644
--- a/drivers/gpu/drm/bridge/ite-it66121.c
+++ b/drivers/gpu/drm/bridge/ite-it66121.c
@@ -874,33 +874,33 @@ static void it66121_bridge_hpd_disable(struct drm_bridge *bridge)
 		dev_err(ctx->dev, "failed to disable HPD IRQ\n");
 }
 
-static struct edid *it66121_bridge_get_edid(struct drm_bridge *bridge,
-					    struct drm_connector *connector)
+static const struct drm_edid *it66121_bridge_edid_read(struct drm_bridge *bridge,
+						       struct drm_connector *connector)
 {
 	struct it66121_ctx *ctx = container_of(bridge, struct it66121_ctx, bridge);
-	struct edid *edid;
+	const struct drm_edid *drm_edid;
 	int ret;
 
 	mutex_lock(&ctx->lock);
 	ret = it66121_preamble_ddc(ctx);
 	if (ret) {
-		edid = NULL;
+		drm_edid = NULL;
 		goto out_unlock;
 	}
 
 	ret = regmap_write(ctx->regmap, IT66121_DDC_HEADER_REG,
 			   IT66121_DDC_HEADER_EDID);
 	if (ret) {
-		edid = NULL;
+		drm_edid = NULL;
 		goto out_unlock;
 	}
 
-	edid = drm_do_get_edid(connector, it66121_get_edid_block, ctx);
+	drm_edid = drm_edid_read_custom(connector, it66121_get_edid_block, ctx);
 
 out_unlock:
 	mutex_unlock(&ctx->lock);
 
-	return edid;
+	return drm_edid;
 }
 
 static const struct drm_bridge_funcs it66121_bridge_funcs = {
@@ -916,7 +916,7 @@ static const struct drm_bridge_funcs it66121_bridge_funcs = {
 	.mode_set = it66121_bridge_mode_set,
 	.mode_valid = it66121_bridge_mode_valid,
 	.detect = it66121_bridge_detect,
-	.get_edid = it66121_bridge_get_edid,
+	.edid_read = it66121_bridge_edid_read,
 	.hpd_enable = it66121_bridge_hpd_enable,
 	.hpd_disable = it66121_bridge_hpd_disable,
 };
-- 
2.39.2


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

* [PATCH v3 20/39] drm/bridge: lt9611: switch to ->edid_read callback
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (18 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 19/39] drm: bridge: it66121: " Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 21/39] drm/bridge: lt9611uxc: " Jani Nikula
                   ` (19 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based callback and functions.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/lontium-lt9611.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/bridge/lontium-lt9611.c b/drivers/gpu/drm/bridge/lontium-lt9611.c
index b9205d14d943..a9c7e2b07ea1 100644
--- a/drivers/gpu/drm/bridge/lontium-lt9611.c
+++ b/drivers/gpu/drm/bridge/lontium-lt9611.c
@@ -847,13 +847,13 @@ lt9611_bridge_atomic_post_disable(struct drm_bridge *bridge,
 	lt9611_sleep_setup(lt9611);
 }
 
-static struct edid *lt9611_bridge_get_edid(struct drm_bridge *bridge,
-					   struct drm_connector *connector)
+static const struct drm_edid *lt9611_bridge_edid_read(struct drm_bridge *bridge,
+						      struct drm_connector *connector)
 {
 	struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
 
 	lt9611_power_on(lt9611);
-	return drm_do_get_edid(connector, lt9611_get_edid_block, lt9611);
+	return drm_edid_read_custom(connector, lt9611_get_edid_block, lt9611);
 }
 
 static void lt9611_bridge_hpd_enable(struct drm_bridge *bridge)
@@ -893,7 +893,7 @@ static const struct drm_bridge_funcs lt9611_bridge_funcs = {
 	.attach = lt9611_bridge_attach,
 	.mode_valid = lt9611_bridge_mode_valid,
 	.detect = lt9611_bridge_detect,
-	.get_edid = lt9611_bridge_get_edid,
+	.edid_read = lt9611_bridge_edid_read,
 	.hpd_enable = lt9611_bridge_hpd_enable,
 
 	.atomic_pre_enable = lt9611_bridge_atomic_pre_enable,
-- 
2.39.2


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

* [PATCH v3 21/39] drm/bridge: lt9611uxc: switch to ->edid_read callback
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (19 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 20/39] drm/bridge: lt9611: " Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 22/39] drm/bridge: megachips: " Jani Nikula
                   ` (18 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based callback and functions.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/lontium-lt9611uxc.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c b/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
index 4eaf99618749..bcf8bccd86d6 100644
--- a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
+++ b/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
@@ -495,8 +495,8 @@ static int lt9611uxc_get_edid_block(void *data, u8 *buf, unsigned int block, siz
 	return 0;
 };
 
-static struct edid *lt9611uxc_bridge_get_edid(struct drm_bridge *bridge,
-					      struct drm_connector *connector)
+static const struct drm_edid *lt9611uxc_bridge_edid_read(struct drm_bridge *bridge,
+							 struct drm_connector *connector)
 {
 	struct lt9611uxc *lt9611uxc = bridge_to_lt9611uxc(bridge);
 	int ret;
@@ -510,7 +510,7 @@ static struct edid *lt9611uxc_bridge_get_edid(struct drm_bridge *bridge,
 		return NULL;
 	}
 
-	return drm_do_get_edid(connector, lt9611uxc_get_edid_block, lt9611uxc);
+	return drm_edid_read_custom(connector, lt9611uxc_get_edid_block, lt9611uxc);
 }
 
 static const struct drm_bridge_funcs lt9611uxc_bridge_funcs = {
@@ -518,7 +518,7 @@ static const struct drm_bridge_funcs lt9611uxc_bridge_funcs = {
 	.mode_valid = lt9611uxc_bridge_mode_valid,
 	.mode_set = lt9611uxc_bridge_mode_set,
 	.detect = lt9611uxc_bridge_detect,
-	.get_edid = lt9611uxc_bridge_get_edid,
+	.edid_read = lt9611uxc_bridge_edid_read,
 };
 
 static int lt9611uxc_parse_dt(struct device *dev,
-- 
2.39.2


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

* [PATCH v3 22/39] drm/bridge: megachips: switch to ->edid_read callback
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (20 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 21/39] drm/bridge: lt9611uxc: " Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 23/39] drm/bridge: nxp-ptn3460: " Jani Nikula
                   ` (17 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based callback and functions.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 .../bridge/megachips-stdpxxxx-ge-b850v3-fw.c   | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c b/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c
index e93083bbec9d..4480523244e4 100644
--- a/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c
+++ b/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c
@@ -91,26 +91,26 @@ static int stdp2690_read_block(void *context, u8 *buf, unsigned int block, size_
 	return 0;
 }
 
-static struct edid *ge_b850v3_lvds_get_edid(struct drm_bridge *bridge,
-					    struct drm_connector *connector)
+static const struct drm_edid *ge_b850v3_lvds_edid_read(struct drm_bridge *bridge,
+						       struct drm_connector *connector)
 {
 	struct i2c_client *client;
 
 	client = ge_b850v3_lvds_ptr->stdp2690_i2c;
 
-	return drm_do_get_edid(connector, stdp2690_read_block, client);
+	return drm_edid_read_custom(connector, stdp2690_read_block, client);
 }
 
 static int ge_b850v3_lvds_get_modes(struct drm_connector *connector)
 {
-	struct edid *edid;
+	const struct drm_edid *drm_edid;
 	int num_modes;
 
-	edid = ge_b850v3_lvds_get_edid(&ge_b850v3_lvds_ptr->bridge, connector);
+	drm_edid = ge_b850v3_lvds_edid_read(&ge_b850v3_lvds_ptr->bridge, connector);
 
-	drm_connector_update_edid_property(connector, edid);
-	num_modes = drm_add_edid_modes(connector, edid);
-	kfree(edid);
+	drm_edid_connector_update(connector, drm_edid);
+	num_modes = drm_edid_connector_add_modes(connector);
+	drm_edid_free(drm_edid);
 
 	return num_modes;
 }
@@ -226,7 +226,7 @@ static int ge_b850v3_lvds_attach(struct drm_bridge *bridge,
 static const struct drm_bridge_funcs ge_b850v3_lvds_funcs = {
 	.attach = ge_b850v3_lvds_attach,
 	.detect = ge_b850v3_lvds_bridge_detect,
-	.get_edid = ge_b850v3_lvds_get_edid,
+	.edid_read = ge_b850v3_lvds_edid_read,
 };
 
 static int ge_b850v3_lvds_init(struct device *dev)
-- 
2.39.2


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

* [PATCH v3 23/39] drm/bridge: nxp-ptn3460: switch to ->edid_read callback
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (21 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 22/39] drm/bridge: megachips: " Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 24/39] drm/bridge: sii902x: use display info is_hdmi Jani Nikula
                   ` (16 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based callback and functions.

v2: Fix -Wsometimes-uninitialized (kernel test robot)

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/nxp-ptn3460.c | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/bridge/nxp-ptn3460.c b/drivers/gpu/drm/bridge/nxp-ptn3460.c
index 7c0076e49953..ed93fd4c3265 100644
--- a/drivers/gpu/drm/bridge/nxp-ptn3460.c
+++ b/drivers/gpu/drm/bridge/nxp-ptn3460.c
@@ -154,10 +154,11 @@ static void ptn3460_disable(struct drm_bridge *bridge)
 }
 
 
-static struct edid *ptn3460_get_edid(struct drm_bridge *bridge,
-				     struct drm_connector *connector)
+static const struct drm_edid *ptn3460_edid_read(struct drm_bridge *bridge,
+						struct drm_connector *connector)
 {
 	struct ptn3460_bridge *ptn_bridge = bridge_to_ptn3460(bridge);
+	const struct drm_edid *drm_edid = NULL;
 	bool power_off;
 	u8 *edid;
 	int ret;
@@ -175,27 +176,28 @@ static struct edid *ptn3460_get_edid(struct drm_bridge *bridge,
 				 EDID_LENGTH);
 	if (ret) {
 		kfree(edid);
-		edid = NULL;
 		goto out;
 	}
 
+	drm_edid = drm_edid_alloc(edid, EDID_LENGTH);
+
 out:
 	if (power_off)
 		ptn3460_disable(&ptn_bridge->bridge);
 
-	return (struct edid *)edid;
+	return drm_edid;
 }
 
 static int ptn3460_connector_get_modes(struct drm_connector *connector)
 {
 	struct ptn3460_bridge *ptn_bridge = connector_to_ptn3460(connector);
-	struct edid *edid;
+	const struct drm_edid *drm_edid;
 	int num_modes;
 
-	edid = ptn3460_get_edid(&ptn_bridge->bridge, connector);
-	drm_connector_update_edid_property(connector, edid);
-	num_modes = drm_add_edid_modes(connector, edid);
-	kfree(edid);
+	drm_edid = ptn3460_edid_read(&ptn_bridge->bridge, connector);
+	drm_edid_connector_update(connector, drm_edid);
+	num_modes = drm_edid_connector_add_modes(connector);
+	drm_edid_free(drm_edid);
 
 	return num_modes;
 }
@@ -254,7 +256,7 @@ static const struct drm_bridge_funcs ptn3460_bridge_funcs = {
 	.pre_enable = ptn3460_pre_enable,
 	.disable = ptn3460_disable,
 	.attach = ptn3460_bridge_attach,
-	.get_edid = ptn3460_get_edid,
+	.edid_read = ptn3460_edid_read,
 };
 
 static int ptn3460_probe(struct i2c_client *client)
-- 
2.39.2


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

* [PATCH v3 24/39] drm/bridge: sii902x: use display info is_hdmi
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (22 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 23/39] drm/bridge: nxp-ptn3460: " Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 25/39] drm/bridge: sii902x: switch to ->edid_read callback Jani Nikula
                   ` (15 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Use the pre-parsed information instead of parsing EDID again.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/sii902x.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm/bridge/sii902x.c
index 4560ae9cbce1..d59e668498c3 100644
--- a/drivers/gpu/drm/bridge/sii902x.c
+++ b/drivers/gpu/drm/bridge/sii902x.c
@@ -286,12 +286,6 @@ static struct edid *sii902x_get_edid(struct sii902x *sii902x,
 	mutex_lock(&sii902x->mutex);
 
 	edid = drm_get_edid(connector, sii902x->i2cmux->adapter[0]);
-	if (edid) {
-		if (drm_detect_hdmi_monitor(edid))
-			sii902x->sink_is_hdmi = true;
-		else
-			sii902x->sink_is_hdmi = false;
-	}
 
 	mutex_unlock(&sii902x->mutex);
 
@@ -311,6 +305,8 @@ static int sii902x_get_modes(struct drm_connector *connector)
 		kfree(edid);
 	}
 
+	sii902x->sink_is_hdmi = connector->display_info.is_hdmi;
+
 	return num;
 }
 
-- 
2.39.2


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

* [PATCH v3 25/39] drm/bridge: sii902x: switch to ->edid_read callback
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (23 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 24/39] drm/bridge: sii902x: use display info is_hdmi Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 26/39] drm/mediatek/dp: " Jani Nikula
                   ` (14 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based callback and functions.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/sii902x.c | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm/bridge/sii902x.c
index d59e668498c3..8f84e98249c7 100644
--- a/drivers/gpu/drm/bridge/sii902x.c
+++ b/drivers/gpu/drm/bridge/sii902x.c
@@ -278,31 +278,31 @@ static const struct drm_connector_funcs sii902x_connector_funcs = {
 	.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
 };
 
-static struct edid *sii902x_get_edid(struct sii902x *sii902x,
-				     struct drm_connector *connector)
+static const struct drm_edid *sii902x_edid_read(struct sii902x *sii902x,
+						struct drm_connector *connector)
 {
-	struct edid *edid;
+	const struct drm_edid *drm_edid;
 
 	mutex_lock(&sii902x->mutex);
 
-	edid = drm_get_edid(connector, sii902x->i2cmux->adapter[0]);
+	drm_edid = drm_edid_read_ddc(connector, sii902x->i2cmux->adapter[0]);
 
 	mutex_unlock(&sii902x->mutex);
 
-	return edid;
+	return drm_edid;
 }
 
 static int sii902x_get_modes(struct drm_connector *connector)
 {
 	struct sii902x *sii902x = connector_to_sii902x(connector);
-	struct edid *edid;
+	const struct drm_edid *drm_edid;
 	int num = 0;
 
-	edid = sii902x_get_edid(sii902x, connector);
-	drm_connector_update_edid_property(connector, edid);
-	if (edid) {
-		num = drm_add_edid_modes(connector, edid);
-		kfree(edid);
+	drm_edid = sii902x_edid_read(sii902x, connector);
+	drm_edid_connector_update(connector, drm_edid);
+	if (drm_edid) {
+		num = drm_edid_connector_add_modes(connector);
+		drm_edid_free(drm_edid);
 	}
 
 	sii902x->sink_is_hdmi = connector->display_info.is_hdmi;
@@ -461,12 +461,12 @@ static enum drm_connector_status sii902x_bridge_detect(struct drm_bridge *bridge
 	return sii902x_detect(sii902x);
 }
 
-static struct edid *sii902x_bridge_get_edid(struct drm_bridge *bridge,
-					    struct drm_connector *connector)
+static const struct drm_edid *sii902x_bridge_edid_read(struct drm_bridge *bridge,
+						       struct drm_connector *connector)
 {
 	struct sii902x *sii902x = bridge_to_sii902x(bridge);
 
-	return sii902x_get_edid(sii902x, connector);
+	return sii902x_edid_read(sii902x, connector);
 }
 
 static u32 *sii902x_bridge_atomic_get_input_bus_fmts(struct drm_bridge *bridge,
@@ -510,7 +510,7 @@ static const struct drm_bridge_funcs sii902x_bridge_funcs = {
 	.disable = sii902x_bridge_disable,
 	.enable = sii902x_bridge_enable,
 	.detect = sii902x_bridge_detect,
-	.get_edid = sii902x_bridge_get_edid,
+	.edid_read = sii902x_bridge_edid_read,
 	.atomic_reset = drm_atomic_helper_bridge_reset,
 	.atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
 	.atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
-- 
2.39.2


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

* [PATCH v3 26/39] drm/mediatek/dp: switch to ->edid_read callback
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (24 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 25/39] drm/bridge: sii902x: switch to ->edid_read callback Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 27/39] drm/mediatek/hdmi: " Jani Nikula
                   ` (13 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based callback and functions.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/mediatek/mtk_dp.c | 31 ++++++++++++++++++++-----------
 1 file changed, 20 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_dp.c b/drivers/gpu/drm/mediatek/mtk_dp.c
index 2136a596efa1..0ba72102636a 100644
--- a/drivers/gpu/drm/mediatek/mtk_dp.c
+++ b/drivers/gpu/drm/mediatek/mtk_dp.c
@@ -2042,12 +2042,12 @@ static enum drm_connector_status mtk_dp_bdg_detect(struct drm_bridge *bridge)
 	return ret;
 }
 
-static struct edid *mtk_dp_get_edid(struct drm_bridge *bridge,
-				    struct drm_connector *connector)
+static const struct drm_edid *mtk_dp_edid_read(struct drm_bridge *bridge,
+					       struct drm_connector *connector)
 {
 	struct mtk_dp *mtk_dp = mtk_dp_from_bridge(bridge);
 	bool enabled = mtk_dp->enabled;
-	struct edid *new_edid = NULL;
+	const struct drm_edid *drm_edid;
 	struct mtk_dp_audio_cfg *audio_caps = &mtk_dp->info.audio_cur_cfg;
 
 	if (!enabled) {
@@ -2055,7 +2055,7 @@ static struct edid *mtk_dp_get_edid(struct drm_bridge *bridge,
 		mtk_dp_aux_panel_poweron(mtk_dp, true);
 	}
 
-	new_edid = drm_get_edid(connector, &mtk_dp->aux.ddc);
+	drm_edid = drm_edid_read_ddc(connector, &mtk_dp->aux.ddc);
 
 	/*
 	 * Parse capability here to let atomic_get_input_bus_fmts and
@@ -2063,17 +2063,26 @@ static struct edid *mtk_dp_get_edid(struct drm_bridge *bridge,
 	 */
 	if (mtk_dp_parse_capabilities(mtk_dp)) {
 		drm_err(mtk_dp->drm_dev, "Can't parse capabilities\n");
-		kfree(new_edid);
-		new_edid = NULL;
+		drm_edid_free(drm_edid);
+		drm_edid = NULL;
 	}
 
-	if (new_edid) {
+	if (drm_edid) {
+		/*
+		 * FIXME: get rid of drm_edid_raw()
+		 */
+		const struct edid *edid = drm_edid_raw(drm_edid);
 		struct cea_sad *sads;
 
-		audio_caps->sad_count = drm_edid_to_sad(new_edid, &sads);
+		audio_caps->sad_count = drm_edid_to_sad(edid, &sads);
 		kfree(sads);
 
-		audio_caps->detect_monitor = drm_detect_monitor_audio(new_edid);
+		/*
+		 * FIXME: This should use connector->display_info.has_audio from
+		 * a path that has read the EDID and called
+		 * drm_edid_connector_update().
+		 */
+		audio_caps->detect_monitor = drm_detect_monitor_audio(edid);
 	}
 
 	if (!enabled) {
@@ -2081,7 +2090,7 @@ static struct edid *mtk_dp_get_edid(struct drm_bridge *bridge,
 		drm_atomic_bridge_chain_post_disable(bridge, connector->state->state);
 	}
 
-	return new_edid;
+	return drm_edid;
 }
 
 static ssize_t mtk_dp_aux_transfer(struct drm_dp_aux *mtk_aux,
@@ -2433,7 +2442,7 @@ static const struct drm_bridge_funcs mtk_dp_bridge_funcs = {
 	.atomic_enable = mtk_dp_bridge_atomic_enable,
 	.atomic_disable = mtk_dp_bridge_atomic_disable,
 	.mode_valid = mtk_dp_bridge_mode_valid,
-	.get_edid = mtk_dp_get_edid,
+	.edid_read = mtk_dp_edid_read,
 	.detect = mtk_dp_bdg_detect,
 };
 
-- 
2.39.2


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

* [PATCH v3 27/39] drm/mediatek/hdmi: switch to ->edid_read callback
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (25 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 26/39] drm/mediatek/dp: " Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 28/39] drm/msm/hdmi: fix indent Jani Nikula
                   ` (12 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based callback and functions.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/mediatek/mtk_hdmi.c | 26 +++++++++++++++++---------
 1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/mediatek/mtk_hdmi.c b/drivers/gpu/drm/mediatek/mtk_hdmi.c
index 86133bf16326..c6bdc565e4a9 100644
--- a/drivers/gpu/drm/mediatek/mtk_hdmi.c
+++ b/drivers/gpu/drm/mediatek/mtk_hdmi.c
@@ -1265,19 +1265,27 @@ static enum drm_connector_status mtk_hdmi_bridge_detect(struct drm_bridge *bridg
 	return mtk_hdmi_detect(hdmi);
 }
 
-static struct edid *mtk_hdmi_bridge_get_edid(struct drm_bridge *bridge,
-					     struct drm_connector *connector)
+static const struct drm_edid *mtk_hdmi_bridge_edid_read(struct drm_bridge *bridge,
+							struct drm_connector *connector)
 {
 	struct mtk_hdmi *hdmi = hdmi_ctx_from_bridge(bridge);
-	struct edid *edid;
+	const struct drm_edid *drm_edid;
 
 	if (!hdmi->ddc_adpt)
 		return NULL;
-	edid = drm_get_edid(connector, hdmi->ddc_adpt);
-	if (!edid)
-		return NULL;
-	hdmi->dvi_mode = !drm_detect_monitor_audio(edid);
-	return edid;
+	drm_edid = drm_edid_read_ddc(connector, hdmi->ddc_adpt);
+	if (drm_edid) {
+		/*
+		 * FIXME: This should use !connector->display_info.has_audio (or
+		 * !connector->display_info.is_hdmi) from a path that has read
+		 * the EDID and called drm_edid_connector_update().
+		 */
+		const struct edid *edid = drm_edid_raw(drm_edid);
+
+		hdmi->dvi_mode = !drm_detect_monitor_audio(edid);
+	}
+
+	return drm_edid;
 }
 
 static int mtk_hdmi_bridge_attach(struct drm_bridge *bridge,
@@ -1417,7 +1425,7 @@ static const struct drm_bridge_funcs mtk_hdmi_bridge_funcs = {
 	.atomic_pre_enable = mtk_hdmi_bridge_atomic_pre_enable,
 	.atomic_enable = mtk_hdmi_bridge_atomic_enable,
 	.detect = mtk_hdmi_bridge_detect,
-	.get_edid = mtk_hdmi_bridge_get_edid,
+	.edid_read = mtk_hdmi_bridge_edid_read,
 };
 
 static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
-- 
2.39.2


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

* [PATCH v3 28/39] drm/msm/hdmi: fix indent
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (26 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 27/39] drm/mediatek/hdmi: " Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 29/39] drm/msm/hdmi: switch to ->edid_read callback Jani Nikula
                   ` (11 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Remove the excess leading tabs.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/msm/hdmi/hdmi_bridge.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c b/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
index f5e01471b0b0..f28c61570533 100644
--- a/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
+++ b/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
@@ -290,12 +290,12 @@ static enum drm_mode_status msm_hdmi_bridge_mode_valid(struct drm_bridge *bridge
 }
 
 static const struct drm_bridge_funcs msm_hdmi_bridge_funcs = {
-		.pre_enable = msm_hdmi_bridge_pre_enable,
-		.post_disable = msm_hdmi_bridge_post_disable,
-		.mode_set = msm_hdmi_bridge_mode_set,
-		.mode_valid = msm_hdmi_bridge_mode_valid,
-		.get_edid = msm_hdmi_bridge_get_edid,
-		.detect = msm_hdmi_bridge_detect,
+	.pre_enable = msm_hdmi_bridge_pre_enable,
+	.post_disable = msm_hdmi_bridge_post_disable,
+	.mode_set = msm_hdmi_bridge_mode_set,
+	.mode_valid = msm_hdmi_bridge_mode_valid,
+	.get_edid = msm_hdmi_bridge_get_edid,
+	.detect = msm_hdmi_bridge_detect,
 };
 
 static void
-- 
2.39.2


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

* [PATCH v3 29/39] drm/msm/hdmi: switch to ->edid_read callback
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (27 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 28/39] drm/msm/hdmi: fix indent Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 30/39] drm/omap/hdmi4: " Jani Nikula
                   ` (10 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based callback and functions.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/msm/hdmi/hdmi_bridge.c | 23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c b/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
index f28c61570533..4a5b5112227f 100644
--- a/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
+++ b/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
@@ -236,24 +236,33 @@ static void msm_hdmi_bridge_mode_set(struct drm_bridge *bridge,
 		msm_hdmi_audio_update(hdmi);
 }
 
-static struct edid *msm_hdmi_bridge_get_edid(struct drm_bridge *bridge,
-		struct drm_connector *connector)
+static const struct drm_edid *msm_hdmi_bridge_edid_read(struct drm_bridge *bridge,
+							struct drm_connector *connector)
 {
 	struct hdmi_bridge *hdmi_bridge = to_hdmi_bridge(bridge);
 	struct hdmi *hdmi = hdmi_bridge->hdmi;
-	struct edid *edid;
+	const struct drm_edid *drm_edid;
 	uint32_t hdmi_ctrl;
 
 	hdmi_ctrl = hdmi_read(hdmi, REG_HDMI_CTRL);
 	hdmi_write(hdmi, REG_HDMI_CTRL, hdmi_ctrl | HDMI_CTRL_ENABLE);
 
-	edid = drm_get_edid(connector, hdmi->i2c);
+	drm_edid = drm_edid_read_ddc(connector, hdmi->i2c);
 
 	hdmi_write(hdmi, REG_HDMI_CTRL, hdmi_ctrl);
 
-	hdmi->hdmi_mode = drm_detect_hdmi_monitor(edid);
+	if (drm_edid) {
+		/*
+		 * FIXME: This should use connector->display_info.is_hdmi from a
+		 * path that has read the EDID and called
+		 * drm_edid_connector_update().
+		 */
+		const struct edid *edid = drm_edid_raw(drm_edid);
 
-	return edid;
+		hdmi->hdmi_mode = drm_detect_hdmi_monitor(edid);
+	}
+
+	return drm_edid;
 }
 
 static enum drm_mode_status msm_hdmi_bridge_mode_valid(struct drm_bridge *bridge,
@@ -294,7 +303,7 @@ static const struct drm_bridge_funcs msm_hdmi_bridge_funcs = {
 	.post_disable = msm_hdmi_bridge_post_disable,
 	.mode_set = msm_hdmi_bridge_mode_set,
 	.mode_valid = msm_hdmi_bridge_mode_valid,
-	.get_edid = msm_hdmi_bridge_get_edid,
+	.edid_read = msm_hdmi_bridge_edid_read,
 	.detect = msm_hdmi_bridge_detect,
 };
 
-- 
2.39.2


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

* [PATCH v3 30/39] drm/omap/hdmi4: switch to ->edid_read callback
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (28 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 29/39] drm/msm/hdmi: switch to ->edid_read callback Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 31/39] drm/omap/hdmi5: " Jani Nikula
                   ` (9 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based callback and functions.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/omapdrm/dss/hdmi4.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
index a26b77d99d52..9b8747d83ee8 100644
--- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
@@ -436,11 +436,11 @@ static void hdmi4_bridge_hpd_notify(struct drm_bridge *bridge,
 		hdmi4_cec_set_phys_addr(&hdmi->core, CEC_PHYS_ADDR_INVALID);
 }
 
-static struct edid *hdmi4_bridge_get_edid(struct drm_bridge *bridge,
-					  struct drm_connector *connector)
+static const struct drm_edid *hdmi4_bridge_edid_read(struct drm_bridge *bridge,
+						     struct drm_connector *connector)
 {
 	struct omap_hdmi *hdmi = drm_bridge_to_hdmi(bridge);
-	struct edid *edid = NULL;
+	const struct drm_edid *drm_edid = NULL;
 	unsigned int cec_addr;
 	bool need_enable;
 	int r;
@@ -461,13 +461,21 @@ static struct edid *hdmi4_bridge_get_edid(struct drm_bridge *bridge,
 	if (r)
 		goto done;
 
-	edid = drm_do_get_edid(connector, hdmi4_core_ddc_read, &hdmi->core);
+	drm_edid = drm_edid_read_custom(connector, hdmi4_core_ddc_read, &hdmi->core);
 
 done:
 	hdmi_runtime_put(hdmi);
 	mutex_unlock(&hdmi->lock);
 
-	if (edid && edid->extensions) {
+	if (drm_edid) {
+		/*
+		 * FIXME: The CEC physical address should be set using
+		 * hdmi4_cec_set_phys_addr(&hdmi->core,
+		 * connector->display_info.source_physical_address) from a path
+		 * that has read the EDID and called
+		 * drm_edid_connector_update().
+		 */
+		const struct edid *edid = drm_edid_raw(drm_edid);
 		unsigned int len = (edid->extensions + 1) * EDID_LENGTH;
 
 		cec_addr = cec_get_edid_phys_addr((u8 *)edid, len, NULL);
@@ -480,7 +488,7 @@ static struct edid *hdmi4_bridge_get_edid(struct drm_bridge *bridge,
 	if (need_enable)
 		hdmi4_core_disable(&hdmi->core);
 
-	return edid;
+	return drm_edid;
 }
 
 static const struct drm_bridge_funcs hdmi4_bridge_funcs = {
@@ -492,7 +500,7 @@ static const struct drm_bridge_funcs hdmi4_bridge_funcs = {
 	.atomic_enable = hdmi4_bridge_enable,
 	.atomic_disable = hdmi4_bridge_disable,
 	.hpd_notify = hdmi4_bridge_hpd_notify,
-	.get_edid = hdmi4_bridge_get_edid,
+	.edid_read = hdmi4_bridge_edid_read,
 };
 
 static void hdmi4_bridge_init(struct omap_hdmi *hdmi)
-- 
2.39.2


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

* [PATCH v3 31/39] drm/omap/hdmi5: switch to ->edid_read callback
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (29 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 30/39] drm/omap/hdmi4: " Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 32/39] drm: xlnx: zynqmp_dpsub: " Jani Nikula
                   ` (8 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based callback and functions.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/omapdrm/dss/hdmi5.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi5.c b/drivers/gpu/drm/omapdrm/dss/hdmi5.c
index e6611c683857..c7ae2235ae99 100644
--- a/drivers/gpu/drm/omapdrm/dss/hdmi5.c
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi5.c
@@ -425,11 +425,11 @@ static void hdmi5_bridge_disable(struct drm_bridge *bridge,
 	mutex_unlock(&hdmi->lock);
 }
 
-static struct edid *hdmi5_bridge_get_edid(struct drm_bridge *bridge,
-					  struct drm_connector *connector)
+static const struct drm_edid *hdmi5_bridge_edid_read(struct drm_bridge *bridge,
+						     struct drm_connector *connector)
 {
 	struct omap_hdmi *hdmi = drm_bridge_to_hdmi(bridge);
-	struct edid *edid;
+	const struct drm_edid *drm_edid;
 	bool need_enable;
 	int idlemode;
 	int r;
@@ -452,7 +452,7 @@ static struct edid *hdmi5_bridge_get_edid(struct drm_bridge *bridge,
 
 	hdmi5_core_ddc_init(&hdmi->core);
 
-	edid = drm_do_get_edid(connector, hdmi5_core_ddc_read, &hdmi->core);
+	drm_edid = drm_edid_read_custom(connector, hdmi5_core_ddc_read, &hdmi->core);
 
 	hdmi5_core_ddc_uninit(&hdmi->core);
 
@@ -464,7 +464,7 @@ static struct edid *hdmi5_bridge_get_edid(struct drm_bridge *bridge,
 	if (need_enable)
 		hdmi_core_disable(hdmi);
 
-	return (struct edid *)edid;
+	return drm_edid;
 }
 
 static const struct drm_bridge_funcs hdmi5_bridge_funcs = {
@@ -475,7 +475,7 @@ static const struct drm_bridge_funcs hdmi5_bridge_funcs = {
 	.atomic_reset = drm_atomic_helper_bridge_reset,
 	.atomic_enable = hdmi5_bridge_enable,
 	.atomic_disable = hdmi5_bridge_disable,
-	.get_edid = hdmi5_bridge_get_edid,
+	.edid_read = hdmi5_bridge_edid_read,
 };
 
 static void hdmi5_bridge_init(struct omap_hdmi *hdmi)
-- 
2.39.2


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

* [PATCH v3 32/39] drm: xlnx: zynqmp_dpsub: switch to ->edid_read callback
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (30 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 31/39] drm/omap/hdmi5: " Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 33/39] drm: adv7511: " Jani Nikula
                   ` (7 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based callback and functions.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/xlnx/zynqmp_dp.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/xlnx/zynqmp_dp.c b/drivers/gpu/drm/xlnx/zynqmp_dp.c
index a0606fab0e22..24213eaa38d0 100644
--- a/drivers/gpu/drm/xlnx/zynqmp_dp.c
+++ b/drivers/gpu/drm/xlnx/zynqmp_dp.c
@@ -1560,12 +1560,12 @@ static enum drm_connector_status zynqmp_dp_bridge_detect(struct drm_bridge *brid
 	return connector_status_disconnected;
 }
 
-static struct edid *zynqmp_dp_bridge_get_edid(struct drm_bridge *bridge,
-					      struct drm_connector *connector)
+static const struct drm_edid *zynqmp_dp_bridge_edid_read(struct drm_bridge *bridge,
+							 struct drm_connector *connector)
 {
 	struct zynqmp_dp *dp = bridge_to_dp(bridge);
 
-	return drm_get_edid(connector, &dp->aux.ddc);
+	return drm_edid_read_ddc(connector, &dp->aux.ddc);
 }
 
 static const struct drm_bridge_funcs zynqmp_dp_bridge_funcs = {
@@ -1579,7 +1579,7 @@ static const struct drm_bridge_funcs zynqmp_dp_bridge_funcs = {
 	.atomic_reset = drm_atomic_helper_bridge_reset,
 	.atomic_check = zynqmp_dp_bridge_atomic_check,
 	.detect = zynqmp_dp_bridge_detect,
-	.get_edid = zynqmp_dp_bridge_get_edid,
+	.edid_read = zynqmp_dp_bridge_edid_read,
 };
 
 /* -----------------------------------------------------------------------------
-- 
2.39.2


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

* [PATCH v3 33/39] drm: adv7511: switch to ->edid_read callback
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (31 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 32/39] drm: xlnx: zynqmp_dpsub: " Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 34/39] drm: bridge: dw_hdmi: " Jani Nikula
                   ` (6 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based callback and functions.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 47 +++++++++++++-------
 1 file changed, 30 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
index 8be235144f6d..1e40d451ce8c 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
@@ -604,10 +604,10 @@ static int adv7511_get_edid_block(void *data, u8 *buf, unsigned int block,
  * ADV75xx helpers
  */
 
-static struct edid *adv7511_get_edid(struct adv7511 *adv7511,
-				     struct drm_connector *connector)
+static const struct drm_edid *adv7511_edid_read(struct adv7511 *adv7511,
+						struct drm_connector *connector)
 {
-	struct edid *edid;
+	const struct drm_edid *drm_edid;
 
 	/* Reading the EDID only works if the device is powered */
 	if (!adv7511->powered) {
@@ -621,31 +621,44 @@ static struct edid *adv7511_get_edid(struct adv7511 *adv7511,
 			     edid_i2c_addr);
 	}
 
-	edid = drm_do_get_edid(connector, adv7511_get_edid_block, adv7511);
+	drm_edid = drm_edid_read_custom(connector, adv7511_get_edid_block, adv7511);
 
 	if (!adv7511->powered)
 		__adv7511_power_off(adv7511);
 
-	adv7511_set_config_csc(adv7511, connector, adv7511->rgb,
-			       drm_detect_hdmi_monitor(edid));
+	if (drm_edid) {
+		/*
+		 * FIXME: The CEC physical address should be set using
+		 * cec_s_phys_addr(adap,
+		 * connector->display_info.source_physical_address, false) from
+		 * a path that has read the EDID and called
+		 * drm_edid_connector_update().
+		 */
+		const struct edid *edid = drm_edid_raw(drm_edid);
+
+		adv7511_set_config_csc(adv7511, connector, adv7511->rgb,
+				       drm_detect_hdmi_monitor(edid));
 
-	cec_s_phys_addr_from_edid(adv7511->cec_adap, edid);
+		cec_s_phys_addr_from_edid(adv7511->cec_adap, edid);
+	} else {
+		cec_s_phys_addr_from_edid(adv7511->cec_adap, NULL);
+	}
 
-	return edid;
+	return drm_edid;
 }
 
 static int adv7511_get_modes(struct adv7511 *adv7511,
 			     struct drm_connector *connector)
 {
-	struct edid *edid;
+	const struct drm_edid *drm_edid;
 	unsigned int count;
 
-	edid = adv7511_get_edid(adv7511, connector);
+	drm_edid = adv7511_edid_read(adv7511, connector);
 
-	drm_connector_update_edid_property(connector, edid);
-	count = drm_add_edid_modes(connector, edid);
+	drm_edid_connector_update(connector, drm_edid);
+	count = drm_edid_connector_add_modes(connector);
 
-	kfree(edid);
+	drm_edid_free(drm_edid);
 
 	return count;
 }
@@ -953,12 +966,12 @@ static enum drm_connector_status adv7511_bridge_detect(struct drm_bridge *bridge
 	return adv7511_detect(adv, NULL);
 }
 
-static struct edid *adv7511_bridge_get_edid(struct drm_bridge *bridge,
-					    struct drm_connector *connector)
+static const struct drm_edid *adv7511_bridge_edid_read(struct drm_bridge *bridge,
+						       struct drm_connector *connector)
 {
 	struct adv7511 *adv = bridge_to_adv7511(bridge);
 
-	return adv7511_get_edid(adv, connector);
+	return adv7511_edid_read(adv, connector);
 }
 
 static void adv7511_bridge_hpd_notify(struct drm_bridge *bridge,
@@ -977,7 +990,7 @@ static const struct drm_bridge_funcs adv7511_bridge_funcs = {
 	.mode_valid = adv7511_bridge_mode_valid,
 	.attach = adv7511_bridge_attach,
 	.detect = adv7511_bridge_detect,
-	.get_edid = adv7511_bridge_get_edid,
+	.edid_read = adv7511_bridge_edid_read,
 	.hpd_notify = adv7511_bridge_hpd_notify,
 };
 
-- 
2.39.2


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

* [PATCH v3 34/39] drm: bridge: dw_hdmi: switch to ->edid_read callback
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (32 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 33/39] drm: adv7511: " Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 35/39] drm: bridge: dw_hdmi: clear the EDID property and CEC address on failures Jani Nikula
                   ` (5 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based callback and functions.

v2: Fix -Wuninitialized (kernel test robot)

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 43 ++++++++++++++---------
 1 file changed, 26 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
index ca74a20015b3..4a2e3f9c1dfd 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
@@ -2454,27 +2454,35 @@ static enum drm_connector_status dw_hdmi_detect(struct dw_hdmi *hdmi)
 	return result;
 }
 
-static struct edid *dw_hdmi_get_edid(struct dw_hdmi *hdmi,
-				     struct drm_connector *connector)
+static const struct drm_edid *dw_hdmi_edid_read(struct dw_hdmi *hdmi,
+						struct drm_connector *connector)
 {
-	struct edid *edid;
+	const struct drm_edid *drm_edid;
+	const struct edid *edid;
 
 	if (!hdmi->ddc)
 		return NULL;
 
-	edid = drm_get_edid(connector, hdmi->ddc);
-	if (!edid) {
+	drm_edid = drm_edid_read_ddc(connector, hdmi->ddc);
+	if (!drm_edid) {
 		dev_dbg(hdmi->dev, "failed to get edid\n");
 		return NULL;
 	}
 
+	/*
+	 * FIXME: This should use connector->display_info.is_hdmi and
+	 * connector->display_info.has_audio from a path that has read the EDID
+	 * and called drm_edid_connector_update().
+	 */
+	edid = drm_edid_raw(drm_edid);
+
 	dev_dbg(hdmi->dev, "got edid: width[%d] x height[%d]\n",
 		edid->width_cm, edid->height_cm);
 
 	hdmi->sink_is_hdmi = drm_detect_hdmi_monitor(edid);
 	hdmi->sink_has_audio = drm_detect_monitor_audio(edid);
 
-	return edid;
+	return drm_edid;
 }
 
 /* -----------------------------------------------------------------------------
@@ -2493,17 +2501,18 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector)
 {
 	struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi,
 					     connector);
-	struct edid *edid;
+	const struct drm_edid *drm_edid;
 	int ret;
 
-	edid = dw_hdmi_get_edid(hdmi, connector);
-	if (!edid)
+	drm_edid = dw_hdmi_edid_read(hdmi, connector);
+	if (!drm_edid)
 		return 0;
 
-	drm_connector_update_edid_property(connector, edid);
-	cec_notifier_set_phys_addr_from_edid(hdmi->cec_notifier, edid);
-	ret = drm_add_edid_modes(connector, edid);
-	kfree(edid);
+	drm_edid_connector_update(connector, drm_edid);
+	cec_notifier_set_phys_addr(hdmi->cec_notifier,
+				   connector->display_info.source_physical_address);
+	ret = drm_edid_connector_add_modes(connector);
+	drm_edid_free(drm_edid);
 
 	return ret;
 }
@@ -2980,12 +2989,12 @@ static enum drm_connector_status dw_hdmi_bridge_detect(struct drm_bridge *bridge
 	return dw_hdmi_detect(hdmi);
 }
 
-static struct edid *dw_hdmi_bridge_get_edid(struct drm_bridge *bridge,
-					    struct drm_connector *connector)
+static const struct drm_edid *dw_hdmi_bridge_edid_read(struct drm_bridge *bridge,
+						       struct drm_connector *connector)
 {
 	struct dw_hdmi *hdmi = bridge->driver_private;
 
-	return dw_hdmi_get_edid(hdmi, connector);
+	return dw_hdmi_edid_read(hdmi, connector);
 }
 
 static const struct drm_bridge_funcs dw_hdmi_bridge_funcs = {
@@ -3002,7 +3011,7 @@ static const struct drm_bridge_funcs dw_hdmi_bridge_funcs = {
 	.mode_set = dw_hdmi_bridge_mode_set,
 	.mode_valid = dw_hdmi_bridge_mode_valid,
 	.detect = dw_hdmi_bridge_detect,
-	.get_edid = dw_hdmi_bridge_get_edid,
+	.edid_read = dw_hdmi_bridge_edid_read,
 };
 
 /* -----------------------------------------------------------------------------
-- 
2.39.2


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

* [PATCH v3 35/39] drm: bridge: dw_hdmi: clear the EDID property and CEC address on failures
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (33 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 34/39] drm: bridge: dw_hdmi: " Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 36/39] drm/bridge: tc358767: update the EDID property Jani Nikula
                   ` (4 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

If EDID read fails, clear the EDID property and CEC address.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
index 4a2e3f9c1dfd..0e59b30d5227 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
@@ -2505,8 +2505,6 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector)
 	int ret;
 
 	drm_edid = dw_hdmi_edid_read(hdmi, connector);
-	if (!drm_edid)
-		return 0;
 
 	drm_edid_connector_update(connector, drm_edid);
 	cec_notifier_set_phys_addr(hdmi->cec_notifier,
-- 
2.39.2


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

* [PATCH v3 36/39] drm/bridge: tc358767: update the EDID property
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (34 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 35/39] drm: bridge: dw_hdmi: clear the EDID property and CEC address on failures Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 37/39] drm/bridge: tc358767: switch to ->edid_read callback Jani Nikula
                   ` (3 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

The EDID property should be updated between reading the EDID and adding
the modes.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/tc358767.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c
index f10ba91dc252..37b1353cf2e3 100644
--- a/drivers/gpu/drm/bridge/tc358767.c
+++ b/drivers/gpu/drm/bridge/tc358767.c
@@ -1679,6 +1679,7 @@ static int tc_connector_get_modes(struct drm_connector *connector)
 	}
 
 	edid = tc_get_edid(&tc->bridge, connector);
+	drm_connector_update_edid_property(connector, edid);
 	num_modes = drm_add_edid_modes(connector, edid);
 	kfree(edid);
 
-- 
2.39.2


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

* [PATCH v3 37/39] drm/bridge: tc358767: switch to ->edid_read callback
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (35 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 36/39] drm/bridge: tc358767: update the EDID property Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 38/39] drm/bridge: ti-sn65dsi86: " Jani Nikula
                   ` (2 subsequent siblings)
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based callback and functions.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/tc358767.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c
index 37b1353cf2e3..166f9a3e9622 100644
--- a/drivers/gpu/drm/bridge/tc358767.c
+++ b/drivers/gpu/drm/bridge/tc358767.c
@@ -1651,19 +1651,19 @@ static void tc_bridge_mode_set(struct drm_bridge *bridge,
 	drm_mode_copy(&tc->mode, mode);
 }
 
-static struct edid *tc_get_edid(struct drm_bridge *bridge,
-				struct drm_connector *connector)
+static const struct drm_edid *tc_edid_read(struct drm_bridge *bridge,
+					   struct drm_connector *connector)
 {
 	struct tc_data *tc = bridge_to_tc(bridge);
 
-	return drm_get_edid(connector, &tc->aux.ddc);
+	return drm_edid_read_ddc(connector, &tc->aux.ddc);
 }
 
 static int tc_connector_get_modes(struct drm_connector *connector)
 {
 	struct tc_data *tc = connector_to_tc(connector);
 	int num_modes;
-	struct edid *edid;
+	const struct drm_edid *drm_edid;
 	int ret;
 
 	ret = tc_get_display_props(tc);
@@ -1678,10 +1678,10 @@ static int tc_connector_get_modes(struct drm_connector *connector)
 			return num_modes;
 	}
 
-	edid = tc_get_edid(&tc->bridge, connector);
-	drm_connector_update_edid_property(connector, edid);
-	num_modes = drm_add_edid_modes(connector, edid);
-	kfree(edid);
+	drm_edid = tc_edid_read(&tc->bridge, connector);
+	drm_edid_connector_update(connector, drm_edid);
+	num_modes = drm_edid_connector_add_modes(connector);
+	drm_edid_free(drm_edid);
 
 	return num_modes;
 }
@@ -1850,7 +1850,7 @@ static const struct drm_bridge_funcs tc_edp_bridge_funcs = {
 	.atomic_enable = tc_edp_bridge_atomic_enable,
 	.atomic_disable = tc_edp_bridge_atomic_disable,
 	.detect = tc_bridge_detect,
-	.get_edid = tc_get_edid,
+	.edid_read = tc_edid_read,
 	.atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
 	.atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
 	.atomic_reset = drm_atomic_helper_bridge_reset,
-- 
2.39.2


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

* [PATCH v3 38/39] drm/bridge: ti-sn65dsi86: switch to ->edid_read callback
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (36 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 37/39] drm/bridge: tc358767: switch to ->edid_read callback Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-23 19:37 ` [PATCH v3 39/39] drm/bridge: remove ->get_edid callback Jani Nikula
  2024-01-25 12:57 ` [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Neil Armstrong
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

Prefer using the struct drm_edid based callback and functions.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/bridge/ti-sn65dsi86.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
index 62cc3893dca5..61dc6f063fb4 100644
--- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c
+++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c
@@ -1207,19 +1207,19 @@ static enum drm_connector_status ti_sn_bridge_detect(struct drm_bridge *bridge)
 					 : connector_status_disconnected;
 }
 
-static struct edid *ti_sn_bridge_get_edid(struct drm_bridge *bridge,
-					  struct drm_connector *connector)
+static const struct drm_edid *ti_sn_bridge_edid_read(struct drm_bridge *bridge,
+						     struct drm_connector *connector)
 {
 	struct ti_sn65dsi86 *pdata = bridge_to_ti_sn65dsi86(bridge);
 
-	return drm_get_edid(connector, &pdata->aux.ddc);
+	return drm_edid_read_ddc(connector, &pdata->aux.ddc);
 }
 
 static const struct drm_bridge_funcs ti_sn_bridge_funcs = {
 	.attach = ti_sn_bridge_attach,
 	.detach = ti_sn_bridge_detach,
 	.mode_valid = ti_sn_bridge_mode_valid,
-	.get_edid = ti_sn_bridge_get_edid,
+	.edid_read = ti_sn_bridge_edid_read,
 	.detect = ti_sn_bridge_detect,
 	.atomic_pre_enable = ti_sn_bridge_atomic_pre_enable,
 	.atomic_enable = ti_sn_bridge_atomic_enable,
-- 
2.39.2


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

* [PATCH v3 39/39] drm/bridge: remove ->get_edid callback
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (37 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 38/39] drm/bridge: ti-sn65dsi86: " Jani Nikula
@ 2024-01-23 19:37 ` Jani Nikula
  2024-01-25 12:57 ` [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Neil Armstrong
  39 siblings, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-23 19:37 UTC (permalink / raw)
  To: dri-devel, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec
  Cc: Jani Nikula

There are no more users of the ->get_edid callback left. They've all
been converted to ->edid_read. Remove the callback, and the fallback in
drm_bridge_edid_read().

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/drm_bridge.c | 19 -------------------
 include/drm/drm_bridge.h     | 30 ------------------------------
 2 files changed, 49 deletions(-)

diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
index a3065d4aa3d6..521a71c61b16 100644
--- a/drivers/gpu/drm/drm_bridge.c
+++ b/drivers/gpu/drm/drm_bridge.c
@@ -1216,9 +1216,6 @@ EXPORT_SYMBOL_GPL(drm_bridge_get_modes);
  * DRM_BRIDGE_OP_EDID bridge ops flag, call &drm_bridge_funcs.edid_read to get
  * the EDID and return it. Otherwise return NULL.
  *
- * If &drm_bridge_funcs.edid_read is not set, fall back to using
- * &drm_bridge_funcs.get_edid and wrapping it in struct drm_edid.
- *
  * RETURNS:
  * The retrieved EDID on success, or NULL otherwise.
  */
@@ -1228,22 +1225,6 @@ const struct drm_edid *drm_bridge_edid_read(struct drm_bridge *bridge,
 	if (!(bridge->ops & DRM_BRIDGE_OP_EDID))
 		return NULL;
 
-	/* Transitional: Fall back to ->get_edid. */
-	if (!bridge->funcs->edid_read) {
-		const struct drm_edid *drm_edid;
-		struct edid *edid;
-
-		edid = bridge->funcs->get_edid(bridge, connector);
-		if (!edid)
-			return NULL;
-
-		drm_edid = drm_edid_alloc(edid, (edid->extensions + 1) * EDID_LENGTH);
-
-		kfree(edid);
-
-		return drm_edid;
-	}
-
 	return bridge->funcs->edid_read(bridge, connector);
 }
 EXPORT_SYMBOL_GPL(drm_bridge_edid_read);
diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
index ee12f829aaf7..7293c02e17c5 100644
--- a/include/drm/drm_bridge.h
+++ b/include/drm/drm_bridge.h
@@ -588,36 +588,6 @@ struct drm_bridge_funcs {
 	const struct drm_edid *(*edid_read)(struct drm_bridge *bridge,
 					    struct drm_connector *connector);
 
-	/**
-	 * @get_edid:
-	 *
-	 * Read and parse the EDID data of the connected display.
-	 *
-	 * The @get_edid callback is the preferred way of reporting mode
-	 * information for a display connected to the bridge output. Bridges
-	 * that support reading EDID shall implement this callback and leave
-	 * the @get_modes callback unimplemented.
-	 *
-	 * The caller of this operation shall first verify the output
-	 * connection status and refrain from reading EDID from a disconnected
-	 * output.
-	 *
-	 * This callback is optional. Bridges that implement it shall set the
-	 * DRM_BRIDGE_OP_EDID flag in their &drm_bridge->ops.
-	 *
-	 * The connector parameter shall be used for the sole purpose of EDID
-	 * retrieval and parsing, and shall not be stored internally by bridge
-	 * drivers for future usage.
-	 *
-	 * RETURNS:
-	 *
-	 * An edid structure newly allocated with kmalloc() (or similar) on
-	 * success, or NULL otherwise. The caller is responsible for freeing
-	 * the returned edid structure with kfree().
-	 */
-	struct edid *(*get_edid)(struct drm_bridge *bridge,
-				 struct drm_connector *connector);
-
 	/**
 	 * @hpd_notify:
 	 *
-- 
2.39.2


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

* Re: [PATCH v3 01/39] drm/bridge: add ->edid_read hook and drm_bridge_edid_read()
  2024-01-23 19:37 ` [PATCH v3 01/39] drm/bridge: add ->edid_read hook and drm_bridge_edid_read() Jani Nikula
@ 2024-01-25 10:33   ` Neil Armstrong
  0 siblings, 0 replies; 44+ messages in thread
From: Neil Armstrong @ 2024-01-25 10:33 UTC (permalink / raw)
  To: Jani Nikula, dri-devel, Andrzej Hajda, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec

On 23/01/2024 20:37, Jani Nikula wrote:
> Add new struct drm_edid based ->edid_read hook and
> drm_bridge_edid_read() function to call the hook.
> 
> v2: Include drm/drm_edid.h
> 
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>   drivers/gpu/drm/drm_bridge.c | 46 +++++++++++++++++++++++++++++++++++-
>   include/drm/drm_bridge.h     | 33 ++++++++++++++++++++++++++
>   2 files changed, 78 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
> index cee3188adf3d..4f6f8c662d3f 100644
> --- a/drivers/gpu/drm/drm_bridge.c
> +++ b/drivers/gpu/drm/drm_bridge.c
> @@ -27,8 +27,9 @@
>   #include <linux/mutex.h>
>   
>   #include <drm/drm_atomic_state_helper.h>
> -#include <drm/drm_debugfs.h>
>   #include <drm/drm_bridge.h>
> +#include <drm/drm_debugfs.h>
> +#include <drm/drm_edid.h>
>   #include <drm/drm_encoder.h>
>   #include <drm/drm_file.h>
>   #include <drm/drm_of.h>
> @@ -1206,6 +1207,47 @@ int drm_bridge_get_modes(struct drm_bridge *bridge,
>   }
>   EXPORT_SYMBOL_GPL(drm_bridge_get_modes);
>   
> +/**
> + * drm_bridge_edid_read - read the EDID data of the connected display
> + * @bridge: bridge control structure
> + * @connector: the connector to read EDID for
> + *
> + * If the bridge supports output EDID retrieval, as reported by the
> + * DRM_BRIDGE_OP_EDID bridge ops flag, call &drm_bridge_funcs.edid_read to get
> + * the EDID and return it. Otherwise return NULL.
> + *
> + * If &drm_bridge_funcs.edid_read is not set, fall back to using
> + * drm_bridge_get_edid() and wrapping it in struct drm_edid.
> + *
> + * RETURNS:
> + * The retrieved EDID on success, or NULL otherwise.
> + */
> +const struct drm_edid *drm_bridge_edid_read(struct drm_bridge *bridge,
> +					    struct drm_connector *connector)
> +{
> +	if (!(bridge->ops & DRM_BRIDGE_OP_EDID))
> +		return NULL;
> +
> +	/* Transitional: Fall back to ->get_edid. */
> +	if (!bridge->funcs->edid_read) {
> +		const struct drm_edid *drm_edid;
> +		struct edid *edid;
> +
> +		edid = drm_bridge_get_edid(bridge, connector);
> +		if (!edid)
> +			return NULL;
> +
> +		drm_edid = drm_edid_alloc(edid, (edid->extensions + 1) * EDID_LENGTH);
> +
> +		kfree(edid);
> +
> +		return drm_edid;
> +	}
> +
> +	return bridge->funcs->edid_read(bridge, connector);
> +}
> +EXPORT_SYMBOL_GPL(drm_bridge_edid_read);
> +
>   /**
>    * drm_bridge_get_edid - get the EDID data of the connected display
>    * @bridge: bridge control structure
> @@ -1215,6 +1257,8 @@ EXPORT_SYMBOL_GPL(drm_bridge_get_modes);
>    * DRM_BRIDGE_OP_EDID bridge ops flag, call &drm_bridge_funcs.get_edid to
>    * get the EDID and return it. Otherwise return NULL.
>    *
> + * Deprecated. Prefer using drm_bridge_edid_read().
> + *
>    * RETURNS:
>    * The retrieved EDID on success, or NULL otherwise.
>    */
> diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
> index e39da5807ba7..b7aed3ead705 100644
> --- a/include/drm/drm_bridge.h
> +++ b/include/drm/drm_bridge.h
> @@ -557,6 +557,37 @@ struct drm_bridge_funcs {
>   	int (*get_modes)(struct drm_bridge *bridge,
>   			 struct drm_connector *connector);
>   
> +	/**
> +	 * @edid_read:
> +	 *
> +	 * Read the EDID data of the connected display.
> +	 *
> +	 * The @edid_read callback is the preferred way of reporting mode
> +	 * information for a display connected to the bridge output. Bridges
> +	 * that support reading EDID shall implement this callback and leave
> +	 * the @get_modes callback unimplemented.
> +	 *
> +	 * The caller of this operation shall first verify the output
> +	 * connection status and refrain from reading EDID from a disconnected
> +	 * output.
> +	 *
> +	 * This callback is optional. Bridges that implement it shall set the
> +	 * DRM_BRIDGE_OP_EDID flag in their &drm_bridge->ops.
> +	 *
> +	 * The connector parameter shall be used for the sole purpose of EDID
> +	 * retrieval, and shall not be stored internally by bridge drivers for
> +	 * future usage.
> +	 *
> +	 * RETURNS:
> +	 *
> +	 * An edid structure newly allocated with drm_edid_alloc() or returned
> +	 * from drm_edid_read() family of functions on success, or NULL
> +	 * otherwise. The caller is responsible for freeing the returned edid
> +	 * structure with drm_edid_free().
> +	 */
> +	const struct drm_edid *(*edid_read)(struct drm_bridge *bridge,
> +					    struct drm_connector *connector);
> +
>   	/**
>   	 * @get_edid:
>   	 *
> @@ -888,6 +919,8 @@ drm_atomic_helper_bridge_propagate_bus_fmt(struct drm_bridge *bridge,
>   enum drm_connector_status drm_bridge_detect(struct drm_bridge *bridge);
>   int drm_bridge_get_modes(struct drm_bridge *bridge,
>   			 struct drm_connector *connector);
> +const struct drm_edid *drm_bridge_edid_read(struct drm_bridge *bridge,
> +					    struct drm_connector *connector);
>   struct edid *drm_bridge_get_edid(struct drm_bridge *bridge,
>   				 struct drm_connector *connector);
>   void drm_bridge_hpd_enable(struct drm_bridge *bridge,

Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>

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

* Re: [PATCH v3 00/39] drm/bridge: switch to struct drm_edid
  2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
                   ` (38 preceding siblings ...)
  2024-01-23 19:37 ` [PATCH v3 39/39] drm/bridge: remove ->get_edid callback Jani Nikula
@ 2024-01-25 12:57 ` Neil Armstrong
  2024-01-25 13:01   ` Jani Nikula
  2024-02-09  9:48   ` Jani Nikula
  39 siblings, 2 replies; 44+ messages in thread
From: Neil Armstrong @ 2024-01-25 12:57 UTC (permalink / raw)
  To: Jani Nikula, dri-devel, Andrzej Hajda, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec

On 23/01/2024 20:37, Jani Nikula wrote:
> v3 of [1] with a couple of patches fixed.
> 
> BR,
> Jani.
> 
> [1] https://patchwork.freedesktop.org/series/128149/
> 
> 
> Jani Nikula (39):
>    drm/bridge: add ->edid_read hook and drm_bridge_edid_read()
>    drm/bridge: switch to drm_bridge_read_edid()
>    drm/bridge: chrontel-ch7033: switch to drm_bridge_read_edid()
>    drm/bridge: lt8912b: use drm_bridge_read_edid()
>    drm/bridge: lt8912b: clear the EDID property on failures
>    drm/bridge: lt8912b: use ->edid_read callback
>    drm/bridge: lt9611uxc: use drm_bridge_read_edid()
>    drm: bridge: simple-bridge: use drm_bridge_edid_read()
>    drm: bridge: simple-bridge: clear the EDID property on failures
>    drm/bridge: tfp410: use drm_bridge_edid_read()
>    drm/bridge: tfp410: clear the EDID property on failures
>    drm/meson: switch to drm_bridge_edid_read()
>    drm/bridge: remove drm_bridge_get_edid() in favour of
>      drm_bridge_edid_read()
>    drm/bridge: anx7625: switch to ->edid_read callback
>    drm/bridge: cdns-mhdp8546: switch to ->edid_read callback
>    drm/bridge: cdns-mhdp8546: clear the EDID property on failures
>    drm/bridge: display-connector: switch to ->edid_read callback
>    drm/bridge: it6505: switch to ->edid_read callback
>    drm: bridge: it66121: switch to ->edid_read callback
>    drm/bridge: lt9611: switch to ->edid_read callback
>    drm/bridge: lt9611uxc: switch to ->edid_read callback
>    drm/bridge: megachips: switch to ->edid_read callback
>    drm/bridge: nxp-ptn3460: switch to ->edid_read callback
>    drm/bridge: sii902x: use display info is_hdmi
>    drm/bridge: sii902x: switch to ->edid_read callback
>    drm/mediatek/dp: switch to ->edid_read callback
>    drm/mediatek/hdmi: switch to ->edid_read callback
>    drm/msm/hdmi: fix indent
>    drm/msm/hdmi: switch to ->edid_read callback
>    drm/omap/hdmi4: switch to ->edid_read callback
>    drm/omap/hdmi5: switch to ->edid_read callback
>    drm: xlnx: zynqmp_dpsub: switch to ->edid_read callback
>    drm: adv7511: switch to ->edid_read callback
>    drm: bridge: dw_hdmi: switch to ->edid_read callback
>    drm: bridge: dw_hdmi: clear the EDID property and CEC address on
>      failures
>    drm/bridge: tc358767: update the EDID property
>    drm/bridge: tc358767: switch to ->edid_read callback
>    drm/bridge: ti-sn65dsi86: switch to ->edid_read callback
>    drm/bridge: remove ->get_edid callback
> 
>   drivers/gpu/drm/bridge/adv7511/adv7511_drv.c  | 47 ++++++++++++-------
>   drivers/gpu/drm/bridge/analogix/anx7625.c     | 30 ++++--------
>   .../drm/bridge/cadence/cdns-mhdp8546-core.c   | 28 ++++++-----
>   drivers/gpu/drm/bridge/chrontel-ch7033.c      | 12 ++---
>   drivers/gpu/drm/bridge/display-connector.c    |  8 ++--
>   drivers/gpu/drm/bridge/ite-it6505.c           | 17 +++----
>   drivers/gpu/drm/bridge/ite-it66121.c          | 16 +++----
>   drivers/gpu/drm/bridge/lontium-lt8912b.c      | 20 ++++----
>   drivers/gpu/drm/bridge/lontium-lt9611.c       |  8 ++--
>   drivers/gpu/drm/bridge/lontium-lt9611uxc.c    | 18 +++----
>   .../bridge/megachips-stdpxxxx-ge-b850v3-fw.c  | 18 +++----
>   drivers/gpu/drm/bridge/nxp-ptn3460.c          | 22 +++++----
>   drivers/gpu/drm/bridge/sii902x.c              | 38 +++++++--------
>   drivers/gpu/drm/bridge/simple-bridge.c        | 17 +++----
>   drivers/gpu/drm/bridge/synopsys/dw-hdmi.c     | 43 ++++++++++-------
>   drivers/gpu/drm/bridge/tc358767.c             | 17 +++----
>   drivers/gpu/drm/bridge/ti-sn65dsi86.c         |  8 ++--
>   drivers/gpu/drm/bridge/ti-tfp410.c            | 18 +++----
>   drivers/gpu/drm/drm_bridge.c                  | 17 +++----
>   drivers/gpu/drm/drm_bridge_connector.c        | 16 +++----
>   drivers/gpu/drm/mediatek/mtk_dp.c             | 31 +++++++-----
>   drivers/gpu/drm/mediatek/mtk_hdmi.c           | 26 ++++++----
>   drivers/gpu/drm/meson/meson_encoder_hdmi.c    | 20 ++++++--
>   drivers/gpu/drm/msm/hdmi/hdmi_bridge.c        | 33 ++++++++-----
>   drivers/gpu/drm/omapdrm/dss/hdmi4.c           | 22 ++++++---
>   drivers/gpu/drm/omapdrm/dss/hdmi5.c           | 12 ++---
>   drivers/gpu/drm/xlnx/zynqmp_dp.c              |  8 ++--
>   include/drm/drm_bridge.h                      | 25 +++++-----
>   28 files changed, 328 insertions(+), 267 deletions(-)
> 

Thanks, but now some patches subjects are wrong:
s/drm_bridge_read_edid/drm_bridge_edid_read/s

With that fixed please add:
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>

Thanks,
Neil

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

* Re: [PATCH v3 00/39] drm/bridge: switch to struct drm_edid
  2024-01-25 12:57 ` [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Neil Armstrong
@ 2024-01-25 13:01   ` Jani Nikula
  2024-02-09  9:48   ` Jani Nikula
  1 sibling, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-01-25 13:01 UTC (permalink / raw)
  To: neil.armstrong, dri-devel, Andrzej Hajda, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec

On Thu, 25 Jan 2024, Neil Armstrong <neil.armstrong@linaro.org> wrote:
> Thanks, but now some patches subjects are wrong:
> s/drm_bridge_read_edid/drm_bridge_edid_read/s

Oh, dang it, that was mentioned before, but I forgot. My bad.

> With that fixed please add:
> Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>

Entire series? Much appreciated, thanks!

BR,
Jani.

-- 
Jani Nikula, Intel

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

* Re: [PATCH v3 00/39] drm/bridge: switch to struct drm_edid
  2024-01-25 12:57 ` [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Neil Armstrong
  2024-01-25 13:01   ` Jani Nikula
@ 2024-02-09  9:48   ` Jani Nikula
  1 sibling, 0 replies; 44+ messages in thread
From: Jani Nikula @ 2024-02-09  9:48 UTC (permalink / raw)
  To: neil.armstrong, dri-devel, Andrzej Hajda, Robert Foss,
	Laurent Pinchart, Jonas Karlman, Jernej Skrabec

On Thu, 25 Jan 2024, Neil Armstrong <neil.armstrong@linaro.org> wrote:
> Thanks, but now some patches subjects are wrong:
> s/drm_bridge_read_edid/drm_bridge_edid_read/s

Fixed while applying.

> With that fixed please add:
> Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>

Many thanks, pushed the lot to drm-misc-next.

BR,
Jani.


-- 
Jani Nikula, Intel

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

end of thread, other threads:[~2024-02-09  9:48 UTC | newest]

Thread overview: 44+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-23 19:37 [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Jani Nikula
2024-01-23 19:37 ` [PATCH v3 01/39] drm/bridge: add ->edid_read hook and drm_bridge_edid_read() Jani Nikula
2024-01-25 10:33   ` Neil Armstrong
2024-01-23 19:37 ` [PATCH v3 02/39] drm/bridge: switch to drm_bridge_read_edid() Jani Nikula
2024-01-23 19:37 ` [PATCH v3 03/39] drm/bridge: chrontel-ch7033: " Jani Nikula
2024-01-23 19:37 ` [PATCH v3 04/39] drm/bridge: lt8912b: use drm_bridge_read_edid() Jani Nikula
2024-01-23 19:37 ` [PATCH v3 05/39] drm/bridge: lt8912b: clear the EDID property on failures Jani Nikula
2024-01-23 19:37 ` [PATCH v3 06/39] drm/bridge: lt8912b: use ->edid_read callback Jani Nikula
2024-01-23 19:37 ` [PATCH v3 07/39] drm/bridge: lt9611uxc: use drm_bridge_read_edid() Jani Nikula
2024-01-23 19:37 ` [PATCH v3 08/39] drm: bridge: simple-bridge: use drm_bridge_edid_read() Jani Nikula
2024-01-23 19:37 ` [PATCH v3 09/39] drm: bridge: simple-bridge: clear the EDID property on failures Jani Nikula
2024-01-23 19:37 ` [PATCH v3 10/39] drm/bridge: tfp410: use drm_bridge_edid_read() Jani Nikula
2024-01-23 19:37 ` [PATCH v3 11/39] drm/bridge: tfp410: clear the EDID property on failures Jani Nikula
2024-01-23 19:37 ` [PATCH v3 12/39] drm/meson: switch to drm_bridge_edid_read() Jani Nikula
2024-01-23 19:37 ` [PATCH v3 13/39] drm/bridge: remove drm_bridge_get_edid() in favour of drm_bridge_edid_read() Jani Nikula
2024-01-23 19:37 ` [PATCH v3 14/39] drm/bridge: anx7625: switch to ->edid_read callback Jani Nikula
2024-01-23 19:37 ` [PATCH v3 15/39] drm/bridge: cdns-mhdp8546: " Jani Nikula
2024-01-23 19:37 ` [PATCH v3 16/39] drm/bridge: cdns-mhdp8546: clear the EDID property on failures Jani Nikula
2024-01-23 19:37 ` [PATCH v3 17/39] drm/bridge: display-connector: switch to ->edid_read callback Jani Nikula
2024-01-23 19:37 ` [PATCH v3 18/39] drm/bridge: it6505: " Jani Nikula
2024-01-23 19:37 ` [PATCH v3 19/39] drm: bridge: it66121: " Jani Nikula
2024-01-23 19:37 ` [PATCH v3 20/39] drm/bridge: lt9611: " Jani Nikula
2024-01-23 19:37 ` [PATCH v3 21/39] drm/bridge: lt9611uxc: " Jani Nikula
2024-01-23 19:37 ` [PATCH v3 22/39] drm/bridge: megachips: " Jani Nikula
2024-01-23 19:37 ` [PATCH v3 23/39] drm/bridge: nxp-ptn3460: " Jani Nikula
2024-01-23 19:37 ` [PATCH v3 24/39] drm/bridge: sii902x: use display info is_hdmi Jani Nikula
2024-01-23 19:37 ` [PATCH v3 25/39] drm/bridge: sii902x: switch to ->edid_read callback Jani Nikula
2024-01-23 19:37 ` [PATCH v3 26/39] drm/mediatek/dp: " Jani Nikula
2024-01-23 19:37 ` [PATCH v3 27/39] drm/mediatek/hdmi: " Jani Nikula
2024-01-23 19:37 ` [PATCH v3 28/39] drm/msm/hdmi: fix indent Jani Nikula
2024-01-23 19:37 ` [PATCH v3 29/39] drm/msm/hdmi: switch to ->edid_read callback Jani Nikula
2024-01-23 19:37 ` [PATCH v3 30/39] drm/omap/hdmi4: " Jani Nikula
2024-01-23 19:37 ` [PATCH v3 31/39] drm/omap/hdmi5: " Jani Nikula
2024-01-23 19:37 ` [PATCH v3 32/39] drm: xlnx: zynqmp_dpsub: " Jani Nikula
2024-01-23 19:37 ` [PATCH v3 33/39] drm: adv7511: " Jani Nikula
2024-01-23 19:37 ` [PATCH v3 34/39] drm: bridge: dw_hdmi: " Jani Nikula
2024-01-23 19:37 ` [PATCH v3 35/39] drm: bridge: dw_hdmi: clear the EDID property and CEC address on failures Jani Nikula
2024-01-23 19:37 ` [PATCH v3 36/39] drm/bridge: tc358767: update the EDID property Jani Nikula
2024-01-23 19:37 ` [PATCH v3 37/39] drm/bridge: tc358767: switch to ->edid_read callback Jani Nikula
2024-01-23 19:37 ` [PATCH v3 38/39] drm/bridge: ti-sn65dsi86: " Jani Nikula
2024-01-23 19:37 ` [PATCH v3 39/39] drm/bridge: remove ->get_edid callback Jani Nikula
2024-01-25 12:57 ` [PATCH v3 00/39] drm/bridge: switch to struct drm_edid Neil Armstrong
2024-01-25 13:01   ` Jani Nikula
2024-02-09  9:48   ` Jani Nikula

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).