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

Commit fa8f6238 authored by Chandan Uddaraju's avatar Chandan Uddaraju
Browse files

disp: msm: dsi: move panel regulator votes from bind to probe



Add vote for panel regulators in dsi probe to make sure
panel regulators are ON until dsi bind is completed
for cont-splash enabled usecase. Remove this panel regulator
vote when dsi component bind is done.

Change-Id: I0b1d43fa1b16385712abc1d8aaa0e778f31ba634
Signed-off-by: default avatarChandan Uddaraju <chandanu@codeaurora.org>
parent d4566743
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -5057,6 +5057,17 @@ static int dsi_display_bind(struct device *dev,
		}
	}

	/* Remove the panel vote that was added during dsi display probe */
	if (display->panel) {
		rc = dsi_pwr_enable_regulator(&display->panel->power_info,
								false);
		if (rc) {
			DSI_ERR("[%s] failed to disable vregs, rc=%d\n",
					display->panel->name, rc);
			goto error_host_deinit;
		}
	}

	/* register te irq handler */
	dsi_display_register_te_irq(display);

@@ -5167,6 +5178,24 @@ static int dsi_display_init(struct dsi_display *display)
		goto end;
	}

	/*
	 * Vote on panel regulator is added to make sure panel regulators
	 * are ON until dsi bind is completed for cont-splash enabled usecase.
	 * This panel regulator vote will be removed after bind is done.
	 * For GKI, adding this vote will make sure that sync_state
	 * kernel driver doesn't disable the panel regulators before
	 * splash_config() function adds vote for these regulators.
	 */
	if (display->panel) {
		rc = dsi_pwr_enable_regulator(&display->panel->power_info,
								true);
		if (rc) {
			DSI_ERR("[%s] failed to enable vregs, rc=%d\n",
					display->panel->name, rc);
			return rc;
		}
	}

	rc = component_add(&pdev->dev, &dsi_display_comp_ops);
	if (rc)
		DSI_ERR("component add failed, rc=%d\n", rc);
+11 −11
Original line number Diff line number Diff line
@@ -3280,6 +3280,13 @@ struct dsi_panel *dsi_panel_get(struct device *parent,
	if (rc)
		DSI_DEBUG("failed to parse esd config, rc=%d\n", rc);

	rc = dsi_panel_vreg_get(panel);
	if (rc) {
		DSI_ERR("[%s] failed to get panel regulators, rc=%d\n",
		       panel->name, rc);
		goto error;
	}

	panel->power_mode = SDE_MODE_DPMS_OFF;
	drm_panel_init(&panel->drm_panel);
	panel->drm_panel.dev = &panel->mipi_device.dev;
@@ -3287,11 +3294,13 @@ struct dsi_panel *dsi_panel_get(struct device *parent,

	rc = drm_panel_add(&panel->drm_panel);
	if (rc)
		goto error;
		goto error_vreg_put;

	mutex_init(&panel->panel_lock);

	return panel;
error_vreg_put:
	(void)dsi_panel_vreg_put(panel);
error:
	kfree(panel);
	return ERR_PTR(rc);
@@ -3332,18 +3341,11 @@ int dsi_panel_drv_init(struct dsi_panel *panel,
	dev->lanes = 4;

	panel->host = host;
	rc = dsi_panel_vreg_get(panel);
	if (rc) {
		DSI_ERR("[%s] failed to get panel regulators, rc=%d\n",
		       panel->name, rc);
		goto exit;
	}

	rc = dsi_panel_pinctrl_init(panel);
	if (rc) {
		DSI_ERR("[%s] failed to init pinctrl, rc=%d\n",
				panel->name, rc);
		goto error_vreg_put;
		goto exit;
	}

	rc = dsi_panel_gpio_request(panel);
@@ -3367,8 +3369,6 @@ int dsi_panel_drv_init(struct dsi_panel *panel,
	(void)dsi_panel_gpio_release(panel);
error_pinctrl_deinit:
	(void)dsi_panel_pinctrl_deinit(panel);
error_vreg_put:
	(void)dsi_panel_vreg_put(panel);
exit:
	mutex_unlock(&panel->panel_lock);
	return rc;