All of lore.kernel.org
 help / color / mirror / Atom feed
From: Maxime Ripard <maxime@cerno.tech>
To: Eric Anholt <eric@anholt.net>,
	Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	Maxime Ripard <maxime@cerno.tech>,
	Daniel Vetter <daniel.vetter@intel.com>,
	David Airlie <airlied@linux.ie>
Cc: linux-rpi-kernel@lists.infradead.org,
	linux-arm-kernel@lists.infradead.org,
	Hans Verkuil <hverkuil-cisco@xs4all.nl>,
	linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
	bcm-kernel-feedback-list@broadcom.com,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Dave Stevenson <dave.stevenson@raspberrypi.com>,
	linux-media@vger.kernel.org, Dom Cobley <popcornmix@gmail.com>
Subject: [PATCH v2 05/15] drm/vc4: hdmi: Restore cec physical address on reconnect
Date: Mon, 11 Jan 2021 15:22:59 +0100	[thread overview]
Message-ID: <20210111142309.193441-6-maxime@cerno.tech> (raw)
In-Reply-To: <20210111142309.193441-1-maxime@cerno.tech>

From: Dom Cobley <popcornmix@gmail.com>

Currently we call cec_phys_addr_invalidate on a hotplug deassert.
That may be due to a TV power cycling, or an AVR being switched
on (and switching edid).

This makes CEC unusable since our controller wouldn't have a physical
address anymore.

Set it back up again on the hotplug assert.

Fixes: 15b4511a4af6 ("drm/vc4: add HDMI CEC support")
Signed-off-by: Dom Cobley <popcornmix@gmail.com>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
---
 drivers/gpu/drm/vc4/vc4_hdmi.c | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
index 7945dbcee78c..c3a301396aad 100644
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -136,20 +136,32 @@ static enum drm_connector_status
 vc4_hdmi_connector_detect(struct drm_connector *connector, bool force)
 {
 	struct vc4_hdmi *vc4_hdmi = connector_to_vc4_hdmi(connector);
+	bool connected = false;
 
 	if (vc4_hdmi->hpd_gpio) {
 		if (gpio_get_value_cansleep(vc4_hdmi->hpd_gpio) ^
 		    vc4_hdmi->hpd_active_low)
-			return connector_status_connected;
-		cec_phys_addr_invalidate(vc4_hdmi->cec_adap);
-		return connector_status_disconnected;
+			connected = true;
+	} else if (drm_probe_ddc(vc4_hdmi->ddc)) {
+		connected = true;
+	} else if (HDMI_READ(HDMI_HOTPLUG) & VC4_HDMI_HOTPLUG_CONNECTED) {
+		connected = true;
 	}
 
-	if (drm_probe_ddc(vc4_hdmi->ddc))
-		return connector_status_connected;
+	if (connected) {
+		if (connector->status != connector_status_connected) {
+			struct edid *edid = drm_get_edid(connector, vc4_hdmi->ddc);
+
+			if (edid) {
+				cec_s_phys_addr_from_edid(vc4_hdmi->cec_adap, edid);
+				vc4_hdmi->encoder.hdmi_monitor = drm_detect_hdmi_monitor(edid);
+				kfree(edid);
+			}
+		}
 
-	if (HDMI_READ(HDMI_HOTPLUG) & VC4_HDMI_HOTPLUG_CONNECTED)
 		return connector_status_connected;
+	}
+
 	cec_phys_addr_invalidate(vc4_hdmi->cec_adap);
 	return connector_status_disconnected;
 }
-- 
2.29.2


WARNING: multiple messages have this Message-ID (diff)
From: Maxime Ripard <maxime@cerno.tech>
To: Eric Anholt <eric@anholt.net>,
	Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	Maxime Ripard <maxime@cerno.tech>,
	Daniel Vetter <daniel.vetter@intel.com>,
	David Airlie <airlied@linux.ie>
Cc: Dave Stevenson <dave.stevenson@raspberrypi.com>,
	linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
	Dom Cobley <popcornmix@gmail.com>,
	bcm-kernel-feedback-list@broadcom.com,
	linux-rpi-kernel@lists.infradead.org,
	Hans Verkuil <hverkuil-cisco@xs4all.nl>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	linux-arm-kernel@lists.infradead.org,
	linux-media@vger.kernel.org
Subject: [PATCH v2 05/15] drm/vc4: hdmi: Restore cec physical address on reconnect
Date: Mon, 11 Jan 2021 15:22:59 +0100	[thread overview]
Message-ID: <20210111142309.193441-6-maxime@cerno.tech> (raw)
In-Reply-To: <20210111142309.193441-1-maxime@cerno.tech>

From: Dom Cobley <popcornmix@gmail.com>

Currently we call cec_phys_addr_invalidate on a hotplug deassert.
That may be due to a TV power cycling, or an AVR being switched
on (and switching edid).

This makes CEC unusable since our controller wouldn't have a physical
address anymore.

Set it back up again on the hotplug assert.

Fixes: 15b4511a4af6 ("drm/vc4: add HDMI CEC support")
Signed-off-by: Dom Cobley <popcornmix@gmail.com>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
---
 drivers/gpu/drm/vc4/vc4_hdmi.c | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
index 7945dbcee78c..c3a301396aad 100644
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -136,20 +136,32 @@ static enum drm_connector_status
 vc4_hdmi_connector_detect(struct drm_connector *connector, bool force)
 {
 	struct vc4_hdmi *vc4_hdmi = connector_to_vc4_hdmi(connector);
+	bool connected = false;
 
 	if (vc4_hdmi->hpd_gpio) {
 		if (gpio_get_value_cansleep(vc4_hdmi->hpd_gpio) ^
 		    vc4_hdmi->hpd_active_low)
-			return connector_status_connected;
-		cec_phys_addr_invalidate(vc4_hdmi->cec_adap);
-		return connector_status_disconnected;
+			connected = true;
+	} else if (drm_probe_ddc(vc4_hdmi->ddc)) {
+		connected = true;
+	} else if (HDMI_READ(HDMI_HOTPLUG) & VC4_HDMI_HOTPLUG_CONNECTED) {
+		connected = true;
 	}
 
-	if (drm_probe_ddc(vc4_hdmi->ddc))
-		return connector_status_connected;
+	if (connected) {
+		if (connector->status != connector_status_connected) {
+			struct edid *edid = drm_get_edid(connector, vc4_hdmi->ddc);
+
+			if (edid) {
+				cec_s_phys_addr_from_edid(vc4_hdmi->cec_adap, edid);
+				vc4_hdmi->encoder.hdmi_monitor = drm_detect_hdmi_monitor(edid);
+				kfree(edid);
+			}
+		}
 
-	if (HDMI_READ(HDMI_HOTPLUG) & VC4_HDMI_HOTPLUG_CONNECTED)
 		return connector_status_connected;
+	}
+
 	cec_phys_addr_invalidate(vc4_hdmi->cec_adap);
 	return connector_status_disconnected;
 }
-- 
2.29.2


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

WARNING: multiple messages have this Message-ID (diff)
From: Maxime Ripard <maxime@cerno.tech>
To: Eric Anholt <eric@anholt.net>,
	Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	Maxime Ripard <maxime@cerno.tech>,
	Daniel Vetter <daniel.vetter@intel.com>,
	David Airlie <airlied@linux.ie>
Cc: Dave Stevenson <dave.stevenson@raspberrypi.com>,
	linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
	Dom Cobley <popcornmix@gmail.com>,
	bcm-kernel-feedback-list@broadcom.com,
	linux-rpi-kernel@lists.infradead.org,
	Hans Verkuil <hverkuil-cisco@xs4all.nl>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	linux-arm-kernel@lists.infradead.org,
	linux-media@vger.kernel.org
Subject: [PATCH v2 05/15] drm/vc4: hdmi: Restore cec physical address on reconnect
Date: Mon, 11 Jan 2021 15:22:59 +0100	[thread overview]
Message-ID: <20210111142309.193441-6-maxime@cerno.tech> (raw)
In-Reply-To: <20210111142309.193441-1-maxime@cerno.tech>

From: Dom Cobley <popcornmix@gmail.com>

Currently we call cec_phys_addr_invalidate on a hotplug deassert.
That may be due to a TV power cycling, or an AVR being switched
on (and switching edid).

This makes CEC unusable since our controller wouldn't have a physical
address anymore.

Set it back up again on the hotplug assert.

Fixes: 15b4511a4af6 ("drm/vc4: add HDMI CEC support")
Signed-off-by: Dom Cobley <popcornmix@gmail.com>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
---
 drivers/gpu/drm/vc4/vc4_hdmi.c | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
index 7945dbcee78c..c3a301396aad 100644
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -136,20 +136,32 @@ static enum drm_connector_status
 vc4_hdmi_connector_detect(struct drm_connector *connector, bool force)
 {
 	struct vc4_hdmi *vc4_hdmi = connector_to_vc4_hdmi(connector);
+	bool connected = false;
 
 	if (vc4_hdmi->hpd_gpio) {
 		if (gpio_get_value_cansleep(vc4_hdmi->hpd_gpio) ^
 		    vc4_hdmi->hpd_active_low)
-			return connector_status_connected;
-		cec_phys_addr_invalidate(vc4_hdmi->cec_adap);
-		return connector_status_disconnected;
+			connected = true;
+	} else if (drm_probe_ddc(vc4_hdmi->ddc)) {
+		connected = true;
+	} else if (HDMI_READ(HDMI_HOTPLUG) & VC4_HDMI_HOTPLUG_CONNECTED) {
+		connected = true;
 	}
 
-	if (drm_probe_ddc(vc4_hdmi->ddc))
-		return connector_status_connected;
+	if (connected) {
+		if (connector->status != connector_status_connected) {
+			struct edid *edid = drm_get_edid(connector, vc4_hdmi->ddc);
+
+			if (edid) {
+				cec_s_phys_addr_from_edid(vc4_hdmi->cec_adap, edid);
+				vc4_hdmi->encoder.hdmi_monitor = drm_detect_hdmi_monitor(edid);
+				kfree(edid);
+			}
+		}
 
-	if (HDMI_READ(HDMI_HOTPLUG) & VC4_HDMI_HOTPLUG_CONNECTED)
 		return connector_status_connected;
+	}
+
 	cec_phys_addr_invalidate(vc4_hdmi->cec_adap);
 	return connector_status_disconnected;
 }
-- 
2.29.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  parent reply	other threads:[~2021-01-11 14:25 UTC|newest]

Thread overview: 111+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-11 14:22 [PATCH v2 00/15] drm/vc4: hdmi: Add CEC support for the BCM2711 Maxime Ripard
2021-01-11 14:22 ` Maxime Ripard
2021-01-11 14:22 ` Maxime Ripard
2021-01-11 14:22 ` [PATCH v2 01/15] ARM: bcm: Select BRCMSTB_L2_IRQ for bcm2835 Maxime Ripard
2021-01-11 14:22   ` Maxime Ripard
2021-01-11 14:22   ` Maxime Ripard
2021-01-11 16:54   ` Florian Fainelli
2021-01-11 16:54     ` Florian Fainelli
2021-01-11 16:54     ` Florian Fainelli
2021-01-11 17:12     ` Nicolas Saenz Julienne
2021-01-11 17:12       ` Nicolas Saenz Julienne
2021-01-11 17:12       ` Nicolas Saenz Julienne
2021-01-11 14:22 ` [PATCH v2 02/15] drm/vc4: hdmi: Move hdmi reset to bind Maxime Ripard
2021-01-11 14:22   ` Maxime Ripard
2021-01-11 14:22   ` Maxime Ripard
2021-01-11 14:22 ` [PATCH v2 03/15] drm/vc4: hdmi: Fix register offset with longer CEC messages Maxime Ripard
2021-01-11 14:22   ` Maxime Ripard
2021-01-11 14:22   ` Maxime Ripard
2021-01-11 14:22 ` [PATCH v2 04/15] drm/vc4: hdmi: Fix up CEC registers Maxime Ripard
2021-01-11 14:22   ` Maxime Ripard
2021-01-11 14:22   ` Maxime Ripard
2021-01-11 14:22 ` Maxime Ripard [this message]
2021-01-11 14:22   ` [PATCH v2 05/15] drm/vc4: hdmi: Restore cec physical address on reconnect Maxime Ripard
2021-01-11 14:22   ` Maxime Ripard
2021-01-22 10:31   ` Dave Stevenson
2021-01-22 10:31     ` Dave Stevenson
2021-01-22 10:31     ` Dave Stevenson
2021-01-11 14:23 ` [PATCH v2 06/15] drm/vc4: hdmi: Compute the CEC clock divider from the clock rate Maxime Ripard
2021-01-11 14:23   ` Maxime Ripard
2021-01-11 14:23   ` Maxime Ripard
2021-01-11 14:23 ` [PATCH v2 07/15] drm/vc4: hdmi: Update the CEC clock divider on HSM rate change Maxime Ripard
2021-01-11 14:23   ` Maxime Ripard
2021-01-11 14:23   ` Maxime Ripard
2021-01-11 14:23 ` [PATCH v2 08/15] drm/vc4: hdmi: Introduce a CEC clock Maxime Ripard
2021-01-11 14:23   ` Maxime Ripard
2021-01-11 14:23   ` Maxime Ripard
2021-01-11 14:23 ` [PATCH v2 09/15] drm/vc4: hdmi: Split the interrupt handlers Maxime Ripard
2021-01-11 14:23   ` Maxime Ripard
2021-01-11 14:23   ` Maxime Ripard
2021-01-22 13:01   ` Dave Stevenson
2021-01-22 13:01     ` Dave Stevenson
2021-01-22 13:01     ` Dave Stevenson
2021-01-11 14:23 ` [PATCH v2 10/15] drm/vc4: hdmi: Support BCM2711 CEC interrupt setup Maxime Ripard
2021-01-11 14:23   ` Maxime Ripard
2021-01-11 14:23   ` Maxime Ripard
2021-01-22 13:10   ` Dave Stevenson
2021-01-22 13:10     ` Dave Stevenson
2021-01-22 13:10     ` Dave Stevenson
2021-01-11 14:23 ` [PATCH v2 11/15] drm/vc4: hdmi: Remove cec_available flag Maxime Ripard
2021-01-11 14:23   ` Maxime Ripard
2021-01-11 14:23   ` Maxime Ripard
2021-01-11 14:23 ` [PATCH v2 12/15] drm/vc4: hdmi: Don't register the CEC adapter if there's no interrupts Maxime Ripard
2021-01-11 14:23   ` Maxime Ripard
2021-01-11 14:23   ` Maxime Ripard
2021-01-11 14:23 ` [PATCH v2 13/15] dt-binding: display: bcm2711-hdmi: Add CEC and hotplug interrupts Maxime Ripard
2021-01-11 14:23   ` Maxime Ripard
2021-01-11 14:23   ` Maxime Ripard
2021-01-22 13:28   ` Dave Stevenson
2021-01-22 13:28     ` Dave Stevenson
2021-01-22 13:28     ` Dave Stevenson
2021-02-01 18:56   ` Rob Herring
2021-02-01 18:56     ` Rob Herring
2021-02-01 18:56     ` Rob Herring
2021-02-18 14:54     ` Rob Herring
2021-02-18 14:54       ` Rob Herring
2021-02-18 14:54       ` Rob Herring
2021-01-11 14:23 ` [PATCH v2 14/15] ARM: dts: bcm2711: Add the BSC interrupt controller Maxime Ripard
2021-01-11 14:23   ` Maxime Ripard
2021-01-11 14:23   ` Maxime Ripard
2021-02-09  9:49   ` Dave Stevenson
2021-02-09  9:49     ` Dave Stevenson
2021-02-09  9:49     ` Dave Stevenson
2021-02-10 14:40     ` Maxime Ripard
2021-02-10 14:40       ` Maxime Ripard
2021-02-10 14:40       ` Maxime Ripard
2021-02-10 15:30       ` Marc Zyngier
2021-02-10 15:30         ` Marc Zyngier
2021-02-10 15:30         ` Marc Zyngier
2021-02-10 15:49         ` Dave Stevenson
2021-02-10 15:49           ` Dave Stevenson
2021-02-10 15:49           ` Dave Stevenson
2021-02-10 18:49           ` Florian Fainelli
2021-02-10 18:49             ` Florian Fainelli
2021-02-10 18:49             ` Florian Fainelli
2021-02-12 11:20             ` Nicolas Saenz Julienne
2021-02-12 11:20               ` Nicolas Saenz Julienne
2021-02-12 11:20               ` Nicolas Saenz Julienne
2021-02-12 11:34               ` Maxime Ripard
2021-02-12 11:34                 ` Maxime Ripard
2021-02-12 11:34                 ` Maxime Ripard
2021-01-11 14:23 ` [PATCH v2 15/15] ARM: dts: bcm2711: Add the CEC " Maxime Ripard
2021-01-11 14:23   ` Maxime Ripard
2021-01-11 14:23   ` Maxime Ripard
2021-01-28 14:51   ` Nicolas Saenz Julienne
2021-01-28 14:51     ` Nicolas Saenz Julienne
2021-01-28 14:51     ` Nicolas Saenz Julienne
2021-01-12 15:24 ` [PATCH v2 00/15] drm/vc4: hdmi: Add CEC support for the BCM2711 Hans Verkuil
2021-01-12 15:24   ` Hans Verkuil
2021-01-12 15:24   ` Hans Verkuil
2021-01-18 13:55   ` Hans Verkuil
2021-01-18 13:55     ` Hans Verkuil
2021-01-18 13:55     ` Hans Verkuil
2021-01-27 15:28     ` Hans Verkuil
2021-01-27 15:28       ` Hans Verkuil
2021-01-27 15:28       ` Hans Verkuil
2021-01-25 21:03 ` Nicolas Saenz Julienne
2021-01-25 21:03   ` Nicolas Saenz Julienne
2021-01-25 21:03   ` Nicolas Saenz Julienne
2021-01-28  9:48   ` Maxime Ripard
2021-01-28  9:48     ` Maxime Ripard
2021-01-28  9:48     ` Maxime Ripard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210111142309.193441-6-maxime@cerno.tech \
    --to=maxime@cerno.tech \
    --cc=airlied@linux.ie \
    --cc=bcm-kernel-feedback-list@broadcom.com \
    --cc=daniel.vetter@intel.com \
    --cc=dave.stevenson@raspberrypi.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=eric@anholt.net \
    --cc=hverkuil-cisco@xs4all.nl \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-rpi-kernel@lists.infradead.org \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=mchehab@kernel.org \
    --cc=popcornmix@gmail.com \
    --cc=tzimmermann@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.