mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02: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)
 | 
			
		||||
{
 | 
			
		||||
	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);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue