Commit 54d2c2da authored by Alexey Brodkin's avatar Alexey Brodkin Committed by Daniel Vetter

drm: Introduce drm_connector_register_all() helper

As a pair to already existing drm_connector_unregister_all() we're adding
generic implementation of what is already done in some drivers.

Once this helper is implemented we'll be ready to switch existing
driver-specific implementations with the generic one.
Signed-off-by: default avatarAlexey Brodkin <abrodkin@synopsys.com>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: David Airlie <airlied@linux.ie>
Cc: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1461068693-11260-2-git-send-email-abrodkin@synopsys.com
parent 644a8050
...@@ -1067,6 +1067,46 @@ void drm_connector_unregister(struct drm_connector *connector) ...@@ -1067,6 +1067,46 @@ void drm_connector_unregister(struct drm_connector *connector)
} }
EXPORT_SYMBOL(drm_connector_unregister); EXPORT_SYMBOL(drm_connector_unregister);
/**
* drm_connector_register_all - register all connectors
* @dev: drm device
*
* This function registers all connectors in sysfs and other places so that
* userspace can start to access them. Drivers can call it after calling
* drm_dev_register() to complete the device registration, if they don't call
* drm_connector_register() on each connector individually.
*
* When a device is unplugged and should be removed from userspace access,
* call drm_connector_unregister_all(), which is the inverse of this
* function.
*
* Returns:
* Zero on success, error code on failure.
*/
int drm_connector_register_all(struct drm_device *dev)
{
struct drm_connector *connector;
int ret;
mutex_lock(&dev->mode_config.mutex);
drm_for_each_connector(connector, dev) {
ret = drm_connector_register(connector);
if (ret)
goto err;
}
mutex_unlock(&dev->mode_config.mutex);
return 0;
err:
mutex_unlock(&dev->mode_config.mutex);
drm_connector_unregister_all(dev);
return ret;
}
EXPORT_SYMBOL(drm_connector_register_all);
/** /**
* drm_connector_unregister_all - unregister connector userspace interfaces * drm_connector_unregister_all - unregister connector userspace interfaces
* @dev: drm device * @dev: drm device
......
...@@ -715,7 +715,11 @@ EXPORT_SYMBOL(drm_dev_unref); ...@@ -715,7 +715,11 @@ EXPORT_SYMBOL(drm_dev_unref);
* *
* Register the DRM device @dev with the system, advertise device to user-space * Register the DRM device @dev with the system, advertise device to user-space
* and start normal device operation. @dev must be allocated via drm_dev_alloc() * and start normal device operation. @dev must be allocated via drm_dev_alloc()
* previously. * previously. Right after drm_dev_register() the driver should call
* drm_connector_register_all() to register all connectors in sysfs. This is
* a separate call for backward compatibility with drivers still using
* the deprecated ->load() callback, where connectors are registered from within
* the ->load() callback.
* *
* Never call this twice on any device! * Never call this twice on any device!
* *
......
...@@ -2249,7 +2249,8 @@ static inline unsigned drm_connector_index(struct drm_connector *connector) ...@@ -2249,7 +2249,8 @@ static inline unsigned drm_connector_index(struct drm_connector *connector)
return connector->connector_id; return connector->connector_id;
} }
/* helper to unregister all connectors from sysfs for device */ /* helpers to {un}register all connectors from sysfs for device */
extern int drm_connector_register_all(struct drm_device *dev);
extern void drm_connector_unregister_all(struct drm_device *dev); extern void drm_connector_unregister_all(struct drm_device *dev);
extern int drm_bridge_add(struct drm_bridge *bridge); extern int drm_bridge_add(struct drm_bridge *bridge);
......
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