/** * drm_client_dev_unregister - Unregister clients * @dev: DRM device * * This function releases all clients by calling each client's * &drm_client_funcs.unregister callback. The callback function * is responsibe for releaseing all resources including the client * itself. * * The helper drm_dev_unregister() calls this function. Drivers * that use it don't need to call this function themselves.
*/ void drm_client_dev_unregister(struct drm_device *dev)
{ struct drm_client_dev *client, *tmp;
if (!drm_core_check_feature(dev, DRIVER_MODESET)) return;
if (!client->funcs || !client->funcs->hotplug) return;
if (client->hotplug_failed) return;
if (client->suspended) {
client->hotplug_pending = true; return;
}
client->hotplug_pending = false;
ret = client->funcs->hotplug(client);
drm_dbg_kms(dev, "%s: ret=%d\n", client->name, ret); if (ret)
client->hotplug_failed = true;
}
/** * drm_client_dev_hotplug - Send hotplug event to clients * @dev: DRM device * * This function calls the &drm_client_funcs.hotplug callback on the attached clients. * * drm_kms_helper_hotplug_event() calls this function, so drivers that use it * don't need to call this function themselves.
*/ void drm_client_dev_hotplug(struct drm_device *dev)
{ struct drm_client_dev *client;
if (!drm_core_check_feature(dev, DRIVER_MODESET)) return;
if (!dev->mode_config.num_connector) {
drm_dbg_kms(dev, "No connectors found, will not send hotplug events!\n"); return;
}
void drm_client_dev_restore(struct drm_device *dev)
{ struct drm_client_dev *client; int ret;
if (!drm_core_check_feature(dev, DRIVER_MODESET)) return;
mutex_lock(&dev->clientlist_mutex);
list_for_each_entry(client, &dev->clientlist, list) { if (!client->funcs || !client->funcs->restore) continue;
ret = client->funcs->restore(client);
drm_dbg_kms(dev, "%s: ret=%d\n", client->name, ret); if (!ret) /* The first one to return zero gets the privilege to restore */ break;
}
mutex_unlock(&dev->clientlist_mutex);
}
staticint drm_client_suspend(struct drm_client_dev *client, bool holds_console_lock)
{ struct drm_device *dev = client->dev; int ret = 0;
if (drm_WARN_ON_ONCE(dev, client->suspended)) return 0;
if (client->funcs && client->funcs->suspend)
ret = client->funcs->suspend(client, holds_console_lock);
drm_dbg_kms(dev, "%s: ret=%d\n", client->name, ret);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.