Commit e83d12e0 authored by Ville Syrjälä's avatar Ville Syrjälä
Browse files

drm/i915/sdvo: Fail gracefully if the TV dotclock is out of range



Instead of warning and continuing with bogus state when the
requested dotclock isn't acceptable just print some debug
spew and fail gracefully.

Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230705202122.17915-8-ville.syrjala@linux.intel.com


Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
parent d320aaaa
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -1269,7 +1269,7 @@ intel_sdvo_get_preferred_input_mode(struct intel_sdvo *intel_sdvo,
	return true;
}

static void i9xx_adjust_sdvo_tv_clock(struct intel_crtc_state *pipe_config)
static int i9xx_adjust_sdvo_tv_clock(struct intel_crtc_state *pipe_config)
{
	struct drm_i915_private *dev_priv = to_i915(pipe_config->uapi.crtc->dev);
	unsigned int dotclock = pipe_config->hw.adjusted_mode.crtc_clock;
@@ -1292,11 +1292,14 @@ static void i9xx_adjust_sdvo_tv_clock(struct intel_crtc_state *pipe_config)
		clock->m1 = 12;
		clock->m2 = 8;
	} else {
		drm_WARN(&dev_priv->drm, 1,
		drm_dbg_kms(&dev_priv->drm,
			    "SDVO TV clock out of range: %i\n", dotclock);
		return -EINVAL;
	}

	pipe_config->clock_set = true;

	return 0;
}

static bool intel_has_hdmi_sink(struct intel_sdvo_connector *intel_sdvo_connector,
@@ -1414,8 +1417,13 @@ static int intel_sdvo_compute_config(struct intel_encoder *encoder,
					       conn_state);

	/* Clock computation needs to happen after pixel multiplier. */
	if (IS_TV(intel_sdvo_connector))
		i9xx_adjust_sdvo_tv_clock(pipe_config);
	if (IS_TV(intel_sdvo_connector)) {
		int ret;

		ret = i9xx_adjust_sdvo_tv_clock(pipe_config);
		if (ret)
			return ret;
	}

	if (conn_state->picture_aspect_ratio)
		adjusted_mode->picture_aspect_ratio =