From: Paul Kocialkowski <paul.kocialkowski@linux.intel.com>
To: Daniel Vetter <daniel@ffwll.ch>
Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
intel-gfx@lists.freedesktop.org,
Daniel Vetter <daniel.vetter@intel.com>
Subject: Re: [PATCH 1/2] drm/edid: Add helper to detect whether EDID changed
Date: Tue, 25 Jul 2017 10:25:44 +0300 [thread overview]
Message-ID: <1500967544.1277.1.camel@linux.intel.com> (raw)
In-Reply-To: <20170725065328.fhe75lpunqn7vcqv@phenom.ffwll.local>
On Tue, 2017-07-25 at 08:53 +0200, Daniel Vetter wrote:
> On Mon, Jul 24, 2017 at 05:54:46PM +0300, Paul Kocialkowski wrote:
> > This adds a common drm helper to detect whether the EDID changed
> > from
> > the last known cached one. This is useful help detect that a monitor
> > was
> > changed during a suspend/resume cycle.
> >
> > When that happens (a monitor is replaced by another one during
> > suspend),
> > no hotplug event will be triggered so the change will not be caught
> > at
> > resume time. Detecting that the EDID changed allows detecting it.
> >
> > Signed-off-by: Paul Kocialkowski <paul.kocialkowski@linux.intel.com>
>
> I can't find the older mails I've typed about this, but the plan we've
> discussed a while back was:
> - Add a generational counter to each connector, maybe even expose it
> to
> userspace.
>
> - Increment that counter every time something changed, e.g.
> connector->status in the propbe helpers, or when attaching a new
> edid
> with the set_edid helper.
>
> - Tada, no changes needed to drivers, and easily extensible to other
> things than edid!
I don't see how it solves the problem here though. After a
suspend/resume cycle, there is simply no indication that anything has
changed when a monitor was replaced by another one, so I don't see how
adding a counter in the mix would help.
Could you provide more details about the reasoning? I feel like I'm
missing something here.
Cheers,
Paul
> > ---
> > drivers/gpu/drm/drm_edid.c | 45
> > +++++++++++++++++++++++++++++++++++++++++++++
> > include/drm/drm_edid.h | 3 +++
> > 2 files changed, 48 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> > index 6bb6337be920..f6ce8bc2907a 100644
> > --- a/drivers/gpu/drm/drm_edid.c
> > +++ b/drivers/gpu/drm/drm_edid.c
> > @@ -5036,3 +5036,48 @@ static void drm_get_displayid(struct
> > drm_connector *connector,
> > }
> > return;
> > }
> > +
> > +/**
> > + * drm_check_edid_changed - Check whether the EDID changed since
> > the last update
> > + * @connector: connector we're probing
> > + * @adapter: I2C adapter to use for DDC
> > + *
> > + * Check whether the EDID changed since the last time it was
> > updated in the
> > + * drm blob cache.
> > + *
> > + * Return: A boolean indicating whether a change happened or not.
> > + */
> > +bool drm_check_edid_changed(struct drm_connector *connector,
> > + struct i2c_adapter *adapter)
> > +{
> > + struct drm_property_blob *edid_blob;
> > + struct edid *edid_stored;
> > + struct edid *edid_read;
> > + int ret = 0;
> > +
> > + if (!connector->edid_blob_ptr)
> > + return false;
> > +
> > + edid_blob = drm_property_blob_get(connector-
> > >edid_blob_ptr);
> > + if (!edid_blob)
> > + return false;
> > +
> > + if (!edid_blob->data || edid_blob->length != sizeof(struct
> > edid))
> > + goto out;
> > +
> > + edid_stored = (struct edid *) edid_blob->data;
> > +
> > + edid_read = drm_get_edid(connector, adapter);
> > + if (!edid_read)
> > + goto out;
> > +
> > + ret = memcmp(edid_stored, edid_read, sizeof(struct edid));
> > +
> > + kfree(edid_read);
> > +
> > +out:
> > + drm_property_blob_put(edid_blob);
> > +
> > + return ret != 0;
> > +}
> > +EXPORT_SYMBOL_GPL(drm_check_edid_changed);
> > diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h
> > index 1e1908a6b1d6..593a97b269c3 100644
> > --- a/include/drm/drm_edid.h
> > +++ b/include/drm/drm_edid.h
> > @@ -485,4 +485,7 @@ void drm_edid_get_monitor_name(struct edid
> > *edid, char *name,
> > struct drm_display_mode *drm_mode_find_dmt(struct drm_device *dev,
> > int hsize, int vsize,
> > int fresh,
> > bool rb);
> > +bool drm_check_edid_changed(struct drm_connector *connector,
> > + struct i2c_adapter *adapter);
> > +
> > #endif /* __DRM_EDID_H__ */
> > --
> > 2.13.2
> >
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
>
--
Paul Kocialkowski <paul.kocialkowski@linux.intel.com>
Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo, Finland
next prev parent reply other threads:[~2017-07-25 7:25 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-24 14:54 [PATCH 1/2] drm/edid: Add helper to detect whether EDID changed Paul Kocialkowski
2017-07-24 14:54 ` Paul Kocialkowski
2017-07-24 14:54 ` [PATCH 2/2] drm/i915: Detect monitor change from EDID change after resume Paul Kocialkowski
2017-07-24 14:54 ` Paul Kocialkowski
2017-07-24 16:00 ` [PATCH 1/2] drm/edid: Add helper to detect whether EDID changed Harry Wentland
2017-07-24 16:11 ` ✗ Fi.CI.BAT: warning for series starting with [1/2] " Patchwork
2017-07-25 6:53 ` [PATCH 1/2] " Daniel Vetter
2017-07-25 6:53 ` Daniel Vetter
2017-07-25 7:25 ` Paul Kocialkowski [this message]
2017-07-25 7:34 ` Daniel Vetter
2017-07-25 7:34 ` Daniel Vetter
2017-07-25 7:58 ` Paul Kocialkowski
2017-07-25 7:58 ` Paul Kocialkowski
2017-07-25 8:16 ` Daniel Vetter
2017-07-25 12:18 ` Paul Kocialkowski
2017-07-25 15:50 ` Daniel Vetter
2017-07-26 15:09 ` Paul Kocialkowski
2017-07-26 15:09 ` Paul Kocialkowski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1500967544.1277.1.camel@linux.intel.com \
--to=paul.kocialkowski@linux.intel.com \
--cc=daniel.vetter@intel.com \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.