Hi,

On 03/11/2026 09:31, Hans Verkuil wrote:
If an EDID is present, then call cec_s_phys_addr. If not, then
call cec_phys_addr_invalidate. This helps the CEC framework differentiate
between CEC_PHYS_ADDR_INVALID due to no EDID, or due to an EDID without
a Physical Address.

This driver is one of the few that was doing this inconsistently.

Signed-off-by: Hans Verkuil <[email protected]>
Cc: Tomi Valkeinen <[email protected]>
Cc: Maxime Ripard <[email protected]>
---
  drivers/gpu/drm/omapdrm/dss/hdmi4.c     | 7 +++----
  drivers/gpu/drm/omapdrm/dss/hdmi4_cec.c | 5 +++++
  drivers/gpu/drm/omapdrm/dss/hdmi4_cec.h | 5 +++++
  3 files changed, 13 insertions(+), 4 deletions(-)

Reviewed-by: Tomi Valkeinen <[email protected]>

 Tomi

diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c 
b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
index bd6c4d2dcdc8..056bede2ec8a 100644
--- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
@@ -439,7 +439,7 @@ static void hdmi4_bridge_hpd_notify(struct drm_bridge 
*bridge,
                if (hdmi_runtime_get(hdmi))
                        return;
- hdmi4_cec_set_phys_addr(&hdmi->core, CEC_PHYS_ADDR_INVALID);
+               hdmi4_cec_phys_addr_invalidate(&hdmi->core);
                hdmi_runtime_put(hdmi);
        }
  }
@@ -487,12 +487,11 @@ static const struct drm_edid 
*hdmi4_bridge_edid_read(struct drm_bridge *bridge,
                unsigned int len = (edid->extensions + 1) * EDID_LENGTH;
cec_addr = cec_get_edid_phys_addr((u8 *)edid, len, NULL);
+               hdmi4_cec_set_phys_addr(&hdmi->core, cec_addr);
        } else {
-               cec_addr = CEC_PHYS_ADDR_INVALID;
+               hdmi4_cec_phys_addr_invalidate(&hdmi->core);
        }
- hdmi4_cec_set_phys_addr(&hdmi->core, cec_addr);
-
        if (need_enable)
                hdmi4_core_disable(&hdmi->core);
diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4_cec.c b/drivers/gpu/drm/omapdrm/dss/hdmi4_cec.c
index 852987e67e40..60d0d85dccad 100644
--- a/drivers/gpu/drm/omapdrm/dss/hdmi4_cec.c
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi4_cec.c
@@ -322,6 +322,11 @@ void hdmi4_cec_set_phys_addr(struct hdmi_core_data *core, 
u16 pa)
        cec_s_phys_addr(core->adap, pa, false);
  }
+void hdmi4_cec_phys_addr_invalidate(struct hdmi_core_data *core)
+{
+       cec_phys_addr_invalidate(core->adap);
+}
+
  int hdmi4_cec_init(struct platform_device *pdev, struct hdmi_core_data *core,
                  struct hdmi_wp_data *wp)
  {
diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4_cec.h 
b/drivers/gpu/drm/omapdrm/dss/hdmi4_cec.h
index 1ca5b5ca8a99..234690dd3a1e 100644
--- a/drivers/gpu/drm/omapdrm/dss/hdmi4_cec.h
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi4_cec.h
@@ -15,6 +15,7 @@ struct platform_device;
  /* HDMI CEC funcs */
  #ifdef CONFIG_OMAP4_DSS_HDMI_CEC
  void hdmi4_cec_set_phys_addr(struct hdmi_core_data *core, u16 pa);
+void hdmi4_cec_phys_addr_invalidate(struct hdmi_core_data *core);
  void hdmi4_cec_irq(struct hdmi_core_data *core);
  int hdmi4_cec_init(struct platform_device *pdev, struct hdmi_core_data *core,
                  struct hdmi_wp_data *wp);
@@ -24,6 +25,10 @@ static inline void hdmi4_cec_set_phys_addr(struct 
hdmi_core_data *core, u16 pa)
  {
  }
+static inline void hdmi4_cec_phys_addr_invalidate(struct hdmi_core_data *core)
+{
+}
+
  static inline void hdmi4_cec_irq(struct hdmi_core_data *core)
  {
  }

Reply via email to