drm/bridge: switch to struct drm_edid
Subsystems (15)
v3 cover drm/bridge: switch to struct drm_edid
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(-)
Signature · 1 line
2.39.2
PATCH v3 1/39 drm/bridge: add ->edid_read hook and drm_bridge_edid_read()
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
--- drivers/gpu/drm/drm_bridge.c | 46 +++++++++++++++++++++++++++++++++++- include/drm/drm_bridge.h | 33 ++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-)
drivers/gpu/drm/drm_bridge.c +45 -1
@@ -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. */
include/drm/drm_bridge.h +33 -0
@@ -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,
Signature · 1 line
2.39.2
Re: [PATCH v3 01/39] drm/bridge: add ->edid_read hook and drm_bridge_edid_read()
Quoted 126 lines · Jani Nikula
Add new struct
drm_edidbased ->edid_read hook anddrm_bridge_edid_read()function to call the hook.v2: Include
drm/drm_edid.hSigned-off-by Jani Nikula <[email protected]>--- drivers/gpu/drm/drm_bridge.c | 46 +++++++++++++++++++++++++++++++++++- include/drm/drm_bridge.h | 33 ++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-)drivers/gpu/drm/drm_bridge.c +45
-1@@ -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. */ include/drm/drm_bridge.h +31
-0@@ -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: *
include/drm/drm_bridge.h drm_atomic_helper_bridge_propagate_bus_fmt(struct drm_bridge *bridge, · line 926
Quoted 8 lines
include/drm/drm_bridge.h +2
-0@@ -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,
PATCH v3 2/39 drm/bridge: switch to drm_bridge_read_edid()
In reply to Jani NikulaPrefer using the struct drm_edid based functions.
--- drivers/gpu/drm/drm_bridge_connector.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)
drivers/gpu/drm/drm_bridge_connector.c +8 -8
@@ -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 ; }
Signature · 1 line
2.39.2
PATCH v3 3/39 drm/bridge: chrontel-ch7033: switch to drm_bridge_read_edid()
In reply to Jani NikulaPrefer using the struct drm_edid based functions.
--- drivers/gpu/drm/bridge/chrontel-ch7033.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/gpu/drm/bridge/chrontel-ch7033.c +6 -6
@@ -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 );
Signature · 1 line
2.39.2
PATCH v3 4/39 drm/bridge: lt8912b: use drm_bridge_read_edid()
In reply to Jani NikulaPrefer using the struct drm_edid based functions.
--- drivers/gpu/drm/bridge/lontium-lt8912b.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/gpu/drm/bridge/lontium-lt8912b.c +6 -6
@@ -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; }
Signature · 1 line
2.39.2
PATCH v3 5/39 drm/bridge: lt8912b: clear the EDID property on failures
In reply to Jani NikulaIf EDID read fails, clear the EDID property.
--- drivers/gpu/drm/bridge/lontium-lt8912b.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/bridge/lontium-lt8912b.c +1 -1
@@ -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;
Signature · 1 line
2.39.2
PATCH v3 6/39 drm/bridge: lt8912b: use ->edid_read callback
In reply to Jani NikulaPrefer using the struct drm_edid based functions.
--- drivers/gpu/drm/bridge/lontium-lt8912b.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/gpu/drm/bridge/lontium-lt8912b.c +4 -4
@@ -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)
Signature · 1 line
2.39.2
PATCH v3 7/39 drm/bridge: lt9611uxc: use drm_bridge_read_edid()
In reply to Jani NikulaPrefer using the struct drm_edid based functions.
--- drivers/gpu/drm/bridge/lontium-lt9611uxc.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c +5 -5
@@ -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 (<9611uxc->bridge, connector); -drm_connector_update_edid_property (connector, edid); - count =drm_add_edid_modes (connector, edid); -kfree (edid); + drm_edid =drm_bridge_edid_read (<9611uxc->bridge, connector); +drm_edid_connector_update (connector, drm_edid); + count =drm_edid_connector_add_modes (connector); +drm_edid_free (drm_edid);return count; }
Signature · 1 line
2.39.2
PATCH v3 8/39 drm: bridge: simple-bridge: use drm_bridge_edid_read()
In reply to Jani NikulaPrefer using the struct drm_edid based functions.
--- drivers/gpu/drm/bridge/simple-bridge.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)
drivers/gpu/drm/bridge/simple-bridge.c +8 -8
@@ -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; }
Signature · 1 line
2.39.2
PATCH v3 9/39 drm: bridge: simple-bridge: clear the EDID property on failures
In reply to Jani NikulaIf EDID read fails, clear the EDID property.
--- drivers/gpu/drm/bridge/simple-bridge.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/gpu/drm/bridge/simple-bridge.c +2 -1
@@ -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);
Signature · 1 line
2.39.2
PATCH v3 10/39 drm/bridge: tfp410: use drm_bridge_edid_read()
In reply to Jani NikulaPrefer using the struct drm_edid based functions.
--- drivers/gpu/drm/bridge/ti-tfp410.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)
drivers/gpu/drm/bridge/ti-tfp410.c +8 -8
@@ -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; }
Signature · 1 line
2.39.2
PATCH v3 11/39 drm/bridge: tfp410: clear the EDID property on failures
In reply to Jani NikulaIf EDID read fails, clear the EDID property.
--- drivers/gpu/drm/bridge/ti-tfp410.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/gpu/drm/bridge/ti-tfp410.c +2 -2
@@ -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);
Signature · 1 line
2.39.2
PATCH v3 12/39 drm/meson: switch to drm_bridge_edid_read()
In reply to Jani NikulaPrefer using the struct drm_edid based functions.
Not ideal, should use source physical address from connector info.
--- drivers/gpu/drm/meson/meson_encoder_hdmi.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-)
drivers/gpu/drm/meson/meson_encoder_hdmi.c +16 -4
@@ -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); }
Signature · 1 line
2.39.2
PATCH v3 13/39 drm/bridge: remove drm_bridge_get_edid() in favour of drm_bridge_edid_read()
In reply to Jani NikulaAll users of drm_bridge_get_edid() have been converted to use drm_bridge_edid_read(). Remove drm_bridge_get_edid().
--- drivers/gpu/drm/drm_bridge.c | 28 ++-------------------------- include/drm/drm_bridge.h | 2 -- 2 files changed, 2 insertions(+), 28 deletions(-)
drivers/gpu/drm/drm_bridge.c +2 -26
@@ -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
include/drm/drm_bridge.h +0 -2
@@ -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),
Signature · 1 line
2.39.2
PATCH v3 14/39 drm/bridge: anx7625: switch to ->edid_read callback
In reply to Jani NikulaPrefer using the struct drm_edid based callback.
v2: Fix build (goto out;)
--- drivers/gpu/drm/bridge/analogix/anx7625.c | 30 ++++++++--------------- 1 file changed, 10 insertions(+), 20 deletions(-)
drivers/gpu/drm/bridge/analogix/anx7625.c +10 -20
@@ -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,
Signature · 1 line
2.39.2
PATCH v3 15/39 drm/bridge: cdns-mhdp8546: switch to ->edid_read callback
In reply to Jani NikulaPrefer using the struct drm_edid based callback and functions.
--- .../drm/bridge/cadence/cdns-mhdp8546-core.c | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-)
drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c +13 -13
@@ -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 *bridreturn 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, };
Signature · 1 line
2.39.2
PATCH v3 16/39 drm/bridge: cdns-mhdp8546: clear the EDID property on failures
In reply to Jani NikulaIf EDID read fails, clear the EDID property.
--- drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c +3 -1
@@ -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);
Signature · 1 line
2.39.2
PATCH v3 17/39 drm/bridge: display-connector: switch to ->edid_read callback
In reply to Jani NikulaPrefer using the struct drm_edid based callback and functions.
--- drivers/gpu/drm/bridge/display-connector.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/gpu/drm/bridge/display-connector.c +4 -4
@@ -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,
Signature · 1 line
2.39.2
PATCH v3 18/39 drm/bridge: it6505: switch to ->edid_read callback
In reply to Jani NikulaPrefer using the struct drm_edid based callback and functions.
--- drivers/gpu/drm/bridge/ite-it6505.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-)
drivers/gpu/drm/bridge/ite-it6505.c +9 -8
@@ -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)
Signature · 1 line
2.39.2
PATCH v3 19/39 drm: bridge: it66121: switch to ->edid_read callback
In reply to Jani NikulaPrefer using the struct drm_edid based callback and functions.
--- drivers/gpu/drm/bridge/ite-it66121.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)
drivers/gpu/drm/bridge/ite-it66121.c +8 -8
@@ -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, };
Signature · 1 line
2.39.2
PATCH v3 20/39 drm/bridge: lt9611: switch to ->edid_read callback
In reply to Jani NikulaPrefer using the struct drm_edid based callback and functions.
--- drivers/gpu/drm/bridge/lontium-lt9611.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/gpu/drm/bridge/lontium-lt9611.c +4 -4
@@ -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,
Signature · 1 line
2.39.2
PATCH v3 21/39 drm/bridge: lt9611uxc: switch to ->edid_read callback
In reply to Jani NikulaPrefer using the struct drm_edid based callback and functions.
--- drivers/gpu/drm/bridge/lontium-lt9611uxc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/gpu/drm/bridge/lontium-lt9611uxc.c +4 -4
@@ -495,8 +495,8 @@ static int lt9611uxc_get_edid_block(void *data, u8 *buf, unsigned int block, sizreturn 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,
Signature · 1 line
2.39.2
PATCH v3 22/39 drm/bridge: megachips: switch to ->edid_read callback
In reply to Jani NikulaPrefer using the struct drm_edid based callback and functions.
--- .../bridge/megachips-stdpxxxx-ge-b850v3-fw.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-)
drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c +9 -9
@@ -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)
Signature · 1 line
2.39.2
PATCH v3 23/39 drm/bridge: nxp-ptn3460: switch to ->edid_read callback
In reply to Jani NikulaPrefer using the struct drm_edid based callback and functions.
v2: Fix -Wsometimes-uninitialized (kernel test robot)
--- drivers/gpu/drm/bridge/nxp-ptn3460.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-)
drivers/gpu/drm/bridge/nxp-ptn3460.c +12 -10
@@ -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)
Signature · 1 line
2.39.2
PATCH v3 24/39 drm/bridge: sii902x: use display info is_hdmi
In reply to Jani NikulaUse the pre-parsed information instead of parsing EDID again.
--- drivers/gpu/drm/bridge/sii902x.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
drivers/gpu/drm/bridge/sii902x.c +2 -6
@@ -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; }
Signature · 1 line
2.39.2
PATCH v3 25/39 drm/bridge: sii902x: switch to ->edid_read callback
In reply to Jani NikulaPrefer using the struct drm_edid based callback and functions.
--- drivers/gpu/drm/bridge/sii902x.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-)
drivers/gpu/drm/bridge/sii902x.c +15 -15
@@ -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 *bridgereturn 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,
Signature · 1 line
2.39.2
PATCH v3 26/39 drm/mediatek/dp: switch to ->edid_read callback
In reply to Jani NikulaPrefer using the struct drm_edid based callback and functions.
--- drivers/gpu/drm/mediatek/mtk_dp.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-)
drivers/gpu/drm/mediatek/mtk_dp.c +20 -11
@@ -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, };
Signature · 1 line
2.39.2
PATCH v3 27/39 drm/mediatek/hdmi: switch to ->edid_read callback
In reply to Jani NikulaPrefer using the struct drm_edid based callback and functions.
--- drivers/gpu/drm/mediatek/mtk_hdmi.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-)
drivers/gpu/drm/mediatek/mtk_hdmi.c +17 -9
@@ -1265,19 +1265,27 @@ static enum drm_connector_status mtk_hdmi_bridge_detect(struct drm_bridge *bridgreturn 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,
Signature · 1 line
2.39.2
PATCH v3 28/39 drm/msm/hdmi: fix indent
In reply to Jani NikulaRemove the excess leading tabs.
--- drivers/gpu/drm/msm/hdmi/hdmi_bridge.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/gpu/drm/msm/hdmi/hdmi_bridge.c +6 -6
@@ -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
Signature · 1 line
2.39.2
PATCH v3 29/39 drm/msm/hdmi: switch to ->edid_read callback
In reply to Jani NikulaPrefer using the struct drm_edid based callback and functions.
--- drivers/gpu/drm/msm/hdmi/hdmi_bridge.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-)
drivers/gpu/drm/msm/hdmi/hdmi_bridge.c +16 -7
@@ -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, };
Signature · 1 line
2.39.2
PATCH v3 30/39 drm/omap/hdmi4: switch to ->edid_read callback
In reply to Jani NikulaPrefer using the struct drm_edid based callback and functions.
--- drivers/gpu/drm/omapdrm/dss/hdmi4.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-)
drivers/gpu/drm/omapdrm/dss/hdmi4.c +15 -7
@@ -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)
Signature · 1 line
2.39.2
PATCH v3 31/39 drm/omap/hdmi5: switch to ->edid_read callback
In reply to Jani NikulaPrefer using the struct drm_edid based callback and functions.
--- drivers/gpu/drm/omapdrm/dss/hdmi5.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/gpu/drm/omapdrm/dss/hdmi5.c +6 -6
@@ -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)
Signature · 1 line
2.39.2
PATCH v3 32/39 drm: xlnx: zynqmp_dpsub: switch to ->edid_read callback
In reply to Jani NikulaPrefer using the struct drm_edid based callback and functions.
--- drivers/gpu/drm/xlnx/zynqmp_dp.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/gpu/drm/xlnx/zynqmp_dp.c +4 -4
@@ -1560,12 +1560,12 @@ static enum drm_connector_status zynqmp_dp_bridge_detect(struct drm_bridge *bridreturn 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, };/* -----------------------------------------------------------------------------
Signature · 1 line
2.39.2
PATCH v3 33/39 drm: adv7511: switch to ->edid_read callback
In reply to Jani NikulaPrefer using the struct drm_edid based callback and functions.
--- drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 47 +++++++++++++------- 1 file changed, 30 insertions(+), 17 deletions(-)
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c +30 -17
@@ -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 *bridgereturn 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, };
Signature · 1 line
2.39.2
PATCH v3 34/39 drm: bridge: dw_hdmi: switch to ->edid_read callback
In reply to Jani NikulaPrefer using the struct drm_edid based callback and functions.
v2: Fix -Wuninitialized (kernel test robot)
--- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 43 ++++++++++++++--------- 1 file changed, 26 insertions(+), 17 deletions(-)
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +26 -17
@@ -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 *bridgereturn 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, };/* -----------------------------------------------------------------------------
Signature · 1 line
2.39.2
PATCH v3 35/39 drm: bridge: dw_hdmi: clear the EDID property and CEC address on failures
In reply to Jani NikulaIf EDID read fails, clear the EDID property and CEC address.
--- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 2 -- 1 file changed, 2 deletions(-)
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +0 -2
@@ -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,
Signature · 1 line
2.39.2
PATCH v3 36/39 drm/bridge: tc358767: update the EDID property
In reply to Jani NikulaThe EDID property should be updated between reading the EDID and adding the modes.
--- drivers/gpu/drm/bridge/tc358767.c | 1 + 1 file changed, 1 insertion(+)
drivers/gpu/drm/bridge/tc358767.c +1 -0
@@ -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);
Signature · 1 line
2.39.2
PATCH v3 37/39 drm/bridge: tc358767: switch to ->edid_read callback
In reply to Jani NikulaPrefer using the struct drm_edid based callback and functions.
--- drivers/gpu/drm/bridge/tc358767.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-)
drivers/gpu/drm/bridge/tc358767.c +9 -9
@@ -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,
Signature · 1 line
2.39.2
PATCH v3 38/39 drm/bridge: ti-sn65dsi86: switch to ->edid_read callback
In reply to Jani NikulaPrefer using the struct drm_edid based callback and functions.
--- drivers/gpu/drm/bridge/ti-sn65dsi86.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/gpu/drm/bridge/ti-sn65dsi86.c +4 -4
@@ -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,
Signature · 1 line
2.39.2
PATCH v3 39/39 drm/bridge: remove ->get_edid callback
In reply to Jani NikulaThere 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().
--- drivers/gpu/drm/drm_bridge.c | 19 ------------------- include/drm/drm_bridge.h | 30 ------------------------------ 2 files changed, 49 deletions(-)
drivers/gpu/drm/drm_bridge.c +0 -19
@@ -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);
include/drm/drm_bridge.h +0 -30
@@ -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: *
Signature · 1 line
2.39.2
Quoted 72 lines · 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 callbackdrivers/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 +++++++-----
Quoted 9 lines
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:
Thanks,
Neil
Quoted 2 lines · Neil Armstrong
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.
Quoted 2 lines
With that fixed please add:
Reviewed-by Neil Armstrong <[email protected]>
Entire series? Much appreciated, thanks!
BR,
Jani.
Signature · 1 line
Jani Nikula, Intel
Quoted 2 lines · Neil Armstrong
Thanks, but now some patches subjects are wrong:
s/drm_bridge_read_edid/drm_bridge_edid_read/s
Fixed while applying.
Quoted 2 lines
With that fixed please add:
Reviewed-by Neil Armstrong <[email protected]>
Many thanks, pushed the lot to drm-misc-next.
BR,
Jani.
Signature · 1 line
Jani Nikula, Intel