diff options
Diffstat (limited to 'drivers/gpu/drm/drm_probe_helper.c')
-rw-r--r-- | drivers/gpu/drm/drm_probe_helper.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c index f6b64d7d3528..ac953f037be7 100644 --- a/drivers/gpu/drm/drm_probe_helper.c +++ b/drivers/gpu/drm/drm_probe_helper.c @@ -152,6 +152,14 @@ void drm_kms_helper_poll_enable_locked(struct drm_device *dev) } EXPORT_SYMBOL(drm_kms_helper_poll_enable_locked); +static enum drm_connector_status +drm_connector_detect(struct drm_connector *connector, bool force) +{ + return connector->funcs->detect ? + connector->funcs->detect(connector, force) : + connector_status_connected; +} + /** * drm_helper_probe_single_connector_modes - get complete set of display modes * @connector: connector to probe @@ -239,7 +247,7 @@ int drm_helper_probe_single_connector_modes(struct drm_connector *connector, if (connector->funcs->force) connector->funcs->force(connector); } else { - connector->status = connector->funcs->detect(connector, true); + connector->status = drm_connector_detect(connector, true); } /* @@ -384,7 +392,11 @@ static void output_poll_execute(struct work_struct *work) if (!drm_kms_helper_poll) goto out; - mutex_lock(&dev->mode_config.mutex); + if (!mutex_trylock(&dev->mode_config.mutex)) { + repoll = true; + goto out; + } + drm_for_each_connector(connector, dev) { /* Ignore forced connectors. */ @@ -405,7 +417,7 @@ static void output_poll_execute(struct work_struct *work) repoll = true; - connector->status = connector->funcs->detect(connector, false); + connector->status = drm_connector_detect(connector, false); if (old_status != connector->status) { const char *old, *new; @@ -565,7 +577,7 @@ bool drm_helper_hpd_irq_event(struct drm_device *dev) old_status = connector->status; - connector->status = connector->funcs->detect(connector, false); + connector->status = drm_connector_detect(connector, false); DRM_DEBUG_KMS("[CONNECTOR:%d:%s] status updated from %s to %s\n", connector->base.id, connector->name, |