summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/omapdrm
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-02-26 13:25:03 +0200
committerTomi Valkeinen <tomi.valkeinen@ti.com>2020-02-26 13:32:04 +0200
commit7f113085af93a2949ffdde95e5ea21ef8c65c76d (patch)
tree3f40d8e23fa453fd16b8207290a7930c0dc79c9f /drivers/gpu/drm/omapdrm
parent96b0a34d27333e9df724a3efe95daeb68097b2ca (diff)
drm/omap: hdmi4: Simplify EDID read
Now that the omap_dss_device EDID read operation has been removed, simplify the bridge-based EDID access by merging multiple functions together. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ti.com> Tested-by: Sebastian Reichel <sebastian.reichel@collabora.com> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200226112514.12455-44-laurent.pinchart@ideasonboard.com
Diffstat (limited to 'drivers/gpu/drm/omapdrm')
-rw-r--r--drivers/gpu/drm/omapdrm/dss/hdmi4.c96
1 files changed, 40 insertions, 56 deletions
diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
index 96ef7bd52199..2578c95570f6 100644
--- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
@@ -309,55 +309,6 @@ void hdmi4_core_disable(struct hdmi_core_data *core)
mutex_unlock(&hdmi->lock);
}
-static struct edid *
-hdmi_do_read_edid(struct omap_hdmi *hdmi,
- struct edid *(*read)(struct omap_hdmi *hdmi,
- struct drm_connector *connector),
- struct drm_connector *connector)
-{
- struct edid *edid = NULL;
- unsigned int cec_addr;
- bool need_enable;
- int r;
-
- need_enable = hdmi->core_enabled == false;
-
- if (need_enable) {
- r = hdmi4_core_enable(&hdmi->core);
- if (r)
- return NULL;
- }
-
- mutex_lock(&hdmi->lock);
- r = hdmi_runtime_get(hdmi);
- BUG_ON(r);
-
- r = hdmi4_core_ddc_init(&hdmi->core);
- if (r)
- goto done;
-
- edid = read(hdmi, connector);
-
-done:
- hdmi_runtime_put(hdmi);
- mutex_unlock(&hdmi->lock);
-
- if (edid && edid->extensions) {
- unsigned int len = (edid->extensions + 1) * EDID_LENGTH;
-
- cec_addr = cec_get_edid_phys_addr((u8 *)edid, len, NULL);
- } else {
- cec_addr = CEC_PHYS_ADDR_INVALID;
- }
-
- hdmi4_cec_set_phys_addr(&hdmi->core, cec_addr);
-
- if (need_enable)
- hdmi4_core_disable(&hdmi->core);
-
- return edid;
-}
-
/* -----------------------------------------------------------------------------
* DRM Bridge Operations
*/
@@ -485,18 +436,51 @@ 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_read_edid(struct omap_hdmi *hdmi,
- struct drm_connector *connector)
-{
- return drm_do_get_edid(connector, hdmi4_core_ddc_read, &hdmi->core);
-}
-
static struct edid *hdmi4_bridge_get_edid(struct drm_bridge *bridge,
struct drm_connector *connector)
{
struct omap_hdmi *hdmi = drm_bridge_to_hdmi(bridge);
+ struct edid *edid = NULL;
+ unsigned int cec_addr;
+ bool need_enable;
+ int r;
+
+ need_enable = hdmi->core_enabled == false;
+
+ if (need_enable) {
+ r = hdmi4_core_enable(&hdmi->core);
+ if (r)
+ return NULL;
+ }
+
+ mutex_lock(&hdmi->lock);
+ r = hdmi_runtime_get(hdmi);
+ BUG_ON(r);
+
+ r = hdmi4_core_ddc_init(&hdmi->core);
+ if (r)
+ goto done;
+
+ edid = drm_do_get_edid(connector, hdmi4_core_ddc_read, &hdmi->core);
- return hdmi_do_read_edid(hdmi, hdmi4_bridge_read_edid, connector);
+done:
+ hdmi_runtime_put(hdmi);
+ mutex_unlock(&hdmi->lock);
+
+ if (edid && edid->extensions) {
+ unsigned int len = (edid->extensions + 1) * EDID_LENGTH;
+
+ cec_addr = cec_get_edid_phys_addr((u8 *)edid, len, NULL);
+ } else {
+ cec_addr = CEC_PHYS_ADDR_INVALID;
+ }
+
+ hdmi4_cec_set_phys_addr(&hdmi->core, cec_addr);
+
+ if (need_enable)
+ hdmi4_core_disable(&hdmi->core);
+
+ return edid;
}
static const struct drm_bridge_funcs hdmi4_bridge_funcs = {