Commit f1e4db07 authored by Jani Nikula's avatar Jani Nikula

drm/vc4: hdmi: switch to struct drm_edid

Prefer struct drm_edid based functions over struct edid.
Acked-by: default avatarMaxime Ripard <mripard@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/eabece3ca7fae28395dcad0d2c221113cd924180.1713273659.git.jani.nikula@intel.comSigned-off-by: default avatarJani Nikula <jani.nikula@intel.com>
parent bd730c77
...@@ -412,15 +412,14 @@ static void vc4_hdmi_handle_hotplug(struct vc4_hdmi *vc4_hdmi, ...@@ -412,15 +412,14 @@ static void vc4_hdmi_handle_hotplug(struct vc4_hdmi *vc4_hdmi,
enum drm_connector_status status) enum drm_connector_status status)
{ {
struct drm_connector *connector = &vc4_hdmi->connector; struct drm_connector *connector = &vc4_hdmi->connector;
struct edid *edid; const struct drm_edid *drm_edid;
int ret; int ret;
/* /*
* NOTE: This function should really be called with * NOTE: This function should really be called with vc4_hdmi->mutex
* vc4_hdmi->mutex held, but doing so results in reentrancy * held, but doing so results in reentrancy issues since
* issues since cec_s_phys_addr_from_edid might call * cec_s_phys_addr() might call .adap_enable, which leads to that
* .adap_enable, which leads to that funtion being called with * funtion being called with our mutex held.
* our mutex held.
* *
* A similar situation occurs with vc4_hdmi_reset_link() that * A similar situation occurs with vc4_hdmi_reset_link() that
* will call into our KMS hooks if the scrambling was enabled. * will call into our KMS hooks if the scrambling was enabled.
...@@ -435,12 +434,16 @@ static void vc4_hdmi_handle_hotplug(struct vc4_hdmi *vc4_hdmi, ...@@ -435,12 +434,16 @@ static void vc4_hdmi_handle_hotplug(struct vc4_hdmi *vc4_hdmi,
return; return;
} }
edid = drm_get_edid(connector, vc4_hdmi->ddc); drm_edid = drm_edid_read_ddc(connector, vc4_hdmi->ddc);
if (!edid)
drm_edid_connector_update(connector, drm_edid);
cec_s_phys_addr(vc4_hdmi->cec_adap,
connector->display_info.source_physical_address, false);
if (!drm_edid)
return; return;
cec_s_phys_addr_from_edid(vc4_hdmi->cec_adap, edid); drm_edid_free(drm_edid);
kfree(edid);
for (;;) { for (;;) {
ret = vc4_hdmi_reset_link(connector, ctx); ret = vc4_hdmi_reset_link(connector, ctx);
...@@ -492,28 +495,29 @@ static int vc4_hdmi_connector_get_modes(struct drm_connector *connector) ...@@ -492,28 +495,29 @@ static int vc4_hdmi_connector_get_modes(struct drm_connector *connector)
{ {
struct vc4_hdmi *vc4_hdmi = connector_to_vc4_hdmi(connector); struct vc4_hdmi *vc4_hdmi = connector_to_vc4_hdmi(connector);
struct vc4_dev *vc4 = to_vc4_dev(connector->dev); struct vc4_dev *vc4 = to_vc4_dev(connector->dev);
const struct drm_edid *drm_edid;
int ret = 0; int ret = 0;
struct edid *edid;
/* /*
* NOTE: This function should really take vc4_hdmi->mutex, but * NOTE: This function should really take vc4_hdmi->mutex, but doing so
* doing so results in reentrancy issues since * results in reentrancy issues since cec_s_phys_addr() might call
* cec_s_phys_addr_from_edid might call .adap_enable, which * .adap_enable, which leads to that funtion being called with our mutex
* leads to that funtion being called with our mutex held. * held.
* *
* Concurrency isn't an issue at the moment since we don't share * Concurrency isn't an issue at the moment since we don't share
* any state with any of the other frameworks so we can ignore * any state with any of the other frameworks so we can ignore
* the lock for now. * the lock for now.
*/ */
edid = drm_get_edid(connector, vc4_hdmi->ddc); drm_edid = drm_edid_read_ddc(connector, vc4_hdmi->ddc);
cec_s_phys_addr_from_edid(vc4_hdmi->cec_adap, edid); drm_edid_connector_update(connector, drm_edid);
if (!edid) cec_s_phys_addr(vc4_hdmi->cec_adap,
connector->display_info.source_physical_address, false);
if (!drm_edid)
return 0; return 0;
drm_connector_update_edid_property(connector, edid); ret = drm_edid_connector_add_modes(connector);
ret = drm_add_edid_modes(connector, edid); drm_edid_free(drm_edid);
kfree(edid);
if (!vc4->hvs->vc5_hdmi_enable_hdmi_20) { if (!vc4->hvs->vc5_hdmi_enable_hdmi_20) {
struct drm_device *drm = connector->dev; struct drm_device *drm = connector->dev;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment