drm: bridge: dw_hdmi: switch to ->edid_read callback
authorJani Nikula <jani.nikula@intel.com>
Tue, 23 Jan 2024 19:37:40 +0000 (21:37 +0200)
committerJani Nikula <jani.nikula@intel.com>
Fri, 9 Feb 2024 08:16:07 +0000 (10:16 +0200)
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>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/400bfdeca4fd25b7624286e5969c4b0b1331c2b4.1706038510.git.jani.nikula@intel.com
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c

index ca74a20015b3dc8a6733d0aad846c14f88a0895f..4a2e3f9c1dfd5e52b6a2661dc40b0b9c8a3df609 100644 (file)
@@ -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,
 };
 
 /* -----------------------------------------------------------------------------