mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 08:44:41 +00:00 
			
		
		
		
	drm/i915: use staged outuput config in tv->mode_fixup
The "is this encoder cloned" check will be reused by the lvds encoder, hence exract it. v2: Be a bit more careful about that we need to check the new, staged ouput configuration in the check_non_cloned helper ... v3: Kill the double negation with s/!non_cloned/is_cloned/, suggested by Jesse Barnes. Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
		
							parent
							
								
									7758a11340
								
							
						
					
					
						commit
						6ed0f796c2
					
				
					 3 changed files with 25 additions and 5 deletions
				
			
		|  | @ -6563,6 +6563,28 @@ static struct drm_crtc_helper_funcs intel_helper_funcs = { | ||||||
| 	.disable = intel_crtc_disable, | 	.disable = intel_crtc_disable, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | bool intel_encoder_check_is_cloned(struct intel_encoder *encoder) | ||||||
|  | { | ||||||
|  | 	struct intel_encoder *other_encoder; | ||||||
|  | 	struct drm_crtc *crtc = &encoder->new_crtc->base; | ||||||
|  | 
 | ||||||
|  | 	if (WARN_ON(!crtc)) | ||||||
|  | 		return false; | ||||||
|  | 
 | ||||||
|  | 	list_for_each_entry(other_encoder, | ||||||
|  | 			    &crtc->dev->mode_config.encoder_list, | ||||||
|  | 			    base.head) { | ||||||
|  | 
 | ||||||
|  | 		if (&other_encoder->new_crtc->base != crtc || | ||||||
|  | 		    encoder == other_encoder) | ||||||
|  | 			continue; | ||||||
|  | 		else | ||||||
|  | 			return true; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return false; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| static bool intel_encoder_crtc_ok(struct drm_encoder *encoder, | static bool intel_encoder_crtc_ok(struct drm_encoder *encoder, | ||||||
| 				  struct drm_crtc *crtc) | 				  struct drm_crtc *crtc) | ||||||
| { | { | ||||||
|  |  | ||||||
|  | @ -454,6 +454,7 @@ extern void intel_crtc_update_dpms(struct drm_crtc *crtc); | ||||||
| extern void intel_encoder_disable(struct drm_encoder *encoder); | extern void intel_encoder_disable(struct drm_encoder *encoder); | ||||||
| extern void intel_encoder_destroy(struct drm_encoder *encoder); | extern void intel_encoder_destroy(struct drm_encoder *encoder); | ||||||
| extern void intel_encoder_dpms(struct intel_encoder *encoder, int mode); | extern void intel_encoder_dpms(struct intel_encoder *encoder, int mode); | ||||||
|  | extern bool intel_encoder_check_is_cloned(struct intel_encoder *encoder); | ||||||
| extern void intel_connector_dpms(struct drm_connector *, int mode); | extern void intel_connector_dpms(struct drm_connector *, int mode); | ||||||
| extern bool intel_connector_get_hw_state(struct intel_connector *connector); | extern bool intel_connector_get_hw_state(struct intel_connector *connector); | ||||||
| extern void intel_connector_check_state(struct intel_connector *); | extern void intel_connector_check_state(struct intel_connector *); | ||||||
|  |  | ||||||
|  | @ -910,16 +910,13 @@ intel_tv_mode_fixup(struct drm_encoder *encoder, | ||||||
| 		    const struct drm_display_mode *mode, | 		    const struct drm_display_mode *mode, | ||||||
| 		    struct drm_display_mode *adjusted_mode) | 		    struct drm_display_mode *adjusted_mode) | ||||||
| { | { | ||||||
| 	struct drm_device *dev = encoder->dev; |  | ||||||
| 	struct intel_tv *intel_tv = enc_to_intel_tv(encoder); | 	struct intel_tv *intel_tv = enc_to_intel_tv(encoder); | ||||||
| 	const struct tv_mode *tv_mode = intel_tv_mode_find(intel_tv); | 	const struct tv_mode *tv_mode = intel_tv_mode_find(intel_tv); | ||||||
| 	struct intel_encoder *other_encoder; |  | ||||||
| 
 | 
 | ||||||
| 	if (!tv_mode) | 	if (!tv_mode) | ||||||
| 		return false; | 		return false; | ||||||
| 
 | 
 | ||||||
| 	for_each_encoder_on_crtc(dev, encoder->crtc, other_encoder) | 	if (intel_encoder_check_is_cloned(&intel_tv->base)) | ||||||
| 		if (&other_encoder->base != encoder) |  | ||||||
| 		return false; | 		return false; | ||||||
| 
 | 
 | ||||||
| 	adjusted_mode->clock = tv_mode->clock; | 	adjusted_mode->clock = tv_mode->clock; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Daniel Vetter
						Daniel Vetter