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

Commit a02db2c6 authored by Kalyan Thota's avatar Kalyan Thota Committed by Gerrit - the friendly Code Review server
Browse files

drm/msm/sde: Allow selection of panel TE GPIOs to source pingpong blocks



Allow separate GPIO configurability such that secondary pingpong can
choose which panel GPIO can be sourced to its pingpong TE.

Change-Id: I72b77267a3830cd052beebf545b4bdcd1ecea6da
Signed-off-by: default avatarKalyan Thota <kalyant@codeaurora.org>
parent 53de1644
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -103,6 +103,8 @@ Optional properties:
- qcom,sde-dsc-size:		A u32 value indicates the address range for each dsc.
- qcom,sde-cdm-size:		A u32 value indicates the address range for each cdm.
- qcom,sde-pp-size:		A u32 value indicates the address range for each pingpong.
- qcom,sde-te-source:		Array of GPIO sources indicating which pingpong TE is
				sourced to which panel TE gpio.
- qcom,sde-wb-size:		A u32 value indicates the address range for each writeback.
- qcom,sde-len:			A u32 entry for SDE address range.
- qcom,sde-intf-max-prefetch-lines:	Array of u32 values for max prefetch lines on
@@ -502,6 +504,7 @@ Example:
    qcom,sde-pp-off = <0x00071000 0x00071800
			  0x00072000 0x00072800>;
    qcom,sde-pp-slave = <0x0 0x0 0x0 0x0>;
    qcom,sde-te-source = <0x0 0x1 0x0 0x0>;
    qcom,sde-cdm-off = <0x0007a200>;
    qcom,sde-dsc-off = <0x00081000 0x00081400>;
    qcom,sde-intf-max-prefetch-lines = <0x15 0x15 0x15 0x15>;
+3 −2
Original line number Diff line number Diff line
@@ -1489,12 +1489,13 @@ static void _sde_encoder_update_vsync_source(struct sde_encoder_virt *sde_enc,

		vsync_cfg.pp_count = sde_enc->num_phys_encs;
		vsync_cfg.frame_rate = mode_info.frame_rate;
		vsync_cfg.vsync_source =
			sde_enc->cur_master->hw_pp->caps->te_source;
		if (is_dummy)
			vsync_cfg.vsync_source = SDE_VSYNC_SOURCE_WD_TIMER_1;
		else if (disp_info->is_te_using_watchdog_timer)
			vsync_cfg.vsync_source = SDE_VSYNC_SOURCE_WD_TIMER_0;
		else
			vsync_cfg.vsync_source = SDE_VSYNC0_SOURCE_GPIO;

		vsync_cfg.is_dummy = is_dummy;

		hw_mdptop->ops.setup_vsync_source(hw_mdptop, &vsync_cfg);
+6 −0
Original line number Diff line number Diff line
@@ -249,6 +249,7 @@ enum {
	DITHER_OFF,
	DITHER_LEN,
	DITHER_VER,
	TE_SOURCE,
	PP_PROP_MAX,
};

@@ -589,6 +590,7 @@ static struct sde_prop_type pp_prop[] = {
	{DITHER_OFF, "qcom,sde-dither-off", false, PROP_TYPE_U32_ARRAY},
	{DITHER_LEN, "qcom,sde-dither-size", false, PROP_TYPE_U32},
	{DITHER_VER, "qcom,sde-dither-version", false, PROP_TYPE_U32},
	{TE_SOURCE, "qcom,sde-te-source", false, PROP_TYPE_U32_ARRAY},
};

static struct sde_prop_type dsc_prop[] = {
@@ -2628,6 +2630,10 @@ static int sde_pp_parse_dt(struct device_node *np, struct sde_mdss_cfg *sde_cfg)
		snprintf(pp->name, SDE_HW_BLK_NAME_LEN, "pingpong_%u",
				pp->id - PINGPONG_0);
		pp->len = PROP_VALUE_ACCESS(prop_value, PP_LEN, 0);
		pp->te_source = PROP_VALUE_ACCESS(prop_value, TE_SOURCE, i);
		if (!prop_exists[TE_SOURCE] ||
			pp->te_source > SDE_VSYNC_SOURCE_WD_TIMER_0)
			pp->te_source = SDE_VSYNC0_SOURCE_GPIO;

		sblk->te.base = PROP_VALUE_ACCESS(prop_value, TE_OFF, i);
		sblk->te.id = SDE_PINGPONG_TE;
+1 −0
Original line number Diff line number Diff line
@@ -653,6 +653,7 @@ struct sde_ds_cfg {
 */
struct sde_pingpong_cfg  {
	SDE_HW_BLK_INFO;
	u32 te_source;
	const struct sde_pingpong_sub_blks *sblk;
};