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

drm/i915: Add an encoder .shutdown() hook



Add a new encoder hook .shutdown() which will get called at the end
of the pci .shutdown() hook. We shall use this to deal with the
panel power cycle delay issues.

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


Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
parent fe0f1e3b
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -214,6 +214,11 @@ struct intel_encoder {
	 * device interrupts are disabled.
	 */
	void (*suspend)(struct intel_encoder *);
	/*
	 * Called during system reboot/shutdown after all the
	 * encoders have been disabled and suspended.
	 */
	void (*shutdown)(struct intel_encoder *encoder);
	enum hpd_pin hpd_pin;
	enum intel_display_power_domain power_domain;
	/* for communication with audio component; protected by av_mutex */
+13 −0
Original line number Diff line number Diff line
@@ -1037,6 +1037,18 @@ static void intel_suspend_encoders(struct drm_i915_private *dev_priv)
	drm_modeset_unlock_all(dev);
}

static void intel_shutdown_encoders(struct drm_i915_private *dev_priv)
{
	struct drm_device *dev = &dev_priv->drm;
	struct intel_encoder *encoder;

	drm_modeset_lock_all(dev);
	for_each_intel_encoder(dev, encoder)
		if (encoder->shutdown)
			encoder->shutdown(encoder);
	drm_modeset_unlock_all(dev);
}

void i915_driver_shutdown(struct drm_i915_private *i915)
{
	i915_gem_suspend(i915);
@@ -1051,6 +1063,7 @@ void i915_driver_shutdown(struct drm_i915_private *i915)
	intel_hpd_cancel_work(i915);

	intel_suspend_encoders(i915);
	intel_shutdown_encoders(i915);
}

static bool suspend_to_idle(struct drm_i915_private *dev_priv)