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

Commit 625e63e2 authored by Andrzej Hajda's avatar Andrzej Hajda Committed by Inki Dae
Browse files

drm/exynos/hdmi: fix pipeline disable order



Hardware require that MIXER(crtc) should be disabled prior to
HDMI(encoder). It was achieved by disabling crtc from encoder disable
callback, bypassing drm core. As a result drm core tried to call vblank
related routines on disabled crtc. The patch fixes it by simplifying
hdmi_disable routine - now it only cancels hotplug worker. Hardware will
be disabled in proper moment during pipe clock disable.

Signed-off-by: default avatarAndrzej Hajda <a.hajda@samsung.com>
Signed-off-by: default avatarInki Dae <inki.dae@samsung.com>
parent b2adc530
Loading
Loading
Loading
Loading
+3 −10
Original line number Diff line number Diff line
@@ -1486,8 +1486,6 @@ static void hdmi_enable(struct drm_encoder *encoder)
static void hdmi_disable(struct drm_encoder *encoder)
{
	struct hdmi_context *hdata = encoder_to_hdmi(encoder);
	struct drm_crtc *crtc = encoder->crtc;
	const struct drm_crtc_helper_funcs *funcs = NULL;

	if (!hdata->powered)
		return;
@@ -1498,16 +1496,11 @@ static void hdmi_disable(struct drm_encoder *encoder)
	 * to disable TV Subsystem should be as following,
	 *	VP -> Mixer -> HDMI
	 *
	 * Below codes will try to disable Mixer and VP(if used)
	 * prior to disabling HDMI.
	 * To achieve such sequence HDMI is disabled together with HDMI PHY, via
	 * pipe clock callback.
	 */
	if (crtc)
		funcs = crtc->helper_private;
	if (funcs && funcs->disable)
		(*funcs->disable)(crtc);

	cec_notifier_set_phys_addr(hdata->notifier, CEC_PHYS_ADDR_INVALID);
	cancel_delayed_work(&hdata->hotplug_work);
	cec_notifier_set_phys_addr(hdata->notifier, CEC_PHYS_ADDR_INVALID);

	hdmiphy_disable(hdata);
}