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