Commit 9ed15f91 authored by Ville Syrjälä's avatar Ville Syrjälä

drm/edid: Use GTF2 for inferred modes

For some reason we only use the secondary GTF curve for the
standard timings. Use it for inferred modes as well.
Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220927170006.27855-6-ville.syrjala@linux.intel.com
parent 86101bb7
...@@ -3546,6 +3546,35 @@ static int drm_gtf_modes_for_range(struct drm_connector *connector, ...@@ -3546,6 +3546,35 @@ static int drm_gtf_modes_for_range(struct drm_connector *connector,
return modes; return modes;
} }
static int drm_gtf2_modes_for_range(struct drm_connector *connector,
const struct drm_edid *drm_edid,
const struct detailed_timing *timing)
{
int i, modes = 0;
struct drm_display_mode *newmode;
struct drm_device *dev = connector->dev;
for (i = 0; i < ARRAY_SIZE(extra_modes); i++) {
const struct minimode *m = &extra_modes[i];
newmode = drm_gtf2_mode(dev, drm_edid, m->w, m->h, m->r);
if (!newmode)
return modes;
drm_mode_fixup_1366x768(newmode);
if (!mode_in_range(newmode, drm_edid, timing) ||
!valid_inferred_mode(connector, newmode)) {
drm_mode_destroy(dev, newmode);
continue;
}
drm_mode_probed_add(connector, newmode);
modes++;
}
return modes;
}
static int drm_cvt_modes_for_range(struct drm_connector *connector, static int drm_cvt_modes_for_range(struct drm_connector *connector,
const struct drm_edid *drm_edid, const struct drm_edid *drm_edid,
const struct detailed_timing *timing) const struct detailed_timing *timing)
...@@ -3594,7 +3623,11 @@ do_inferred_modes(const struct detailed_timing *timing, void *c) ...@@ -3594,7 +3623,11 @@ do_inferred_modes(const struct detailed_timing *timing, void *c)
return; /* GTF not defined yet */ return; /* GTF not defined yet */
switch (range->flags) { switch (range->flags) {
case DRM_EDID_SECONDARY_GTF_SUPPORT_FLAG: /* XXX could do more */ case DRM_EDID_SECONDARY_GTF_SUPPORT_FLAG:
closure->modes += drm_gtf2_modes_for_range(closure->connector,
closure->drm_edid,
timing);
break;
case DRM_EDID_DEFAULT_GTF_SUPPORT_FLAG: case DRM_EDID_DEFAULT_GTF_SUPPORT_FLAG:
closure->modes += drm_gtf_modes_for_range(closure->connector, closure->modes += drm_gtf_modes_for_range(closure->connector,
closure->drm_edid, closure->drm_edid,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment