diff options
Diffstat (limited to 'drivers/gpu/drm/drm_edid.c')
| -rw-r--r-- | drivers/gpu/drm/drm_edid.c | 12 | 
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index ece03fc2d38..5a18b0df828 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -149,8 +149,7 @@ EXPORT_SYMBOL(drm_edid_header_is_valid);   * Sanity check the EDID block (base or extension).  Return 0 if the block   * doesn't check out, or 1 if it's valid.   */ -static bool -drm_edid_block_valid(u8 *raw_edid) +bool drm_edid_block_valid(u8 *raw_edid)  {  	int i;  	u8 csum = 0; @@ -203,6 +202,7 @@ bad:  	}  	return 0;  } +EXPORT_SYMBOL(drm_edid_block_valid);  /**   * drm_edid_is_valid - sanity check EDID data @@ -226,7 +226,6 @@ bool drm_edid_is_valid(struct edid *edid)  }  EXPORT_SYMBOL(drm_edid_is_valid); -#define DDC_ADDR 0x50  #define DDC_SEGMENT_ADDR 0x30  /**   * Get EDID information via I2C. @@ -266,6 +265,11 @@ drm_do_probe_ddc_edid(struct i2c_adapter *adapter, unsigned char *buf,  			}  		};  		ret = i2c_transfer(adapter, msgs, 2); +		if (ret == -ENXIO) { +			DRM_DEBUG_KMS("drm: skipping non-existent adapter %s\n", +					adapter->name); +			break; +		}  	} while (ret != 2 && --retries);  	return ret == 2 ? 0 : -1; @@ -745,7 +749,7 @@ drm_mode_std(struct drm_connector *connector, struct edid *edid,  		 */  		mode = drm_gtf_mode(dev, hsize, vsize, vrefresh_rate, 0, 0);  		if (drm_mode_hsync(mode) > drm_gtf2_hbreak(edid)) { -			kfree(mode); +			drm_mode_destroy(dev, mode);  			mode = drm_gtf_mode_complex(dev, hsize, vsize,  						    vrefresh_rate, 0, 0,  						    drm_gtf2_m(edid),  |