Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1167375 > unrolled thread

[PATCH] drm: bridge/dw_hdmi: Filter modes > 165MHz for DVI

Started byDoug Anderson <dianders@chromium.org>
First post2015-06-18 01:20 +0200
Last post2015-06-18 01:40 +0200
Articles 2 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] drm: bridge/dw_hdmi: Filter modes > 165MHz for DVI Doug Anderson <dianders@chromium.org> - 2015-06-18 01:20 +0200
    Re: [PATCH] drm: bridge/dw_hdmi: Filter modes > 165MHz for DVI Russell King - ARM Linux <linux@arm.linux.org.uk> - 2015-06-18 01:40 +0200

#1167375 — [PATCH] drm: bridge/dw_hdmi: Filter modes > 165MHz for DVI

FromDoug Anderson <dianders@chromium.org>
Date2015-06-18 01:20 +0200
Subject[PATCH] drm: bridge/dw_hdmi: Filter modes > 165MHz for DVI
Message-ID<pCuMH-7y2-41@gated-at.bofh.it>
If you plug in a DVI monitor to your HDMI port, you need to filter out
clocks > 165MHz.  That's because 165MHz is the maximum clock rate that
we can run single-link DVI at.

If you want to run high resolutions to DVI, you'd need some type of an
active adapter that pretended that it was HDMI, interpreted the
signal, and produced a new dual link DVI signal at a lower clock rate.

Signed-off-by: Doug Anderson <dianders@chromium.org>
---
Note: this patch was tested against a 3.14 kernel with backports.  It
was only compile tested against linuxnext, but the code is
sufficiently similar that I'm convinced it will work there.

 drivers/gpu/drm/bridge/dw_hdmi.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/gpu/drm/bridge/dw_hdmi.c b/drivers/gpu/drm/bridge/dw_hdmi.c
index 816d104..48b8532 100644
--- a/drivers/gpu/drm/bridge/dw_hdmi.c
+++ b/drivers/gpu/drm/bridge/dw_hdmi.c
@@ -1421,8 +1421,12 @@ dw_hdmi_connector_mode_valid(struct drm_connector *connector,
 {
 	struct dw_hdmi *hdmi = container_of(connector,
 					   struct dw_hdmi, connector);
+	struct hdmi_vmode *vmode = &hdmi->hdmi_data.video_mode;
 	enum drm_mode_status mode_status = MODE_OK;
 
+	if (mode->clock > 165000 && vmode->mdvi)
+		return MODE_BAD;
+
 	if (hdmi->plat_data->mode_valid)
 		mode_status = hdmi->plat_data->mode_valid(connector, mode);
 
-- 
2.4.3.573.g4eafbef

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [next] | [standalone]


#1167457

FromRussell King - ARM Linux <linux@arm.linux.org.uk>
Date2015-06-18 01:40 +0200
Message-ID<pCv65-7Va-63@gated-at.bofh.it>
In reply to#1167375
On Wed, Jun 17, 2015 at 04:14:07PM -0700, Doug Anderson wrote:
> If you plug in a DVI monitor to your HDMI port, you need to filter out
> clocks > 165MHz.  That's because 165MHz is the maximum clock rate that
> we can run single-link DVI at.
> 
> If you want to run high resolutions to DVI, you'd need some type of an
> active adapter that pretended that it was HDMI, interpreted the
> signal, and produced a new dual link DVI signal at a lower clock rate.
> 
> Signed-off-by: Doug Anderson <dianders@chromium.org>
> ---
> Note: this patch was tested against a 3.14 kernel with backports.  It
> was only compile tested against linuxnext, but the code is
> sufficiently similar that I'm convinced it will work there.

Really?  I have to wonder what your testing was...

        hdmi->vic = drm_match_cea_mode(mode);

        if (!hdmi->vic) {
                dev_dbg(hdmi->dev, "Non-CEA mode used in HDMI\n");
                hdmi->hdmi_data.video_mode.mdvi = true;
        } else {
                dev_dbg(hdmi->dev, "CEA mode used vic=%d\n", hdmi->vic);
                hdmi->hdmi_data.video_mode.mdvi = false;
        }

mdvi indicates whether the _currently set mode_ is a CEA mode or not (imho,
it's mis-named).  It doesn't indicate whether we have a HDMI display device
or a DVI display device connected, which seems to be what you want to use
it for below.

To sort that, what you need to do is detect a HDMI display device using
drm_detect_hdmi_monitor() on the EDID received from the device before
parsing the modes, and save that value in a dw_hdmi struct member, and
I'd suggest that it's a top-level struct member, not buried in 'hdmi_data'
or 'video_mode'.

-- 
FTTC broadband for 0.8mile line: currently at 10.5Mbps down 400kbps up
according to speedtest.net.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web