diff options
author | Dave Airlie <airlied@redhat.com> | 2012-02-20 14:16:40 +0000 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2012-03-15 13:35:32 +0000 |
commit | cbc7e22151d99ed1dd7649d268ad3d81b9e6255a (patch) | |
tree | 18ea223883722b1e7b6691f452df640d0775e4d2 | |
parent | 1828fe6c5f593b835197edd30a28d80635238ab3 (diff) | |
download | op-kernel-dev-cbc7e22151d99ed1dd7649d268ad3d81b9e6255a.zip op-kernel-dev-cbc7e22151d99ed1dd7649d268ad3d81b9e6255a.tar.gz |
drm/modeset: add helper to unplug all connectors from sysfs
In order to get correct ordering at hot-unplug for userspace,
we need to tear down all the sysfs bits at the correct time.
This adds a helper to allow drivers to remove the sysfs nodes
for all connectors.
Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r-- | drivers/gpu/drm/drm_crtc.c | 17 | ||||
-rw-r--r-- | include/drm/drm_crtc.h | 2 |
2 files changed, 16 insertions, 3 deletions
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index d2d9dc5..7990283 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -540,10 +540,21 @@ void drm_connector_cleanup(struct drm_connector *connector) } EXPORT_SYMBOL(drm_connector_cleanup); +void drm_connector_unplug_all(struct drm_device *dev) +{ + struct drm_connector *connector; + + /* taking the mode config mutex ends up in a clash with sysfs */ + list_for_each_entry(connector, &dev->mode_config.connector_list, head) + drm_sysfs_connector_remove(connector); + +} +EXPORT_SYMBOL(drm_connector_unplug_all); + int drm_encoder_init(struct drm_device *dev, - struct drm_encoder *encoder, - const struct drm_encoder_funcs *funcs, - int encoder_type) + struct drm_encoder *encoder, + const struct drm_encoder_funcs *funcs, + int encoder_type) { int ret; diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index 9595c2c..3401761 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -826,6 +826,8 @@ extern int drm_connector_init(struct drm_device *dev, int connector_type); extern void drm_connector_cleanup(struct drm_connector *connector); +/* helper to unplug all connectors from sysfs for device */ +extern void drm_connector_unplug_all(struct drm_device *dev); extern int drm_encoder_init(struct drm_device *dev, struct drm_encoder *encoder, |