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)
{
}