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

Commit 08220bfd authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "Merge remote-tracking branch 'quic/dev/msm-4.14-display' into msm-4.14"

parents 34ebb16e 375f5dab
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -232,6 +232,12 @@ int drm_dropmaster_ioctl(struct drm_device *dev, void *data,
	if (!dev->master)
		goto out_unlock;

	if (file_priv->master->lessor != NULL) {
		DRM_DEBUG_LEASE("Attempt to drop lessee %d as master\n", file_priv->master->lessee_id);
		ret = -EINVAL;
		goto out_unlock;
	}

	ret = 0;
	drm_drop_master(dev, file_priv);
out_unlock:
+21 −5
Original line number Diff line number Diff line
@@ -6071,8 +6071,12 @@ int dsi_display_get_info(struct drm_connector *connector,
	case DSI_OP_VIDEO_MODE:
		info->curr_panel_mode = MSM_DISPLAY_VIDEO_MODE;
		info->capabilities |= MSM_DISPLAY_CAP_VID_MODE;
		if (display->panel->panel_mode_switch_enabled)
		if (display->panel->panel_mode_switch_enabled) {
			info->capabilities |= MSM_DISPLAY_CAP_CMD_MODE;
			info->is_te_using_watchdog_timer =
				display->panel->te_using_watchdog_timer |
				display->sw_te_using_wd;
		}
		break;
	case DSI_OP_CMD_MODE:
		info->curr_panel_mode = MSM_DISPLAY_CMD_MODE;
@@ -6127,6 +6131,10 @@ static void dsi_display_adjust_mode_timing(struct dsi_display *display,
	struct dsi_dyn_clk_caps *dyn_clk_caps;
	u32 bits_per_symbol = 16, num_of_symbols = 7; /* For Cphy */

	/* Constant FPS is not supported on command mode */
	if (dsi_mode->panel_mode == DSI_OP_CMD_MODE)
		return;

	dyn_clk_caps = &(display->panel->dyn_clk_caps);
	if (!dyn_clk_caps->maintain_const_fps)
		return;
@@ -6295,8 +6303,6 @@ int dsi_display_get_modes(struct dsi_display *display,

	dyn_clk_caps = &(display->panel->dyn_clk_caps);

	num_dfps_rates = !dfps_caps.dfps_support ? 1 : dfps_caps.dfps_list_len;

	timing_mode_count = display->panel->num_timing_nodes;

	for (mode_idx = 0; mode_idx < timing_mode_count; mode_idx++) {
@@ -6319,6 +6325,9 @@ int dsi_display_get_modes(struct dsi_display *display,

		is_cmd_mode = (display_mode.panel_mode == DSI_OP_CMD_MODE);

		num_dfps_rates = ((!dfps_caps.dfps_support ||
				is_cmd_mode) ? 1 : dfps_caps.dfps_list_len);

		is_split_link = host->split_link.split_link_enabled;
		sublinks_count = host->split_link.num_sublinks;
		if (is_split_link && sublinks_count > 1) {
@@ -6371,9 +6380,16 @@ int dsi_display_get_modes(struct dsi_display *display,
		}
		end = array_idx;
		/*
		 * if dynamic clk switch is supported then update all the bit
		 * clk rates.
		 * if POMS is enabled and boot up mode is video mode,
		 * skip bit clk rates update for command mode,
		 * else if dynamic clk switch is supported then update all
		 * the bit clk rates.
		 */

		if (is_cmd_mode &&
			(display->panel->panel_mode == DSI_OP_VIDEO_MODE))
			continue;

		_dsi_display_populate_bit_clks(display, start, end, &array_idx);
	}

+8 −11
Original line number Diff line number Diff line
/*
 * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
 * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -263,6 +263,7 @@ static void dsi_bridge_disable(struct drm_bridge *bridge)
	int rc = 0;
	struct dsi_display *display;
	struct dsi_bridge *c_bridge = to_dsi_bridge(bridge);
	int private_flags;

	if (!bridge) {
		pr_err("Invalid params\n");
@@ -270,18 +271,14 @@ static void dsi_bridge_disable(struct drm_bridge *bridge)
	}
	display = c_bridge->display;

	private_flags =
		bridge->encoder->crtc->state->adjusted_mode.private_flags;

	if (display && display->drm_conn) {
		if (bridge->encoder->crtc->state->adjusted_mode.private_flags &
			MSM_MODE_FLAG_SEAMLESS_POMS) {
			display->poms_pending = true;
			/* Disable ESD thread, during panel mode switch */
			sde_connector_schedule_status_work(display->drm_conn,
				false);
		} else {
			display->poms_pending = false;
		display->poms_pending =
			private_flags & MSM_MODE_FLAG_SEAMLESS_POMS;
		sde_connector_helper_bridge_disable(display->drm_conn);
	}
	}

	rc = dsi_display_pre_disable(c_bridge->display);
	if (rc) {
+20 −10
Original line number Diff line number Diff line
@@ -3500,7 +3500,6 @@ int dsi_panel_get_mode_count(struct dsi_panel *panel)
	int num_dfps_rates, num_bit_clks;
	int num_video_modes = 0, num_cmd_modes = 0;
	int count, rc = 0;
	void *utils_data = NULL;

	if (!panel) {
		pr_err("invalid params\n");
@@ -3537,10 +3536,9 @@ int dsi_panel_get_mode_count(struct dsi_panel *panel)

	panel->num_timing_nodes = count;
	dsi_for_each_child_node(timings_np, child_np) {
		utils_data = child_np;
		if (utils->read_bool(utils->data, "qcom,mdss-dsi-video-mode"))
		if (utils->read_bool(child_np, "qcom,mdss-dsi-video-mode"))
			num_video_modes++;
		else if (utils->read_bool(utils->data,
		else if (utils->read_bool(child_np,
					"qcom,mdss-dsi-cmd-mode"))
			num_cmd_modes++;
		else if (panel->panel_mode == DSI_OP_VIDEO_MODE)
@@ -3555,9 +3553,21 @@ int dsi_panel_get_mode_count(struct dsi_panel *panel)
	num_bit_clks = !panel->dyn_clk_caps.dyn_clk_support ? 1 :
					panel->dyn_clk_caps.bit_clk_list_len;

	/* Inflate num_of_modes by fps and bit clks in dfps */
	panel->num_display_modes = (num_cmd_modes * num_bit_clks) +
			(num_video_modes * num_bit_clks * num_dfps_rates);
	/*
	 * Inflate num_of_modes by fps and bit clks in dfps
	 * Single command mode for video mode panels supporting
	 * panel operating mode switch.
	 */

	num_video_modes = num_video_modes * num_bit_clks * num_dfps_rates;

	if ((panel->panel_mode == DSI_OP_VIDEO_MODE) &&
			(panel->panel_mode_switch_enabled))
		num_cmd_modes  = 1;
	else
		num_cmd_modes = num_cmd_modes * num_bit_clks;

	panel->num_display_modes = num_video_modes + num_cmd_modes;

error:
	return rc;
@@ -3662,9 +3672,6 @@ int dsi_panel_get_mode(struct dsi_panel *panel,
			goto parse_fail;
		}

		if (panel->panel_mode == DSI_OP_VIDEO_MODE)
			mode->priv_info->mdp_transfer_time_us = 0;

		rc = dsi_panel_parse_dsc_params(mode, utils);
		if (rc) {
			pr_err("failed to parse dsc params, rc=%d\n", rc);
@@ -3717,6 +3724,9 @@ int dsi_panel_get_mode(struct dsi_panel *panel,
		} else {
			mode->panel_mode = panel->panel_mode;
		}

		if (mode->panel_mode == DSI_OP_VIDEO_MODE)
			mode->priv_info->mdp_transfer_time_us = 0;
	}
	goto done;

+18 −10
Original line number Diff line number Diff line
@@ -92,8 +92,7 @@ static int sde_backlight_device_update_status(struct backlight_device *bd)
	if (!bl_lvl && brightness)
		bl_lvl = 1;

	if (display->panel->bl_config.bl_update ==
		BL_UPDATE_DELAY_UNTIL_FIRST_FRAME && !c_conn->allow_bl_update) {
	if (!c_conn->allow_bl_update) {
		c_conn->unset_bl_level = bl_lvl;
		return 0;
	}
@@ -480,8 +479,7 @@ static int _sde_connector_update_bl_scale(struct sde_connector *c_conn)

	bl_config = &dsi_display->panel->bl_config;

	if (dsi_display->panel->bl_config.bl_update ==
		BL_UPDATE_DELAY_UNTIL_FIRST_FRAME && !c_conn->allow_bl_update) {
	if (!c_conn->allow_bl_update) {
		c_conn->unset_bl_level = bl_config->bl_level;
		return 0;
	}
@@ -666,21 +664,31 @@ void sde_connector_helper_bridge_disable(struct drm_connector *connector)
{
	int rc;
	struct sde_connector *c_conn = NULL;
	struct dsi_display *display;
	bool poms_pending = false;

	if (!connector)
		return;

	c_conn = to_sde_connector(connector);

	if (c_conn->connector_type == DRM_MODE_CONNECTOR_DSI) {
		display = (struct dsi_display *) c_conn->display;
		poms_pending = display->poms_pending;
	}

	if (!poms_pending) {
		rc = _sde_connector_update_dirty_properties(connector);
		if (rc) {
			SDE_ERROR("conn %d final pre kickoff failed %d\n",
					connector->base.id, rc);
			SDE_EVT32(connector->base.id, SDE_EVTLOG_ERROR);
		}
	}

	/* Disable ESD thread */
	sde_connector_schedule_status_work(connector, false);

	c_conn = to_sde_connector(connector);
	if (c_conn->bl_device) {
		c_conn->bl_device->props.power = FB_BLANK_POWERDOWN;
		c_conn->bl_device->props.state |= BL_CORE_FBBLANK;
Loading