diff options
Diffstat (limited to 'drivers/gpu/drm/drm_connector.c')
-rw-r--r-- | drivers/gpu/drm/drm_connector.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c index 799edd0d308e..f94be9adb32a 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -24,6 +24,7 @@ #include <drm/drm_connector.h> #include <drm/drm_edid.h> #include <drm/drm_encoder.h> +#include <drm/drm_backlight.h> #include "drm_crtc_internal.h" #include "drm_internal.h" @@ -323,6 +324,7 @@ void drm_connector_cleanup(struct drm_connector *connector) struct drm_device *dev = connector->dev; struct drm_display_mode *mode, *t; + drm_backlight_free(connector); /* The connector should have been removed from userspace long before * it is finally destroyed. */ @@ -383,6 +385,8 @@ int drm_connector_register(struct drm_connector *connector) if (connector->registered) goto unlock; + drm_backlight_register(connector->backlight); + ret = drm_sysfs_connector_add(connector); if (ret) goto unlock; @@ -422,6 +426,9 @@ EXPORT_SYMBOL(drm_connector_register); void drm_connector_unregister(struct drm_connector *connector) { mutex_lock(&connector->mutex); + + drm_backlight_unregister(connector->backlight); + if (!connector->registered) { mutex_unlock(&connector->mutex); return; @@ -1092,10 +1099,16 @@ int drm_mode_connector_set_obj_prop(struct drm_mode_object *obj, { int ret = -EINVAL; struct drm_connector *connector = obj_to_connector(obj); + struct drm_mode_config *config = &connector->dev->mode_config; /* Do DPMS ourselves */ if (property == connector->dev->mode_config.dpms_property) { ret = (*connector->funcs->dpms)(connector, (int)value); + } else if (property == config->brightness_property) { + if (connector->backlight) + drm_backlight_set_brightness(connector->backlight, + value); + ret = 0; } else if (connector->funcs->set_property) ret = connector->funcs->set_property(connector, property, value); |