From: James Le Cuirot <chewi@gentoo.org>
To: Russell King <rmk+kernel@arm.linux.org.uk>,
David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>,
Philipp Zabel <p.zabel@pengutronix.de>,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
James Le Cuirot <chewi@gentoo.org>
Subject: [PATCH] drm/bridge: dw-hdmi: Set sink_is_hdmi and sink_has_audio in mode_set
Date: Sun, 30 Oct 2016 13:56:25 +0000 [thread overview]
Message-ID: <20161030135625.11117-1-chewi@gentoo.org> (raw)
These were previously set in dw_hdmi_connector_get_modes but this
isn't called when the EDID is overridden. This can be seen in
drm_helper_probe_single_connector_modes. Using the
drm_kms_helper.edid_firmware parameter therefore always resulted in
silence, even when providing the very same EDID that had previously
been read from /sys.
I saw that other drivers set similar properties in mode_set rather
than get_modes. radeon_audio_hdmi_mode_set is one such example. It
calls radeon_connector_edid to retrieve the EDID so I drew inspiration
from this for the fix.
I have tested this with a Utilite Pro on 4.9-rc3. I tried overriding
the EDID with my own, not overriding the EDID, hotplugging the display
after booting, and overriding the EDID with 1920x1080.bin. The latter
has no audio parameters so no sound was heard as expected.
Signed-off-by: James Le Cuirot <chewi@gentoo.org>
---
Notes:
I do have some questions.
I don't know the significance of the mutex lock. I put my code inside
it because I am modifying the hdmi properties. Is this necessary?
Should it go before or after the lock instead?
I'm also wondering whether I should initially set both properties to
false in case the EDID is missing but the driver didn't do this
previously. Perhaps it should have?
I have only contributed one line to the kernel before, many years ago,
so please be gentle. :)
drivers/gpu/drm/bridge/dw-hdmi.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/bridge/dw-hdmi.c b/drivers/gpu/drm/bridge/dw-hdmi.c
index ab7023e..a30b691 100644
--- a/drivers/gpu/drm/bridge/dw-hdmi.c
+++ b/drivers/gpu/drm/bridge/dw-hdmi.c
@@ -1383,12 +1383,23 @@ static void dw_hdmi_bridge_mode_set(struct drm_bridge *bridge,
struct drm_display_mode *mode)
{
struct dw_hdmi *hdmi = bridge->driver_private;
+ struct drm_property_blob *edid_blob;
+ struct edid *edid;
mutex_lock(&hdmi->mutex);
/* Store the display mode for plugin/DKMS poweron events */
memcpy(&hdmi->previous_mode, mode, sizeof(hdmi->previous_mode));
+ edid_blob = hdmi->connector.edid_blob_ptr;
+ if (edid_blob) {
+ edid = (struct edid *) edid_blob->data;
+ if (edid) {
+ hdmi->sink_is_hdmi = drm_detect_hdmi_monitor(edid);
+ hdmi->sink_has_audio = drm_detect_monitor_audio(edid);
+ }
+ }
+
mutex_unlock(&hdmi->mutex);
}
@@ -1445,8 +1456,6 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector)
dev_dbg(hdmi->dev, "got edid: width[%d] x height[%d]\n",
edid->width_cm, edid->height_cm);
- hdmi->sink_is_hdmi = drm_detect_hdmi_monitor(edid);
- hdmi->sink_has_audio = drm_detect_monitor_audio(edid);
drm_mode_connector_update_edid_property(connector, edid);
ret = drm_add_edid_modes(connector, edid);
/* Store the ELD */
--
2.10.1
next reply other threads:[~2016-10-30 13:56 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-30 13:56 James Le Cuirot [this message]
2016-10-31 16:37 ` Russell King - ARM Linux
2016-11-02 21:47 ` James Le Cuirot
2016-11-02 22:02 ` Russell King - ARM Linux
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=20161030135625.11117-1-chewi@gentoo.org \
--to=chewi@gentoo.org \
--cc=airlied@linux.ie \
--cc=daniel.vetter@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=p.zabel@pengutronix.de \
--cc=rmk+kernel@arm.linux.org.uk \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®