Message ID | 20211018084707.32253-6-contact@emersion.fr (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm: add per-connector hotplug events | expand |
On Mon, Oct 18, 2021 at 08:47:30AM +0000, Simon Ser wrote: > If an hotplug event only updates a single connector, use > drm_kms_helper_connector_hotplug_event instead of > drm_kms_helper_hotplug_event. > > Changes in v4: > - Simplify loop logic (Ville, Sam) > - Update drm_connector_helper_hpd_irq_event (Maxime) > > Signed-off-by: Simon Ser <contact@emersion.fr> > Cc: Ville Syrjala <ville.syrjala@linux.intel.com> > Cc: Sam Ravnborg <sam@ravnborg.org> > Cc: Maxime Ripard <maxime@cerno.tech> Reviewed-by: Maxime Ripard <maxime@cerno.tech> Thanks! Maxime
Hi Simon, On Mon, Oct 18, 2021 at 08:47:30AM +0000, Simon Ser wrote: > If an hotplug event only updates a single connector, use > drm_kms_helper_connector_hotplug_event instead of > drm_kms_helper_hotplug_event. > > Changes in v4: > - Simplify loop logic (Ville, Sam) > - Update drm_connector_helper_hpd_irq_event (Maxime) > > Signed-off-by: Simon Ser <contact@emersion.fr> > Cc: Ville Syrjala <ville.syrjala@linux.intel.com> > Cc: Sam Ravnborg <sam@ravnborg.org> > Cc: Maxime Ripard <maxime@cerno.tech> Thanks, I like this better. Reviewed-by: Sam Ravnborg <sam@ravnborg.org> Maybe I am late and this was already applied... Sam
diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c index 3aef3b188c99..682359512996 100644 --- a/drivers/gpu/drm/drm_probe_helper.c +++ b/drivers/gpu/drm/drm_probe_helper.c @@ -888,7 +888,7 @@ bool drm_connector_helper_hpd_irq_event(struct drm_connector *connector) mutex_unlock(&dev->mode_config.mutex); if (changed) { - drm_kms_helper_hotplug_event(dev); + drm_kms_helper_connector_hotplug_event(connector); drm_dbg_kms(dev, "[CONNECTOR:%d:%s] Sent hotplug event\n", connector->base.id, connector->name); @@ -927,9 +927,9 @@ EXPORT_SYMBOL(drm_connector_helper_hpd_irq_event); */ bool drm_helper_hpd_irq_event(struct drm_device *dev) { - struct drm_connector *connector; + struct drm_connector *connector, *first_changed_connector = NULL; struct drm_connector_list_iter conn_iter; - bool changed = false; + int changed = 0; if (!dev->mode_config.poll_enabled) return false; @@ -941,16 +941,25 @@ bool drm_helper_hpd_irq_event(struct drm_device *dev) if (!(connector->polled & DRM_CONNECTOR_POLL_HPD)) continue; - if (check_connector_changed(connector)) - changed = true; + if (check_connector_changed(connector)) { + if (!first_changed_connector) { + drm_connector_get(connector); + first_changed_connector = connector; + } + + changed++; + } } drm_connector_list_iter_end(&conn_iter); mutex_unlock(&dev->mode_config.mutex); - if (changed) { + if (changed == 1) + drm_kms_helper_connector_hotplug_event(first_changed_connector); + else if (changed > 0) drm_kms_helper_hotplug_event(dev); - DRM_DEBUG_KMS("Sent hotplug event\n"); - } + + if (first_changed_connector) + drm_connector_put(first_changed_connector); return changed; }
If an hotplug event only updates a single connector, use drm_kms_helper_connector_hotplug_event instead of drm_kms_helper_hotplug_event. Changes in v4: - Simplify loop logic (Ville, Sam) - Update drm_connector_helper_hpd_irq_event (Maxime) Signed-off-by: Simon Ser <contact@emersion.fr> Cc: Ville Syrjala <ville.syrjala@linux.intel.com> Cc: Sam Ravnborg <sam@ravnborg.org> Cc: Maxime Ripard <maxime@cerno.tech> --- drivers/gpu/drm/drm_probe_helper.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-)