mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-29 23:53:32 +00:00
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: Andrzej Hajda <a.hajda@samsung.com> Signed-off-by: Inki Dae <inki.dae@samsung.com>
This commit is contained in:
parent
b2adc53075
commit
625e63e27c
1 changed files with 3 additions and 10 deletions
|
@ -1486,8 +1486,6 @@ static void hdmi_enable(struct drm_encoder *encoder)
|
||||||
static void hdmi_disable(struct drm_encoder *encoder)
|
static void hdmi_disable(struct drm_encoder *encoder)
|
||||||
{
|
{
|
||||||
struct hdmi_context *hdata = encoder_to_hdmi(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)
|
if (!hdata->powered)
|
||||||
return;
|
return;
|
||||||
|
@ -1498,16 +1496,11 @@ static void hdmi_disable(struct drm_encoder *encoder)
|
||||||
* to disable TV Subsystem should be as following,
|
* to disable TV Subsystem should be as following,
|
||||||
* VP -> Mixer -> HDMI
|
* VP -> Mixer -> HDMI
|
||||||
*
|
*
|
||||||
* Below codes will try to disable Mixer and VP(if used)
|
* To achieve such sequence HDMI is disabled together with HDMI PHY, via
|
||||||
* prior to disabling HDMI.
|
* 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);
|
cancel_delayed_work(&hdata->hotplug_work);
|
||||||
|
cec_notifier_set_phys_addr(hdata->notifier, CEC_PHYS_ADDR_INVALID);
|
||||||
|
|
||||||
hdmiphy_disable(hdata);
|
hdmiphy_disable(hdata);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue