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

Commit 6db41ed5 authored by Abhinav Kumar's avatar Abhinav Kumar Committed by Sudarsan Ramesh
Browse files

disp: msm: dp: add support for continuous PPS command



Add support to send PPS command with every frame for DP.
This is needed to satisfy the requirement of certain bridge
chips which need the PPS to be sent every frame.

Change-Id: I8711dff41e60d8b1e1c515a5d34a370a2409ce14
Signed-off-by: default avatarAbhinav Kumar <abhinavk@codeaurora.org>
Signed-off-by: default avatarSudarsan Ramesh <sudarame@codeaurora.org>
parent 316f28ff
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -1534,6 +1534,7 @@ static void dp_catalog_panel_dp_flush(struct dp_catalog_panel *panel,
	struct dp_catalog_private *catalog;
	struct dp_io_data *io_data;
	u32 dp_flush, offset;
	struct dp_dsc_cfg_data *dsc;

	if (!panel) {
		DP_ERR("invalid input\n");
@@ -1547,6 +1548,7 @@ static void dp_catalog_panel_dp_flush(struct dp_catalog_panel *panel,

	catalog = dp_catalog_get_priv(panel);
	io_data = catalog->io.dp_link;
	dsc = &panel->dsc;

	if (panel->stream_id == DP_STREAM_0)
		offset = 0;
@@ -1554,6 +1556,11 @@ static void dp_catalog_panel_dp_flush(struct dp_catalog_panel *panel,
		offset = MMSS_DP1_FLUSH - MMSS_DP_FLUSH;

	dp_flush = dp_read(MMSS_DP_FLUSH + offset);

	if ((flush_bit == DP_PPS_FLUSH) &&
		dsc->continuous_pps)
		dp_flush &= ~BIT(2);

	dp_flush |= BIT(flush_bit);
	dp_write(MMSS_DP_FLUSH + offset, dp_flush);
}
+1 −0
Original line number Diff line number Diff line
@@ -149,6 +149,7 @@ struct dp_catalog_audio {

struct dp_dsc_cfg_data {
	bool dsc_en;
	bool continuous_pps;
	char pps[128];
	u32 pps_len;
	u32 pps_word[32];
+1 −0
Original line number Diff line number Diff line
@@ -1883,6 +1883,7 @@ static int dp_init_sub_modules(struct dp_display_private *dp)
	}

	g_dp_display->is_mst_supported = dp->parser->has_mst;
	g_dp_display->dsc_cont_pps = dp->parser->dsc_continuous_pps;

	dp->catalog = dp_catalog_get(dev, dp->parser);
	if (IS_ERR(dp->catalog)) {
+1 −0
Original line number Diff line number Diff line
@@ -70,6 +70,7 @@ struct dp_display {
	void *base_dp_panel;
	bool is_sst_connected;
	bool is_mst_supported;
	bool dsc_cont_pps;
	u32 max_pclk_khz;
	void *dp_mst_prv_info;
	u32 max_mixer_count;
+4 −0
Original line number Diff line number Diff line
@@ -366,6 +366,10 @@ int dp_connector_post_init(struct drm_connector *connector, void *display)
	dp_display->bridge->dp_panel = sde_conn->drv_panel;

	rc = dp_mst_init(dp_display);

	if (dp_display->dsc_cont_pps)
		sde_conn->ops.update_pps = NULL;

end:
	return rc;
}
Loading