Using the media CEC framework the application receives events when the
Physical and/or Logical Addresses change. However, if the Physical Address
changes to f.f.f.f (Invalid), it does not know whether that is because the
HDMI link is disconnected, or because the EDID does not provide a valid
Physical Address. That can happen because the display does not support CEC,
as is the case for DisplayPort inputs or PC monitors.
This is important information to have but this is currently missing.
This series adds support for that.
Currently drivers set the physical address either with cec_s_phys_addr() or
with cec_phys_addr_invalidate(), where the second is just a helper
function that calls cec_s_phys_addr with CEC_PHYS_ADDR_INVALID. There
are also cec_notifier_ counterparts.
Change the behavior so that cec_s_phys_addr() is called whenever there
is an EDID. In that case CEC_PHYS_ADDR_INVALID means that the EDID is
present but does not contain a valid PA. And cec_phys_addr_invalidate()
is only called when the video link is disconnected.
Most CEC drivers already did that, except for the few that are fixed in the
first 6 patches.
The remaining patches implement the new functionality where the CEC
framework actually reports whether or not the EDID was present, based
on whether cec_s_phys_addr or cec_phys_addr_invalidate was called.
The drm patches can either be queued up in the drm subsystem independently
of the remaining patches, or I can take them through the media subsytem
as part of the series, but then I need an Acked/Reviewed-by.
Regards,
Hans
Hans Verkuil (13):
gpu: drm: sti: call cec_notifier_phys_addr_invalidate if no EDID
gpu: drm: exynos: call cec_notifier_phys_addr_invalidate if no EDID
gpu: drm: omapdrm: call cec_s_phys_addr only if EDID is present
media: i2c: adv7511-v4l2: call cec_s_phys_addr only if EDID is present
media: cec: extron-da-hd-4k-plus: call cec_s_phys_addr only if EDID is
present
media: cec: core: improve cec_notifier_phys_addr_invalidate
media: uapi: cec.h: add
CEC_CAP_HAS_EDID_PRESENT/CEC_LOG_ADDRS_FL_EDID_PRESENT
Documentation: media: document EDID_PRESENT cap and flag.
media: cec: core: add support for EDID_PRESENT
media: uapi: cec.h: add CEC_EVENT_FL_STATE_EDID_PRESENT flag
Documentation: media: cec-ioc-dqevent.rst: document STATE_EDID_PRESENT
flag
media: cec: core: implement CEC_EVENT_FL_STATE_EDID_PRESENT
Documentation: media: document cec_phys_addr_invalidate
Documentation/driver-api/media/cec-core.rst | 10 +++-
.../media/cec/cec-ioc-adap-g-caps.rst | 10 ++++
.../media/cec/cec-ioc-adap-g-log-addrs.rst | 9 ++++
.../media/cec/cec-ioc-dqevent.rst | 10 ++++
drivers/gpu/drm/exynos/exynos_hdmi.c | 2 +-
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 ++
drivers/gpu/drm/sti/sti_hdmi.c | 2 +-
drivers/media/cec/core/cec-adap.c | 49 ++++++++++++++++---
drivers/media/cec/core/cec-api.c | 3 +-
drivers/media/cec/core/cec-core.c | 4 +-
drivers/media/cec/core/cec-notifier.c | 13 +++++
drivers/media/cec/core/cec-priv.h | 3 +-
.../extron-da-hd-4k-plus.c | 8 ++-
drivers/media/i2c/adv7511-v4l2.c | 2 +-
include/media/cec-notifier.h | 33 +++++++------
include/media/cec.h | 27 +++++-----
include/uapi/linux/cec.h | 29 ++++++-----
19 files changed, 171 insertions(+), 60 deletions(-)
--
2.53.0