From 08c40fb26e12f159f6cdd0563a51cecb99419fbe Mon Sep 17 00:00:00 2001 From: Jeykumar Sankaran Date: Fri, 25 Sep 2020 16:20:19 -0700 Subject: [PATCH] disp: msm: sde: allow backlight device registration for trusted vm Trusted VM can support dynamic backlight updates through DCS commands. Allow SDE to register for the backlight device only if the panel supports DCS backlight update mode. Note that thermal driver is disabled in trusted vm. So we are still avoiding registering with msm thermal driver. The backlight updates are only supported through backlight driver provided sysfs nodes. Change-Id: I9cd41d473445387c8bc9048d7e565d49124a36b7 Signed-off-by: Jeykumar Sankaran --- msm/sde/sde_connector.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/msm/sde/sde_connector.c b/msm/sde/sde_connector.c index cad8b112fa7a..f799d82b8a88 100644 --- a/msm/sde/sde_connector.c +++ b/msm/sde/sde_connector.c @@ -188,15 +188,16 @@ static int sde_backlight_setup(struct sde_connector *c_conn, return -EINVAL; sde_kms = to_sde_kms(priv->kms); - if (sde_in_trusted_vm(sde_kms)) + display = (struct dsi_display *) c_conn->display; + bl_config = &display->panel->bl_config; + + if (bl_config->type != DSI_BACKLIGHT_DCS && + sde_in_trusted_vm(sde_kms)) return 0; memset(&props, 0, sizeof(props)); props.type = BACKLIGHT_RAW; props.power = FB_BLANK_UNBLANK; - - display = (struct dsi_display *) c_conn->display; - bl_config = &display->panel->bl_config; props.max_brightness = bl_config->brightness_max_level; props.brightness = bl_config->brightness_max_level; snprintf(bl_node_name, BL_NODE_NAME_SIZE, "panel%u-backlight", @@ -210,6 +211,14 @@ static int sde_backlight_setup(struct sde_connector *c_conn, return -ENODEV; } c_conn->thermal_max_brightness = bl_config->brightness_max_level; + + /** + * In TVM, thermal cooling device is not enabled. Registering with dummy + * thermal device will return a NULL leading to a failure. So skip it. + */ + if (sde_in_trusted_vm(sde_kms)) + goto done; + c_conn->n.notifier_call = sde_backlight_cooling_cb; c_conn->cdev = backlight_cdev_register(dev->dev, c_conn->bl_device, &c_conn->n); @@ -220,6 +229,8 @@ static int sde_backlight_setup(struct sde_connector *c_conn, c_conn->bl_device = NULL; return -ENODEV; } + +done: display_count++; return 0;