[Intel-gfx] [PATCH] drm/i915: cache the EDID for eDP panels

Chris Wilson chris at chris-wilson.co.uk
Fri Jun 15 12:55:15 CEST 2012


On Fri, 15 Jun 2012 13:52:04 +0300, Jani Nikula <jani.nikula at linux.intel.com> wrote:
> On Fri, 15 Jun 2012, Chris Wilson <chris at chris-wilson.co.uk> wrote:
> > They aren't going anywhere, and probing on DDC can cause the panel to
> > blank briefly, so read them up front and cache them for later queries.
> >
> > Jesse's patch revamped. Gotta love those display_info.raw_edid = NULL!
> > ---
> >  drivers/gpu/drm/i915/intel_dp.c    |   48 +++++++++++++++++++++++++++---------
> >  drivers/gpu/drm/i915/intel_drv.h   |    1 +
> >  drivers/gpu/drm/i915/intel_modes.c |   24 ++++++++++++------
> >  3 files changed, 54 insertions(+), 19 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> > index eb57ec7..207e25f 100644
> > --- a/drivers/gpu/drm/i915/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > @@ -67,6 +67,7 @@ struct intel_dp {
> >  	struct drm_display_mode *panel_fixed_mode;  /* for eDP */
> >  	struct delayed_work panel_vdd_work;
> >  	bool want_panel_vdd;
> > +	struct edid *edid; /* cached for eDP */
> >  };
> >  
> >  /**
> > @@ -2095,26 +2096,50 @@ g4x_dp_detect(struct intel_dp *intel_dp)
> >  }
> >  
> >  static struct edid *
> > -intel_dp_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter)
> > +_drm_edid_duplicate(struct edid *edid)
> > +{
> > +	struct edid *copy;
> > +	int size;
> > +
> > +	if (edid == NULL)
> > +		return NULL;
> > +
> > +	size = EDID_LENGTH * (1 + edid->extensions);
> > +	*copy = kmalloc(size, GFP_KERNEL);
> 
> You may want to remove that '*' there...

And free the cached edid upon destroy. :)
Mainly seeing if I could convince Jesse that we could do a nice patch
for -fixes.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre



More information about the Intel-gfx mailing list