Commit bf5a269a authored by Zhenyu Wang's avatar Zhenyu Wang Committed by Eric Anholt

drm/i915: TV detection fix

Check that the encoder has a real enabled crtc for TV detect, and fix
missing TV type setting after detect.
Signed-off-by: default avatarZhenyu Wang <zhenyu.z.wang@intel.com>
Signed-off-by: default avatarEric Anholt <eric@anholt.net>
parent d2d9f232
...@@ -1406,6 +1406,7 @@ intel_tv_detect_type (struct drm_crtc *crtc, struct intel_output *intel_output) ...@@ -1406,6 +1406,7 @@ intel_tv_detect_type (struct drm_crtc *crtc, struct intel_output *intel_output)
tv_dac = I915_READ(TV_DAC); tv_dac = I915_READ(TV_DAC);
I915_WRITE(TV_DAC, save_tv_dac); I915_WRITE(TV_DAC, save_tv_dac);
I915_WRITE(TV_CTL, save_tv_ctl); I915_WRITE(TV_CTL, save_tv_ctl);
intel_wait_for_vblank(dev);
} }
/* /*
* A B C * A B C
...@@ -1456,7 +1457,7 @@ intel_tv_detect(struct drm_connector *connector) ...@@ -1456,7 +1457,7 @@ intel_tv_detect(struct drm_connector *connector)
mode = reported_modes[0]; mode = reported_modes[0];
drm_mode_set_crtcinfo(&mode, CRTC_INTERLACE_HALVE_V); drm_mode_set_crtcinfo(&mode, CRTC_INTERLACE_HALVE_V);
if (encoder->crtc) { if (encoder->crtc && encoder->crtc->enabled) {
type = intel_tv_detect_type(encoder->crtc, intel_output); type = intel_tv_detect_type(encoder->crtc, intel_output);
} else { } else {
crtc = intel_get_load_detect_pipe(intel_output, &mode, &dpms_mode); crtc = intel_get_load_detect_pipe(intel_output, &mode, &dpms_mode);
...@@ -1467,6 +1468,8 @@ intel_tv_detect(struct drm_connector *connector) ...@@ -1467,6 +1468,8 @@ intel_tv_detect(struct drm_connector *connector)
type = -1; type = -1;
} }
tv_priv->type = type;
if (type < 0) if (type < 0)
return connector_status_disconnected; return connector_status_disconnected;
......
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