Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7173188d authored by Chris Wilson's avatar Chris Wilson Committed by Keith Packard
Browse files

drm/i915: Simplify return value from intel_get_load_detect_pipe



... and so remove the confusion as to whether to use the returned crtc
or intel_encoder->base.crtc with the subsequent load-detection. Even
though they were the same, the two instances of load-detection code
disagreed over which was the more correct.

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarKeith Packard <keithp@keithp.com>
parent b259f673
Loading
Loading
Loading
Loading
+7 −10
Original line number Diff line number Diff line
@@ -305,13 +305,11 @@ static bool intel_crt_detect_ddc(struct drm_connector *connector)
}

static enum drm_connector_status
intel_crt_load_detect(struct drm_crtc *crtc, struct intel_crt *crt)
intel_crt_load_detect(struct intel_crt *crt)
{
	struct drm_encoder *encoder = &crt->base.base;
	struct drm_device *dev = encoder->dev;
	struct drm_device *dev = crt->base.base.dev;
	struct drm_i915_private *dev_priv = dev->dev_private;
	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
	uint32_t pipe = intel_crtc->pipe;
	uint32_t pipe = to_intel_crtc(crt->base.base.crtc)->pipe;
	uint32_t save_bclrpat;
	uint32_t save_vtotal;
	uint32_t vtotal, vactive;
@@ -454,15 +452,14 @@ intel_crt_detect(struct drm_connector *connector, bool force)
	/* for pre-945g platforms use load detect */
	crtc = crt->base.base.crtc;
	if (crtc && crtc->enabled) {
		status = intel_crt_load_detect(crtc, crt);
		status = intel_crt_load_detect(crt);
	} else {
		crtc = intel_get_load_detect_pipe(&crt->base, connector,
						  NULL, &dpms_mode);
		if (crtc) {
		if (intel_get_load_detect_pipe(&crt->base, connector,
					       NULL, &dpms_mode)) {
			if (intel_crt_detect_ddc(connector))
				status = connector_status_connected;
			else
				status = intel_crt_load_detect(crtc, crt);
				status = intel_crt_load_detect(crt);
			intel_release_load_detect_pipe(&crt->base,
						       connector, dpms_mode);
		} else
+9 −7
Original line number Diff line number Diff line
@@ -5481,7 +5481,7 @@ static struct drm_display_mode load_detect_mode = {
		 704, 832, 0, 480, 489, 491, 520, 0, DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
};

struct drm_crtc *intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
bool intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
				struct drm_connector *connector,
				struct drm_display_mode *mode,
				int *dpms_mode)
@@ -5517,7 +5517,7 @@ struct drm_crtc *intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
			crtc_funcs->dpms(crtc, DRM_MODE_DPMS_ON);
			encoder_funcs->dpms(encoder, DRM_MODE_DPMS_ON);
		}
		return crtc;
		return true;
	}

	/* Find an unused one (if possible) */
@@ -5537,7 +5537,8 @@ struct drm_crtc *intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
	 * If we didn't find an unused CRTC, don't use any.
	 */
	if (!crtc) {
		return NULL;
		DRM_DEBUG_KMS("no pipe available for load-detect\n");
		return false;
	}

	encoder->crtc = crtc;
@@ -5561,10 +5562,11 @@ struct drm_crtc *intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
		encoder_funcs->mode_set(encoder, &crtc->mode, &crtc->mode);
		encoder_funcs->commit(encoder);
	}

	/* let the connector get through one full cycle before testing */
	intel_wait_for_vblank(dev, intel_crtc->pipe);

	return crtc;
	return true;
}

void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder,
+4 −4
Original line number Diff line number Diff line
@@ -291,7 +291,7 @@ int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
				struct drm_file *file_priv);
extern void intel_wait_for_vblank(struct drm_device *dev, int pipe);
extern void intel_wait_for_pipe_off(struct drm_device *dev, int pipe);
extern struct drm_crtc *intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
extern bool intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
				       struct drm_connector *connector,
				       struct drm_display_mode *mode,
				       int *dpms_mode);
+2 −4
Original line number Diff line number Diff line
@@ -1361,12 +1361,10 @@ intel_tv_detect(struct drm_connector *connector, bool force)
	if (intel_tv->base.base.crtc && intel_tv->base.base.crtc->enabled) {
		type = intel_tv_detect_type(intel_tv, connector);
	} else if (force) {
		struct drm_crtc *crtc;
		int dpms_mode;

		crtc = intel_get_load_detect_pipe(&intel_tv->base, connector,
						  &mode, &dpms_mode);
		if (crtc) {
		if (intel_get_load_detect_pipe(&intel_tv->base, connector,
					       &mode, &dpms_mode)) {
			type = intel_tv_detect_type(intel_tv, connector);
			intel_release_load_detect_pipe(&intel_tv->base, connector,
						       dpms_mode);