Commit 3b85641a authored by Simon Ser's avatar Simon Ser

drm/nouveau/disp: use drm_kms_helper_connector_hotplug_event()

This adds more information to the hotplug uevent and lets user-space
know that it's about a particular connector only.
Signed-off-by: default avatarSimon Ser <contact@emersion.fr>
Cc: Ben Skeggs <bskeggs@redhat.com>
Cc: Lyude Paul <lyude@redhat.com>
Cc: David Airlie <airlied@linux.ie>
Cc: Karol Herbst <kherbst@redhat.com>
Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230620181547.272476-1-contact@emersion.fr
parent 815d091f
...@@ -465,7 +465,8 @@ nouveau_display_hpd_work(struct work_struct *work) ...@@ -465,7 +465,8 @@ nouveau_display_hpd_work(struct work_struct *work)
struct drm_connector *connector; struct drm_connector *connector;
struct drm_connector_list_iter conn_iter; struct drm_connector_list_iter conn_iter;
u32 pending; u32 pending;
bool changed = false; int changed = 0;
struct drm_connector *first_changed_connector = NULL;
pm_runtime_get_sync(dev->dev); pm_runtime_get_sync(dev->dev);
...@@ -509,7 +510,12 @@ nouveau_display_hpd_work(struct work_struct *work) ...@@ -509,7 +510,12 @@ nouveau_display_hpd_work(struct work_struct *work)
if (old_epoch_counter == connector->epoch_counter) if (old_epoch_counter == connector->epoch_counter)
continue; continue;
changed = true; changed++;
if (!first_changed_connector) {
drm_connector_get(connector);
first_changed_connector = connector;
}
drm_dbg_kms(dev, "[CONNECTOR:%d:%s] status updated from %s to %s (epoch counter %llu->%llu)\n", drm_dbg_kms(dev, "[CONNECTOR:%d:%s] status updated from %s to %s (epoch counter %llu->%llu)\n",
connector->base.id, connector->name, connector->base.id, connector->name,
drm_get_connector_status_name(old_status), drm_get_connector_status_name(old_status),
...@@ -520,9 +526,14 @@ nouveau_display_hpd_work(struct work_struct *work) ...@@ -520,9 +526,14 @@ nouveau_display_hpd_work(struct work_struct *work)
drm_connector_list_iter_end(&conn_iter); drm_connector_list_iter_end(&conn_iter);
mutex_unlock(&dev->mode_config.mutex); 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_kms_helper_hotplug_event(dev);
if (first_changed_connector)
drm_connector_put(first_changed_connector);
pm_runtime_mark_last_busy(drm->dev->dev); pm_runtime_mark_last_busy(drm->dev->dev);
noop: noop:
pm_runtime_put_autosuspend(dev->dev); pm_runtime_put_autosuspend(dev->dev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment