drm/i915: Cache LVDS EDID
We assume that the panel is permenantly connected and that the EDID data is consistent from boot, so simply cache the whole EDID for the panel. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
		
					parent
					
						
							
								e9e5f8e8d3
							
						
					
				
			
			
				commit
				
					
						219adae138
					
				
			
		
					 1 changed files with 8 additions and 11 deletions
				
			
		|  | @ -44,7 +44,7 @@ | ||||||
| struct intel_lvds { | struct intel_lvds { | ||||||
| 	struct intel_encoder base; | 	struct intel_encoder base; | ||||||
| 
 | 
 | ||||||
| 	bool edid_good; | 	struct edid *edid; | ||||||
| 
 | 
 | ||||||
| 	int fitting_mode; | 	int fitting_mode; | ||||||
| 	u32 pfit_control; | 	u32 pfit_control; | ||||||
|  | @ -475,14 +475,12 @@ static int intel_lvds_get_modes(struct drm_connector *connector) | ||||||
| { | { | ||||||
| 	struct intel_lvds *intel_lvds = intel_attached_lvds(connector); | 	struct intel_lvds *intel_lvds = intel_attached_lvds(connector); | ||||||
| 	struct drm_device *dev = connector->dev; | 	struct drm_device *dev = connector->dev; | ||||||
| 	struct drm_i915_private *dev_priv = dev->dev_private; |  | ||||||
| 	struct drm_display_mode *mode; | 	struct drm_display_mode *mode; | ||||||
| 
 | 
 | ||||||
| 	if (intel_lvds->edid_good) { | 	if (intel_lvds->edid) { | ||||||
| 		int ret = intel_ddc_get_modes(connector, | 		drm_mode_connector_update_edid_property(connector, | ||||||
| 					      &dev_priv->gmbus[GMBUS_PORT_PANEL].adapter); | 							intel_lvds->edid); | ||||||
| 		if (ret) | 		return drm_add_edid_modes(connector, intel_lvds->edid); | ||||||
| 			return ret; |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	mode = drm_mode_duplicate(dev, intel_lvds->fixed_mode); | 	mode = drm_mode_duplicate(dev, intel_lvds->fixed_mode); | ||||||
|  | @ -906,11 +904,10 @@ void intel_lvds_init(struct drm_device *dev) | ||||||
| 	 * Attempt to get the fixed panel mode from DDC.  Assume that the | 	 * Attempt to get the fixed panel mode from DDC.  Assume that the | ||||||
| 	 * preferred mode is the right one. | 	 * preferred mode is the right one. | ||||||
| 	 */ | 	 */ | ||||||
| 	intel_lvds->edid_good = true; | 	intel_lvds->edid = drm_get_edid(connector, | ||||||
| 	if (!intel_ddc_get_modes(connector, &dev_priv->gmbus[GMBUS_PORT_PANEL].adapter)) | 					&dev_priv->gmbus[GMBUS_PORT_PANEL].adapter); | ||||||
| 		intel_lvds->edid_good = false; |  | ||||||
| 
 | 
 | ||||||
| 	if (!intel_lvds->edid_good) { | 	if (!intel_lvds->edid) { | ||||||
| 		/* Didn't get an EDID, so
 | 		/* Didn't get an EDID, so
 | ||||||
| 		 * Set wide sync ranges so we get all modes | 		 * Set wide sync ranges so we get all modes | ||||||
| 		 * handed to valid_mode for checking | 		 * handed to valid_mode for checking | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Chris Wilson
				Chris Wilson