blob: ce8109d7cd6738f6438eefb9a193014ac139b6d2 [file] [log] [blame]
From 3637e602f7d6b4ee9b6390652527901440277427 Mon Sep 17 00:00:00 2001
From: Robert Tarasov <tutankhamen@chromium.org>
Date: Sat, 9 Mar 2019 12:01:20 -0800
Subject: [PATCH] CHROMIUM: drm/udl: Cut >165 MHz modes for DVI
Filter out all modes with clock higher than 165 MHz for DVI connector.
BUG=chromium:923113
TEST=Connect DELL U2412M monitor to any DisplayLink-based USB 2.0 device
(for example Pluggable UD-PRO8 dock). 1920x1080x60 (172 MHz) mode
shouldn't be listed in modetest.
Signed-off-by: Robert Tarasov <[email protected]>
Change-Id: Idc78cc56bf01772d825ca272ea7cb23560416a0d
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/1513017
Reviewed-by: Robert Tarasov <[email protected]>
Tested-by: Robert Tarasov <[email protected]>
[rebase510(groeck): Context conflicts]
Signed-off-by: Guenter Roeck <[email protected]>
[drm 6.2 forklift: Related code moved to udl_modeset.c]
Signed-off-by: Drew Davenport <[email protected]>
---
drivers/gpu/drm/udl/udl_modeset.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/udl/udl_modeset.c b/drivers/gpu/drm/udl/udl_modeset.c
index bbb04f98886a2807f782e946a87801a54e1f3a1c..2a12407078b55cd30b7f45dffa9dfe8d15ff1eef 100644
--- a/drivers/gpu/drm/udl/udl_modeset.c
+++ b/drivers/gpu/drm/udl/udl_modeset.c
@@ -427,6 +427,20 @@ static int udl_connector_helper_get_modes(struct drm_connector *connector)
return count;
}
+static enum drm_mode_status udl_connector_helper_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+{
+ int con_type = connector->connector_type;
+
+ if ((con_type == DRM_MODE_CONNECTOR_DVII ||
+ con_type == DRM_MODE_CONNECTOR_DVID ||
+ con_type == DRM_MODE_CONNECTOR_DVIA) &&
+ mode->clock > 165000)
+ return MODE_CLOCK_HIGH;
+
+ return 0;
+}
+
static int udl_connector_helper_detect_ctx(struct drm_connector *connector,
struct drm_modeset_acquire_ctx *ctx,
bool force)
@@ -442,6 +456,7 @@ static int udl_connector_helper_detect_ctx(struct drm_connector *connector,
static const struct drm_connector_helper_funcs udl_connector_helper_funcs = {
.get_modes = udl_connector_helper_get_modes,
.detect_ctx = udl_connector_helper_detect_ctx,
+ .mode_valid = udl_connector_helper_mode_valid,
};
static const struct drm_connector_funcs udl_connector_funcs = {
@@ -537,4 +552,4 @@ int udl_modeset_init(struct drm_device *dev)
drm_mode_config_reset(dev);
return 0;
-}
+}
--
2.46.0.rc2.264.g509ed76dc8-goog