disp: msm: sde: control backlight update for trusted UI

Install backlight property only for primary VM and avoid
backlight updates when HW is not owned by the VM.

Change-Id: I35f26d5c41ea57c7271382a1fe571e65ee4520c1
Signed-off-by: Jeykumar Sankaran <jsanka@codeaurora.org>
这个提交包含在:
Jeykumar Sankaran
2020-05-17 19:35:02 -07:00
父节点 6b74335f74
当前提交 f86e722e56

查看文件

@@ -17,6 +17,7 @@
#include "dsi_display.h"
#include "sde_crtc.h"
#include "sde_rm.h"
#include "sde_vm.h"
#include <drm/drm_probe_helper.h>
#define BL_NODE_NAME_SIZE 32
@@ -79,6 +80,8 @@ static int sde_backlight_device_update_status(struct backlight_device *bd)
int bl_lvl;
struct drm_event event;
int rc = 0;
struct msm_drm_private *priv;
struct sde_kms *sde_kms;
brightness = bd->props.brightness;
@@ -88,6 +91,10 @@ static int sde_backlight_device_update_status(struct backlight_device *bd)
brightness = 0;
c_conn = bl_get_data(bd);
priv = c_conn->base.dev->dev_private;
sde_kms = to_sde_kms(priv->kms);
display = (struct dsi_display *) c_conn->display;
if (brightness > display->panel->bl_config.bl_max_level)
brightness = display->panel->bl_config.bl_max_level;
@@ -106,6 +113,19 @@ static int sde_backlight_device_update_status(struct backlight_device *bd)
return 0;
}
if (sde_kms->vm) {
struct sde_vm_ops *vm_ops = &sde_kms->vm->vm_ops;
mutex_lock(&sde_kms->vm->vm_res_lock);
if (vm_ops->vm_owns_hw && !vm_ops->vm_owns_hw(sde_kms)) {
SDE_DEBUG(
"skipping bl update due to HW unavailablity\n");
mutex_unlock(&sde_kms->vm->vm_res_lock);
return 0;
}
}
if (c_conn->ops.set_backlight) {
/* skip notifying user space if bl is 0 */
if (brightness != 0) {
@@ -119,6 +139,9 @@ static int sde_backlight_device_update_status(struct backlight_device *bd)
c_conn->unset_bl_level = 0;
}
if (sde_kms->vm)
mutex_unlock(&sde_kms->vm->vm_res_lock);
return rc;
}
@@ -152,16 +175,26 @@ static int sde_backlight_setup(struct sde_connector *c_conn,
struct backlight_properties props;
struct dsi_display *display;
struct dsi_backlight_config *bl_config;
struct msm_drm_private *priv;
struct sde_kms *sde_kms;
static int display_count;
char bl_node_name[BL_NODE_NAME_SIZE];
if (!c_conn || !dev || !dev->dev) {
if (!c_conn || !dev || !dev->dev || !dev->dev_private) {
SDE_ERROR("invalid param\n");
return -EINVAL;
} else if (c_conn->connector_type != DRM_MODE_CONNECTOR_DSI) {
return 0;
}
priv = dev->dev_private;
if (!priv->kms)
return -EINVAL;
sde_kms = to_sde_kms(priv->kms);
if (sde_in_trusted_vm(sde_kms))
return 0;
memset(&props, 0, sizeof(props));
props.type = BACKLIGHT_RAW;
props.power = FB_BLANK_UNBLANK;