121,6 → 121,8 |
poll = true; |
} |
|
if (poll) |
schedule_delayed_work(&dev->mode_config.output_poll_work, DRM_OUTPUT_POLL_PERIOD); |
} |
EXPORT_SYMBOL(drm_kms_helper_poll_enable_locked); |
|
157,7 → 159,31 |
old_status = connector->status; |
|
connector->status = connector->funcs->detect(connector, true); |
|
/* |
* Normally either the driver's hpd code or the poll loop should |
* pick up any changes and fire the hotplug event. But if |
* userspace sneaks in a probe, we might miss a change. Hence |
* check here, and if anything changed start the hotplug code. |
*/ |
if (old_status != connector->status) { |
DRM_DEBUG_KMS("[CONNECTOR:%d:%s] status updated from %d to %d\n", |
connector->base.id, |
connector->name, |
old_status, connector->status); |
|
/* |
* The hotplug event code might call into the fb |
* helpers, and so expects that we do not hold any |
* locks. Fire up the poll struct instead, it will |
* disable itself again. |
*/ |
dev->mode_config.delayed_event = true; |
if (dev->mode_config.poll_enabled) |
schedule_delayed_work(&dev->mode_config.output_poll_work, |
0); |
} |
} |
|
/* Re-enable polling in case the global poll config changed. */ |
if (drm_kms_helper_poll != dev->mode_config.poll_running) |
297,10 → 323,12 |
*/ |
void drm_kms_helper_hotplug_event(struct drm_device *dev) |
{ |
ENTER(); |
/* send a uevent + call fbdev */ |
// drm_sysfs_hotplug_event(dev); |
// if (dev->mode_config.funcs->output_poll_changed) |
// dev->mode_config.funcs->output_poll_changed(dev); |
drm_sysfs_hotplug_event(dev); |
if (dev->mode_config.funcs->output_poll_changed) |
dev->mode_config.funcs->output_poll_changed(dev); |
LEAVE(); |
} |
EXPORT_SYMBOL(drm_kms_helper_hotplug_event); |
|
377,9 → 405,12 |
|
mutex_unlock(&dev->mode_config.mutex); |
|
out:; |
out: |
if (changed) |
drm_kms_helper_hotplug_event(dev); |
|
|
if (repoll) |
schedule_delayed_work(delayed_work, DRM_OUTPUT_POLL_PERIOD); |
} |
|
/** |
396,7 → 427,7 |
{ |
if (!dev->mode_config.poll_enabled) |
return; |
// cancel_delayed_work_sync(&dev->mode_config.output_poll_work); |
cancel_delayed_work_sync(&dev->mode_config.output_poll_work); |
} |
EXPORT_SYMBOL(drm_kms_helper_poll_disable); |
|