drm/edid: Extract drm_gtf2_mode()
Extract the GTF vs. GTF2 logic into a separate function. We'll have a second user soon. Reviewed-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20220927170006.27855-5-ville.syrjala@linux.intel.com
This commit is contained in:
parent
ca2582c66b
commit
86101bb7e0
|
|
@ -3113,6 +3113,35 @@ static int drm_mode_hsync(const struct drm_display_mode *mode)
|
|||
return DIV_ROUND_CLOSEST(mode->clock, mode->htotal);
|
||||
}
|
||||
|
||||
static struct drm_display_mode *
|
||||
drm_gtf2_mode(struct drm_device *dev,
|
||||
const struct drm_edid *drm_edid,
|
||||
int hsize, int vsize, int vrefresh_rate)
|
||||
{
|
||||
struct drm_display_mode *mode;
|
||||
|
||||
/*
|
||||
* This is potentially wrong if there's ever a monitor with
|
||||
* more than one ranges section, each claiming a different
|
||||
* secondary GTF curve. Please don't do that.
|
||||
*/
|
||||
mode = drm_gtf_mode(dev, hsize, vsize, vrefresh_rate, 0, 0);
|
||||
if (!mode)
|
||||
return NULL;
|
||||
|
||||
if (drm_mode_hsync(mode) > drm_gtf2_hbreak(drm_edid)) {
|
||||
drm_mode_destroy(dev, mode);
|
||||
mode = drm_gtf_mode_complex(dev, hsize, vsize,
|
||||
vrefresh_rate, 0, 0,
|
||||
drm_gtf2_m(drm_edid),
|
||||
drm_gtf2_2c(drm_edid),
|
||||
drm_gtf2_k(drm_edid),
|
||||
drm_gtf2_2j(drm_edid));
|
||||
}
|
||||
|
||||
return mode;
|
||||
}
|
||||
|
||||
/*
|
||||
* Take the standard timing params (in this case width, aspect, and refresh)
|
||||
* and convert them into a real mode using CVT/GTF/DMT.
|
||||
|
|
@ -3201,23 +3230,7 @@ static struct drm_display_mode *drm_mode_std(struct drm_connector *connector,
|
|||
mode = drm_gtf_mode(dev, hsize, vsize, vrefresh_rate, 0, 0);
|
||||
break;
|
||||
case LEVEL_GTF2:
|
||||
/*
|
||||
* This is potentially wrong if there's ever a monitor with
|
||||
* more than one ranges section, each claiming a different
|
||||
* secondary GTF curve. Please don't do that.
|
||||
*/
|
||||
mode = drm_gtf_mode(dev, hsize, vsize, vrefresh_rate, 0, 0);
|
||||
if (!mode)
|
||||
return NULL;
|
||||
if (drm_mode_hsync(mode) > drm_gtf2_hbreak(drm_edid)) {
|
||||
drm_mode_destroy(dev, mode);
|
||||
mode = drm_gtf_mode_complex(dev, hsize, vsize,
|
||||
vrefresh_rate, 0, 0,
|
||||
drm_gtf2_m(drm_edid),
|
||||
drm_gtf2_2c(drm_edid),
|
||||
drm_gtf2_k(drm_edid),
|
||||
drm_gtf2_2j(drm_edid));
|
||||
}
|
||||
mode = drm_gtf2_mode(dev, drm_edid, hsize, vsize, vrefresh_rate);
|
||||
break;
|
||||
case LEVEL_CVT:
|
||||
mode = drm_cvt_mode(dev, hsize, vsize, vrefresh_rate, 0, 0,
|
||||
|
|
|
|||
Loading…
Reference in New Issue