On Mon, 2016-10-31 at 07:35 -0400, Frediano Ziglio wrote:
The use of drm_cvt_mode() in qxl_add_monitors_config_modes() means that the resolutions we are going to present to user-space are going to be rounded down to a multiple of 8. In the QXL arbitrary resolution case, this is not useful. This commit forces the actual width/height that was requested by the client in the drm_display_mode structure rather than keeping the rounded version.
Signed-off-by: Christophe Fergeau cfergeau@redhat.com
I know this is very hacky, but I have no idea what is important to be set in the mode struct, if there is a better way to create it without getting the rounding to a multiple of 8, ...
drivers/gpu/drm/qxl/qxl_display.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c index edb90f6..fc5b01e 100644 --- a/drivers/gpu/drm/qxl/qxl_display.c +++ b/drivers/gpu/drm/qxl/qxl_display.c @@ -202,6 +202,9 @@ static int qxl_add_monitors_config_modes(struct drm_connector *connector, mode = drm_cvt_mode(dev, head->width, head->height, 60, false, false, false); mode->type |= DRM_MODE_TYPE_PREFERRED;
- mode->hdisplay = head->width;
- mode->vdisplay = head->height;
- drm_mode_set_name(mode);
*pwidth = head->width; *pheight = head->height; drm_mode_probed_add(connector, mode);
If I remember I was discussing with Pavel some time ago about the implementation of this. And if I remember he tested some code. Pavel, do you remember something about?
I found out that there is a function fixup_mode_1366x768() in drivers/gpu/drm/drm_edid.c setting the mode->hdisplay and also adjusting the mode->hsync
This patch is doing something similar. It just ignores the sync part.
Pavel