Loading drivers/gpu/drm/msm/dsi-staging/dsi_display.c +14 −2 Original line number Diff line number Diff line Loading @@ -76,14 +76,26 @@ int dsi_display_set_backlight(void *display, u32 bl_lvl) { struct dsi_display *dsi_display = display; struct dsi_panel *panel; u32 bl_scale, bl_scale_ad; u64 bl_temp; int rc = 0; if (dsi_display == NULL) if (dsi_display == NULL || dsi_display->panel == NULL) return -EINVAL; panel = dsi_display->panel; panel->bl_config.bl_level = bl_lvl; rc = dsi_panel_set_backlight(panel, bl_lvl); /* scale backlight */ bl_scale = panel->bl_config.bl_scale; bl_temp = bl_lvl * bl_scale / MAX_BL_SCALE_LEVEL; bl_scale_ad = panel->bl_config.bl_scale_ad; bl_temp = (u32)bl_temp * bl_scale_ad / MAX_AD_BL_SCALE_LEVEL; pr_debug("bl_scale = %u, bl_scale_ad = %u, bl_lvl = %u\n", bl_scale, bl_scale_ad, (u32)bl_temp); rc = dsi_panel_set_backlight(panel, (u32)bl_temp); if (rc) pr_err("unable to set backlight\n"); Loading drivers/gpu/drm/msm/dsi-staging/dsi_panel.c +3 −0 Original line number Diff line number Diff line Loading @@ -1838,6 +1838,9 @@ static int dsi_panel_parse_bl_config(struct dsi_panel *panel, panel->bl_config.type = DSI_BACKLIGHT_UNKNOWN; } panel->bl_config.bl_scale = MAX_BL_SCALE_LEVEL; panel->bl_config.bl_scale_ad = MAX_AD_BL_SCALE_LEVEL; rc = of_property_read_u32(of_node, "qcom,mdss-dsi-bl-min-level", &val); if (rc) { pr_debug("[%s] bl-min-level unspecified, defaulting to zero\n", Loading drivers/gpu/drm/msm/dsi-staging/dsi_panel.h +5 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,8 @@ #include "msm_drv.h" #define MAX_BL_LEVEL 4096 #define MAX_BL_SCALE_LEVEL 1024 #define MAX_AD_BL_SCALE_LEVEL 65535 #define DSI_CMD_PPS_SIZE 135 #define DSI_MODE_MAX 5 Loading Loading @@ -87,6 +89,9 @@ struct dsi_backlight_config { u32 bl_min_level; u32 bl_max_level; u32 brightness_max_level; u32 bl_level; u32 bl_scale; u32 bl_scale_ad; int en_gpio; /* PWM params */ Loading drivers/gpu/drm/msm/msm_drv.h +2 −0 Original line number Diff line number Diff line Loading @@ -170,6 +170,8 @@ enum msm_mdp_conn_property { CONNECTOR_PROP_DST_W, CONNECTOR_PROP_DST_H, CONNECTOR_PROP_ROI_V1, CONNECTOR_PROP_BL_SCALE, CONNECTOR_PROP_AD_BL_SCALE, /* enum/bitmask properties */ CONNECTOR_PROP_TOPOLOGY_NAME, Loading drivers/gpu/drm/msm/sde/sde_connector.c +48 −0 Original line number Diff line number Diff line Loading @@ -744,6 +744,42 @@ static int _sde_connector_set_roi_v1( return 0; } static int _sde_connector_update_bl_scale(struct sde_connector *c_conn, int idx, uint64_t value) { struct dsi_display *dsi_display = c_conn->display; struct dsi_backlight_config *bl_config; int rc = 0; if (!dsi_display || !dsi_display->panel) { pr_err("Invalid params(s) dsi_display %pK, panel %pK\n", dsi_display, ((dsi_display) ? dsi_display->panel : NULL)); return -EINVAL; } bl_config = &dsi_display->panel->bl_config; if (idx == CONNECTOR_PROP_BL_SCALE) { bl_config->bl_scale = value; if (value > MAX_BL_SCALE_LEVEL) bl_config->bl_scale = MAX_BL_SCALE_LEVEL; SDE_DEBUG("set to panel: bl_scale = %u, bl_level = %u\n", bl_config->bl_scale, bl_config->bl_level); rc = c_conn->ops.set_backlight(dsi_display, bl_config->bl_level); } else if (idx == CONNECTOR_PROP_AD_BL_SCALE) { bl_config->bl_scale_ad = value; if (value > MAX_AD_BL_SCALE_LEVEL) bl_config->bl_scale_ad = MAX_AD_BL_SCALE_LEVEL; SDE_DEBUG("set to panel: bl_scale_ad = %u, bl_level = %u\n", bl_config->bl_scale_ad, bl_config->bl_level); rc = c_conn->ops.set_backlight(dsi_display, bl_config->bl_level); } return rc; } static int sde_connector_atomic_set_property(struct drm_connector *connector, struct drm_connector_state *state, struct drm_property *property, Loading Loading @@ -790,6 +826,10 @@ static int sde_connector_atomic_set_property(struct drm_connector *connector, c_conn->fb_kmap); } break; case CONNECTOR_PROP_BL_SCALE: case CONNECTOR_PROP_AD_BL_SCALE: rc = _sde_connector_update_bl_scale(c_conn, idx, val); break; default: break; } Loading Loading @@ -1290,6 +1330,14 @@ struct drm_connector *sde_connector_init(struct drm_device *dev, 0x0, 0, AUTOREFRESH_MAX_FRAME_CNT, 0, CONNECTOR_PROP_AUTOREFRESH); msm_property_install_range(&c_conn->property_info, "bl_scale", 0x0, 0, MAX_BL_SCALE_LEVEL, MAX_BL_SCALE_LEVEL, CONNECTOR_PROP_BL_SCALE); msm_property_install_range(&c_conn->property_info, "ad_bl_scale", 0x0, 0, MAX_AD_BL_SCALE_LEVEL, MAX_AD_BL_SCALE_LEVEL, CONNECTOR_PROP_AD_BL_SCALE); /* enum/bitmask properties */ msm_property_install_enum(&c_conn->property_info, "topology_name", DRM_MODE_PROP_IMMUTABLE, 0, e_topology_name, Loading Loading
drivers/gpu/drm/msm/dsi-staging/dsi_display.c +14 −2 Original line number Diff line number Diff line Loading @@ -76,14 +76,26 @@ int dsi_display_set_backlight(void *display, u32 bl_lvl) { struct dsi_display *dsi_display = display; struct dsi_panel *panel; u32 bl_scale, bl_scale_ad; u64 bl_temp; int rc = 0; if (dsi_display == NULL) if (dsi_display == NULL || dsi_display->panel == NULL) return -EINVAL; panel = dsi_display->panel; panel->bl_config.bl_level = bl_lvl; rc = dsi_panel_set_backlight(panel, bl_lvl); /* scale backlight */ bl_scale = panel->bl_config.bl_scale; bl_temp = bl_lvl * bl_scale / MAX_BL_SCALE_LEVEL; bl_scale_ad = panel->bl_config.bl_scale_ad; bl_temp = (u32)bl_temp * bl_scale_ad / MAX_AD_BL_SCALE_LEVEL; pr_debug("bl_scale = %u, bl_scale_ad = %u, bl_lvl = %u\n", bl_scale, bl_scale_ad, (u32)bl_temp); rc = dsi_panel_set_backlight(panel, (u32)bl_temp); if (rc) pr_err("unable to set backlight\n"); Loading
drivers/gpu/drm/msm/dsi-staging/dsi_panel.c +3 −0 Original line number Diff line number Diff line Loading @@ -1838,6 +1838,9 @@ static int dsi_panel_parse_bl_config(struct dsi_panel *panel, panel->bl_config.type = DSI_BACKLIGHT_UNKNOWN; } panel->bl_config.bl_scale = MAX_BL_SCALE_LEVEL; panel->bl_config.bl_scale_ad = MAX_AD_BL_SCALE_LEVEL; rc = of_property_read_u32(of_node, "qcom,mdss-dsi-bl-min-level", &val); if (rc) { pr_debug("[%s] bl-min-level unspecified, defaulting to zero\n", Loading
drivers/gpu/drm/msm/dsi-staging/dsi_panel.h +5 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,8 @@ #include "msm_drv.h" #define MAX_BL_LEVEL 4096 #define MAX_BL_SCALE_LEVEL 1024 #define MAX_AD_BL_SCALE_LEVEL 65535 #define DSI_CMD_PPS_SIZE 135 #define DSI_MODE_MAX 5 Loading Loading @@ -87,6 +89,9 @@ struct dsi_backlight_config { u32 bl_min_level; u32 bl_max_level; u32 brightness_max_level; u32 bl_level; u32 bl_scale; u32 bl_scale_ad; int en_gpio; /* PWM params */ Loading
drivers/gpu/drm/msm/msm_drv.h +2 −0 Original line number Diff line number Diff line Loading @@ -170,6 +170,8 @@ enum msm_mdp_conn_property { CONNECTOR_PROP_DST_W, CONNECTOR_PROP_DST_H, CONNECTOR_PROP_ROI_V1, CONNECTOR_PROP_BL_SCALE, CONNECTOR_PROP_AD_BL_SCALE, /* enum/bitmask properties */ CONNECTOR_PROP_TOPOLOGY_NAME, Loading
drivers/gpu/drm/msm/sde/sde_connector.c +48 −0 Original line number Diff line number Diff line Loading @@ -744,6 +744,42 @@ static int _sde_connector_set_roi_v1( return 0; } static int _sde_connector_update_bl_scale(struct sde_connector *c_conn, int idx, uint64_t value) { struct dsi_display *dsi_display = c_conn->display; struct dsi_backlight_config *bl_config; int rc = 0; if (!dsi_display || !dsi_display->panel) { pr_err("Invalid params(s) dsi_display %pK, panel %pK\n", dsi_display, ((dsi_display) ? dsi_display->panel : NULL)); return -EINVAL; } bl_config = &dsi_display->panel->bl_config; if (idx == CONNECTOR_PROP_BL_SCALE) { bl_config->bl_scale = value; if (value > MAX_BL_SCALE_LEVEL) bl_config->bl_scale = MAX_BL_SCALE_LEVEL; SDE_DEBUG("set to panel: bl_scale = %u, bl_level = %u\n", bl_config->bl_scale, bl_config->bl_level); rc = c_conn->ops.set_backlight(dsi_display, bl_config->bl_level); } else if (idx == CONNECTOR_PROP_AD_BL_SCALE) { bl_config->bl_scale_ad = value; if (value > MAX_AD_BL_SCALE_LEVEL) bl_config->bl_scale_ad = MAX_AD_BL_SCALE_LEVEL; SDE_DEBUG("set to panel: bl_scale_ad = %u, bl_level = %u\n", bl_config->bl_scale_ad, bl_config->bl_level); rc = c_conn->ops.set_backlight(dsi_display, bl_config->bl_level); } return rc; } static int sde_connector_atomic_set_property(struct drm_connector *connector, struct drm_connector_state *state, struct drm_property *property, Loading Loading @@ -790,6 +826,10 @@ static int sde_connector_atomic_set_property(struct drm_connector *connector, c_conn->fb_kmap); } break; case CONNECTOR_PROP_BL_SCALE: case CONNECTOR_PROP_AD_BL_SCALE: rc = _sde_connector_update_bl_scale(c_conn, idx, val); break; default: break; } Loading Loading @@ -1290,6 +1330,14 @@ struct drm_connector *sde_connector_init(struct drm_device *dev, 0x0, 0, AUTOREFRESH_MAX_FRAME_CNT, 0, CONNECTOR_PROP_AUTOREFRESH); msm_property_install_range(&c_conn->property_info, "bl_scale", 0x0, 0, MAX_BL_SCALE_LEVEL, MAX_BL_SCALE_LEVEL, CONNECTOR_PROP_BL_SCALE); msm_property_install_range(&c_conn->property_info, "ad_bl_scale", 0x0, 0, MAX_AD_BL_SCALE_LEVEL, MAX_AD_BL_SCALE_LEVEL, CONNECTOR_PROP_AD_BL_SCALE); /* enum/bitmask properties */ msm_property_install_enum(&c_conn->property_info, "topology_name", DRM_MODE_PROP_IMMUTABLE, 0, e_topology_name, Loading