| 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 |
| |