Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 959fdabe authored by Dhaval Patel's avatar Dhaval Patel
Browse files

drm/msm/sde: unregister the backlight node on connector destroy



A backlight node must be unregistered on connector
destroy to avoid invalid backlight update through debugfs
entry.

Change-Id: I69de93ab6758c78d1a757ac93882f6fe5b80fe08
Signed-off-by: default avatarDhaval Patel <pdhaval@codeaurora.org>
parent 5a186617
Loading
Loading
Loading
Loading
+7 −4
Original line number Original line Diff line number Diff line
@@ -12,6 +12,7 @@


#define pr_fmt(fmt)	"[drm:%s:%d] " fmt, __func__, __LINE__
#define pr_fmt(fmt)	"[drm:%s:%d] " fmt, __func__, __LINE__
#include "msm_drv.h"
#include "msm_drv.h"
#include "sde_dbg.h"


#include "sde_kms.h"
#include "sde_kms.h"
#include "sde_connector.h"
#include "sde_connector.h"
@@ -107,7 +108,6 @@ static const struct backlight_ops sde_backlight_device_ops = {
static int sde_backlight_setup(struct sde_connector *c_conn,
static int sde_backlight_setup(struct sde_connector *c_conn,
					struct drm_device *dev)
					struct drm_device *dev)
{
{
	struct backlight_device *bl_device;
	struct backlight_properties props;
	struct backlight_properties props;
	struct dsi_display *display;
	struct dsi_display *display;
	struct dsi_backlight_config *bl_config;
	struct dsi_backlight_config *bl_config;
@@ -131,11 +131,12 @@ static int sde_backlight_setup(struct sde_connector *c_conn,
	props.brightness = bl_config->brightness_max_level;
	props.brightness = bl_config->brightness_max_level;
	snprintf(bl_node_name, BL_NODE_NAME_SIZE, "panel%u-backlight",
	snprintf(bl_node_name, BL_NODE_NAME_SIZE, "panel%u-backlight",
							display_count);
							display_count);
	bl_device = backlight_device_register(bl_node_name, dev->dev,
	c_conn->bl_device = backlight_device_register(bl_node_name, dev->dev,
			c_conn, &sde_backlight_device_ops, &props);
			c_conn, &sde_backlight_device_ops, &props);
	if (IS_ERR_OR_NULL(bl_device)) {
	if (IS_ERR_OR_NULL(c_conn->bl_device)) {
		SDE_ERROR("Failed to register backlight: %ld\n",
		SDE_ERROR("Failed to register backlight: %ld\n",
				    PTR_ERR(bl_device));
				    PTR_ERR(c_conn->bl_device));
		c_conn->bl_device = NULL;
		return -ENODEV;
		return -ENODEV;
	}
	}
	display_count++;
	display_count++;
@@ -502,6 +503,8 @@ static void sde_connector_destroy(struct drm_connector *connector)
		drm_property_unreference_blob(c_conn->blob_dither);
		drm_property_unreference_blob(c_conn->blob_dither);
	msm_property_destroy(&c_conn->property_info);
	msm_property_destroy(&c_conn->property_info);


	if (c_conn->bl_device)
		backlight_device_unregister(c_conn->bl_device);
	drm_connector_unregister(connector);
	drm_connector_unregister(connector);
	mutex_destroy(&c_conn->lock);
	mutex_destroy(&c_conn->lock);
	sde_fence_deinit(&c_conn->retire_fence);
	sde_fence_deinit(&c_conn->retire_fence);
+3 −0
Original line number Original line Diff line number Diff line
@@ -247,6 +247,7 @@ struct sde_connector_evt {
 * @fb_kmap: true if kernel mapping of framebuffer is requested
 * @fb_kmap: true if kernel mapping of framebuffer is requested
 * @event_table: Array of registered events
 * @event_table: Array of registered events
 * @event_lock: Lock object for event_table
 * @event_lock: Lock object for event_table
 * @bl_device: backlight device node
 */
 */
struct sde_connector {
struct sde_connector {
	struct drm_connector base;
	struct drm_connector base;
@@ -277,6 +278,8 @@ struct sde_connector {
	bool fb_kmap;
	bool fb_kmap;
	struct sde_connector_evt event_table[SDE_CONN_EVENT_COUNT];
	struct sde_connector_evt event_table[SDE_CONN_EVENT_COUNT];
	spinlock_t event_lock;
	spinlock_t event_lock;

	struct backlight_device *bl_device;
};
};


/**
/**