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

Commit dfae7053 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "drm/msm/dsi-staging: register dsi irq before splash handoff" into dev/msm-4.14-display

parents d76fea5e ef9c4ea5
Loading
Loading
Loading
Loading
+20 −11
Original line number Diff line number Diff line
@@ -538,10 +538,9 @@ static int dsi_display_status_reg_read(struct dsi_display *display)
		}
	}
exit:
	if (rc <= 0) {
		dsi_display_ctrl_irq_update(display, false);
	/* mask only error interrupts */
	if (rc <= 0)
		dsi_display_mask_ctrl_error_interrupts(display);
	}

	dsi_display_cmd_engine_disable(display);
done:
@@ -3593,16 +3592,24 @@ static int _dsi_display_dev_deinit(struct dsi_display *display)
}

/**
 * dsi_display_splash_res_init() - Initialize resources for continuous splash
 * @display:    Pointer to dsi display
 * dsi_display_cont_splash_config() - Initialize resources for continuous splash
 * @dsi_display:    Pointer to dsi display
 * Returns:     Zero on success
 */
static int dsi_display_splash_res_init(struct  dsi_display *display)
int dsi_display_cont_splash_config(void *dsi_display)
{
	struct dsi_display *display = dsi_display;
	int rc = 0;

	/* Vote for gdsc required to read register address space */
	if (!display) {
		pr_err("invalid input display param\n");
		return -EINVAL;
	}

	mutex_lock(&display->display_lock);

	/* Vote for gdsc required to read register address space */
	display->cont_splash_client = sde_power_client_create(display->phandle,
						"cont_splash_client");
	rc = sde_power_resource_enable(display->phandle,
@@ -3610,6 +3617,7 @@ static int dsi_display_splash_res_init(struct dsi_display *display)
	if (rc) {
		pr_err("failed to vote gdsc for continuous splash, rc=%d\n",
							rc);
		mutex_unlock(&display->display_lock);
		return -EINVAL;
	}

@@ -3625,6 +3633,9 @@ static int dsi_display_splash_res_init(struct dsi_display *display)
	dsi_display_clk_mngr_update_splash_status(display->clk_mngr,
				display->is_cont_splash_enabled);

	/* Set up ctrl isr before enabling core clk */
	dsi_display_ctrl_isr_configure(display, true);

	/* Vote for Core clk and link clk. Votes on ctrl and phy
	 * regulator are inplicit from  pre clk on callback
	 */
@@ -3645,6 +3656,7 @@ static int dsi_display_splash_res_init(struct dsi_display *display)
	}

	dsi_config_host_engine_state_for_cont_splash(display);
	mutex_unlock(&display->display_lock);

	return rc;

@@ -3653,6 +3665,7 @@ static int dsi_display_splash_res_init(struct dsi_display *display)
			DSI_ALL_CLKS, DSI_CLK_OFF);

clk_manager_update:
	dsi_display_ctrl_isr_configure(display, false);
	/* Update splash status for clock manager */
	dsi_display_clk_mngr_update_splash_status(display->clk_mngr,
				false);
@@ -3661,6 +3674,7 @@ static int dsi_display_splash_res_init(struct dsi_display *display)
	(void)sde_power_resource_enable(display->phandle,
			display->cont_splash_client, false);
	display->is_cont_splash_enabled = false;
	mutex_unlock(&display->display_lock);
	return rc;
}

@@ -4106,11 +4120,6 @@ static int dsi_display_bind(struct device *dev,
		}
	}

	/* Initialize resources for continuous splash */
	rc = dsi_display_splash_res_init(display);
	if (rc)
		pr_err("Continuous splash resource init failed, rc=%d\n", rc);

	goto error;

error_host_deinit:
+7 −0
Original line number Diff line number Diff line
@@ -622,4 +622,11 @@ enum dsi_pixel_format dsi_display_get_dst_format(
		struct drm_connector *connector,
		void *display);

/**
 * dsi_display_cont_splash_config() - initialize splash resources
 * @display:         Handle to display
 *
 * Return: Zero on Success
 */
int dsi_display_cont_splash_config(void *display);
#endif /* _DSI_DISPLAY_H_ */
+7 −0
Original line number Diff line number Diff line
@@ -292,6 +292,13 @@ struct sde_connector_ops {
	 * Returns: Zero on success, negative error code for failures
	 */
	void (*pre_destroy)(struct drm_connector *connector, void *display);

	/**
	 * cont_splash_config - initialize splash resources
	 * @display: Pointer to private display handle
	 * Returns: zero for success, negetive for failure
	 */
	int (*cont_splash_config)(void *display);
};

/**
+8 −0
Original line number Diff line number Diff line
@@ -1260,6 +1260,7 @@ static int _sde_kms_setup_displays(struct drm_device *dev,
		.check_status = dsi_display_check_status,
		.enable_event = dsi_conn_enable_event,
		.cmd_transfer = dsi_display_cmd_transfer,
		.cont_splash_config = dsi_display_cont_splash_config,
	};
	static const struct sde_connector_ops wb_ops = {
		.post_init =    sde_wb_connector_post_init,
@@ -1273,6 +1274,7 @@ static int _sde_kms_setup_displays(struct drm_device *dev,
		.get_dst_format = NULL,
		.check_status = NULL,
		.cmd_transfer = NULL,
		.cont_splash_config = NULL,
	};
	static const struct sde_connector_ops dp_ops = {
		.post_init  = dp_connector_post_init,
@@ -1285,6 +1287,7 @@ static int _sde_kms_setup_displays(struct drm_device *dev,
		.check_status = NULL,
		.config_hdr = dp_connector_config_hdr,
		.cmd_transfer = NULL,
		.cont_splash_config = NULL,
	};
	struct msm_display_info info;
	struct drm_encoder *encoder;
@@ -2272,6 +2275,7 @@ static int sde_kms_cont_splash_config(struct msm_kms *kms)
	struct list_head *connector_list = NULL;
	struct drm_connector *conn_iter = NULL;
	struct drm_connector *connector = NULL;
	struct sde_connector *sde_conn = NULL;

	if (!kms) {
		SDE_ERROR("invalid kms\n");
@@ -2383,6 +2387,10 @@ static int sde_kms_cont_splash_config(struct msm_kms *kms)

	sde_crtc_update_cont_splash_mixer_settings(crtc);

	sde_conn = to_sde_connector(connector);
	if (sde_conn && sde_conn->ops.cont_splash_config)
		sde_conn->ops.cont_splash_config(sde_conn->display);

	return rc;
}