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

Commit 332e9d70 authored by Tomi Valkeinen's avatar Tomi Valkeinen
Browse files

OMAP: DSS2: Add new FEAT definitions for features missing from OMAP2



OMAP2 doesn't have CPR, PRELOAD nor FIR_COEF_V registers. Add new
feature definitions for those, and check the feature before accessing
those registers.

Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
parent 525dae61
Loading
Loading
Loading
Loading
+91 −54
Original line number Diff line number Diff line
@@ -159,6 +159,7 @@ void dispc_save_context(void)
	SR(TIMING_V(OMAP_DSS_CHANNEL_LCD));
	SR(POL_FREQ(OMAP_DSS_CHANNEL_LCD));
	SR(DIVISORo(OMAP_DSS_CHANNEL_LCD));
	if (dss_has_feature(FEAT_GLOBAL_ALPHA))
		SR(GLOBAL_ALPHA);
	SR(SIZE_MGR(OMAP_DSS_CHANNEL_DIGIT));
	SR(SIZE_MGR(OMAP_DSS_CHANNEL_LCD));
@@ -189,19 +190,24 @@ void dispc_save_context(void)
	SR(DATA_CYCLE2(OMAP_DSS_CHANNEL_LCD));
	SR(DATA_CYCLE3(OMAP_DSS_CHANNEL_LCD));

	if (dss_has_feature(FEAT_CPR)) {
		SR(CPR_COEF_R(OMAP_DSS_CHANNEL_LCD));
		SR(CPR_COEF_G(OMAP_DSS_CHANNEL_LCD));
		SR(CPR_COEF_B(OMAP_DSS_CHANNEL_LCD));
	}
	if (dss_has_feature(FEAT_MGR_LCD2)) {
		if (dss_has_feature(FEAT_CPR)) {
			SR(CPR_COEF_B(OMAP_DSS_CHANNEL_LCD2));
			SR(CPR_COEF_G(OMAP_DSS_CHANNEL_LCD2));
			SR(CPR_COEF_R(OMAP_DSS_CHANNEL_LCD2));
		}

		SR(DATA_CYCLE1(OMAP_DSS_CHANNEL_LCD2));
		SR(DATA_CYCLE2(OMAP_DSS_CHANNEL_LCD2));
		SR(DATA_CYCLE3(OMAP_DSS_CHANNEL_LCD2));
	}

	if (dss_has_feature(FEAT_PRELOAD))
		SR(OVL_PRELOAD(OMAP_DSS_GFX));

	/* VID1 */
@@ -227,8 +233,10 @@ void dispc_save_context(void)
	for (i = 0; i < 5; i++)
		SR(OVL_CONV_COEF(OMAP_DSS_VIDEO1, i));

	if (dss_has_feature(FEAT_FIR_COEF_V)) {
		for (i = 0; i < 8; i++)
			SR(OVL_FIR_COEF_V(OMAP_DSS_VIDEO1, i));
	}

	if (dss_has_feature(FEAT_HANDLE_UV_SEPARATE)) {
		SR(OVL_BA0_UV(OMAP_DSS_VIDEO1));
@@ -249,6 +257,7 @@ void dispc_save_context(void)
	if (dss_has_feature(FEAT_ATTR2))
		SR(OVL_ATTRIBUTES2(OMAP_DSS_VIDEO1));

	if (dss_has_feature(FEAT_PRELOAD))
		SR(OVL_PRELOAD(OMAP_DSS_VIDEO1));

	/* VID2 */
@@ -274,8 +283,10 @@ void dispc_save_context(void)
	for (i = 0; i < 5; i++)
		SR(OVL_CONV_COEF(OMAP_DSS_VIDEO2, i));

	if (dss_has_feature(FEAT_FIR_COEF_V)) {
		for (i = 0; i < 8; i++)
			SR(OVL_FIR_COEF_V(OMAP_DSS_VIDEO2, i));
	}

	if (dss_has_feature(FEAT_HANDLE_UV_SEPARATE)) {
		SR(OVL_BA0_UV(OMAP_DSS_VIDEO2));
@@ -296,6 +307,7 @@ void dispc_save_context(void)
	if (dss_has_feature(FEAT_ATTR2))
		SR(OVL_ATTRIBUTES2(OMAP_DSS_VIDEO2));

	if (dss_has_feature(FEAT_PRELOAD))
		SR(OVL_PRELOAD(OMAP_DSS_VIDEO2));

	if (dss_has_feature(FEAT_CORE_CLK_DIV))
@@ -318,6 +330,7 @@ void dispc_restore_context(void)
	RR(TIMING_V(OMAP_DSS_CHANNEL_LCD));
	RR(POL_FREQ(OMAP_DSS_CHANNEL_LCD));
	RR(DIVISORo(OMAP_DSS_CHANNEL_LCD));
	if (dss_has_feature(FEAT_GLOBAL_ALPHA))
		RR(GLOBAL_ALPHA);
	RR(SIZE_MGR(OMAP_DSS_CHANNEL_DIGIT));
	RR(SIZE_MGR(OMAP_DSS_CHANNEL_LCD));
@@ -348,19 +361,24 @@ void dispc_restore_context(void)
	RR(DATA_CYCLE2(OMAP_DSS_CHANNEL_LCD));
	RR(DATA_CYCLE3(OMAP_DSS_CHANNEL_LCD));

	if (dss_has_feature(FEAT_CPR)) {
		RR(CPR_COEF_R(OMAP_DSS_CHANNEL_LCD));
		RR(CPR_COEF_G(OMAP_DSS_CHANNEL_LCD));
		RR(CPR_COEF_B(OMAP_DSS_CHANNEL_LCD));
	}
	if (dss_has_feature(FEAT_MGR_LCD2)) {
		RR(DATA_CYCLE1(OMAP_DSS_CHANNEL_LCD2));
		RR(DATA_CYCLE2(OMAP_DSS_CHANNEL_LCD2));
		RR(DATA_CYCLE3(OMAP_DSS_CHANNEL_LCD2));

		if (dss_has_feature(FEAT_CPR)) {
			RR(CPR_COEF_B(OMAP_DSS_CHANNEL_LCD2));
			RR(CPR_COEF_G(OMAP_DSS_CHANNEL_LCD2));
			RR(CPR_COEF_R(OMAP_DSS_CHANNEL_LCD2));
		}
	}

	if (dss_has_feature(FEAT_PRELOAD))
		RR(OVL_PRELOAD(OMAP_DSS_GFX));

	/* VID1 */
@@ -386,8 +404,10 @@ void dispc_restore_context(void)
	for (i = 0; i < 5; i++)
		RR(OVL_CONV_COEF(OMAP_DSS_VIDEO1, i));

	if (dss_has_feature(FEAT_FIR_COEF_V)) {
		for (i = 0; i < 8; i++)
			RR(OVL_FIR_COEF_V(OMAP_DSS_VIDEO1, i));
	}

	if (dss_has_feature(FEAT_HANDLE_UV_SEPARATE)) {
		RR(OVL_BA0_UV(OMAP_DSS_VIDEO1));
@@ -408,6 +428,7 @@ void dispc_restore_context(void)
	if (dss_has_feature(FEAT_ATTR2))
		RR(OVL_ATTRIBUTES2(OMAP_DSS_VIDEO1));

	if (dss_has_feature(FEAT_PRELOAD))
		RR(OVL_PRELOAD(OMAP_DSS_VIDEO1));

	/* VID2 */
@@ -433,8 +454,10 @@ void dispc_restore_context(void)
	for (i = 0; i < 5; i++)
		RR(OVL_CONV_COEF(OMAP_DSS_VIDEO2, i));

	if (dss_has_feature(FEAT_FIR_COEF_V)) {
		for (i = 0; i < 8; i++)
			RR(OVL_FIR_COEF_V(OMAP_DSS_VIDEO2, i));
	}

	if (dss_has_feature(FEAT_HANDLE_UV_SEPARATE)) {
		RR(OVL_BA0_UV(OMAP_DSS_VIDEO2));
@@ -455,6 +478,7 @@ void dispc_restore_context(void)
	if (dss_has_feature(FEAT_ATTR2))
		RR(OVL_ATTRIBUTES2(OMAP_DSS_VIDEO2));

	if (dss_has_feature(FEAT_PRELOAD))
		RR(OVL_PRELOAD(OMAP_DSS_VIDEO2));

	if (dss_has_feature(FEAT_CORE_CLK_DIV))
@@ -2650,6 +2674,7 @@ void dispc_dump_regs(struct seq_file *s)
	DUMPREG(DISPC_TIMING_V(OMAP_DSS_CHANNEL_LCD));
	DUMPREG(DISPC_POL_FREQ(OMAP_DSS_CHANNEL_LCD));
	DUMPREG(DISPC_DIVISORo(OMAP_DSS_CHANNEL_LCD));
	if (dss_has_feature(FEAT_GLOBAL_ALPHA))
		DUMPREG(DISPC_GLOBAL_ALPHA);
	DUMPREG(DISPC_SIZE_MGR(OMAP_DSS_CHANNEL_DIGIT));
	DUMPREG(DISPC_SIZE_MGR(OMAP_DSS_CHANNEL_LCD));
@@ -2681,19 +2706,24 @@ void dispc_dump_regs(struct seq_file *s)
	DUMPREG(DISPC_DATA_CYCLE2(OMAP_DSS_CHANNEL_LCD));
	DUMPREG(DISPC_DATA_CYCLE3(OMAP_DSS_CHANNEL_LCD));

	if (dss_has_feature(FEAT_CPR)) {
		DUMPREG(DISPC_CPR_COEF_R(OMAP_DSS_CHANNEL_LCD));
		DUMPREG(DISPC_CPR_COEF_G(OMAP_DSS_CHANNEL_LCD));
		DUMPREG(DISPC_CPR_COEF_B(OMAP_DSS_CHANNEL_LCD));
	}
	if (dss_has_feature(FEAT_MGR_LCD2)) {
		DUMPREG(DISPC_DATA_CYCLE1(OMAP_DSS_CHANNEL_LCD2));
		DUMPREG(DISPC_DATA_CYCLE2(OMAP_DSS_CHANNEL_LCD2));
		DUMPREG(DISPC_DATA_CYCLE3(OMAP_DSS_CHANNEL_LCD2));

		if (dss_has_feature(FEAT_CPR)) {
			DUMPREG(DISPC_CPR_COEF_R(OMAP_DSS_CHANNEL_LCD2));
			DUMPREG(DISPC_CPR_COEF_G(OMAP_DSS_CHANNEL_LCD2));
			DUMPREG(DISPC_CPR_COEF_B(OMAP_DSS_CHANNEL_LCD2));
		}
	}

	if (dss_has_feature(FEAT_PRELOAD))
		DUMPREG(DISPC_OVL_PRELOAD(OMAP_DSS_GFX));

	DUMPREG(DISPC_OVL_BA0(OMAP_DSS_VIDEO1));
@@ -2745,6 +2775,7 @@ void dispc_dump_regs(struct seq_file *s)
	DUMPREG(DISPC_OVL_CONV_COEF(OMAP_DSS_VIDEO1, 2));
	DUMPREG(DISPC_OVL_CONV_COEF(OMAP_DSS_VIDEO1, 3));
	DUMPREG(DISPC_OVL_CONV_COEF(OMAP_DSS_VIDEO1, 4));
	if (dss_has_feature(FEAT_FIR_COEF_V)) {
		DUMPREG(DISPC_OVL_FIR_COEF_V(OMAP_DSS_VIDEO1, 0));
		DUMPREG(DISPC_OVL_FIR_COEF_V(OMAP_DSS_VIDEO1, 1));
		DUMPREG(DISPC_OVL_FIR_COEF_V(OMAP_DSS_VIDEO1, 2));
@@ -2753,6 +2784,7 @@ void dispc_dump_regs(struct seq_file *s)
		DUMPREG(DISPC_OVL_FIR_COEF_V(OMAP_DSS_VIDEO1, 5));
		DUMPREG(DISPC_OVL_FIR_COEF_V(OMAP_DSS_VIDEO1, 6));
		DUMPREG(DISPC_OVL_FIR_COEF_V(OMAP_DSS_VIDEO1, 7));
	}

	if (dss_has_feature(FEAT_HANDLE_UV_SEPARATE)) {
		DUMPREG(DISPC_OVL_BA0_UV(OMAP_DSS_VIDEO1));
@@ -2813,6 +2845,8 @@ void dispc_dump_regs(struct seq_file *s)
	DUMPREG(DISPC_OVL_CONV_COEF(OMAP_DSS_VIDEO2, 2));
	DUMPREG(DISPC_OVL_CONV_COEF(OMAP_DSS_VIDEO2, 3));
	DUMPREG(DISPC_OVL_CONV_COEF(OMAP_DSS_VIDEO2, 4));

	if (dss_has_feature(FEAT_FIR_COEF_V)) {
		DUMPREG(DISPC_OVL_FIR_COEF_V(OMAP_DSS_VIDEO2, 0));
		DUMPREG(DISPC_OVL_FIR_COEF_V(OMAP_DSS_VIDEO2, 1));
		DUMPREG(DISPC_OVL_FIR_COEF_V(OMAP_DSS_VIDEO2, 2));
@@ -2821,6 +2855,7 @@ void dispc_dump_regs(struct seq_file *s)
		DUMPREG(DISPC_OVL_FIR_COEF_V(OMAP_DSS_VIDEO2, 5));
		DUMPREG(DISPC_OVL_FIR_COEF_V(OMAP_DSS_VIDEO2, 6));
		DUMPREG(DISPC_OVL_FIR_COEF_V(OMAP_DSS_VIDEO2, 7));
	}

	if (dss_has_feature(FEAT_HANDLE_UV_SEPARATE)) {
		DUMPREG(DISPC_OVL_BA0_UV(OMAP_DSS_VIDEO2));
@@ -2859,8 +2894,10 @@ void dispc_dump_regs(struct seq_file *s)
	if (dss_has_feature(FEAT_ATTR2))
		DUMPREG(DISPC_OVL_ATTRIBUTES2(OMAP_DSS_VIDEO2));

	if (dss_has_feature(FEAT_PRELOAD)) {
		DUMPREG(DISPC_OVL_PRELOAD(OMAP_DSS_VIDEO1));
		DUMPREG(DISPC_OVL_PRELOAD(OMAP_DSS_VIDEO2));
	}

	dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK);
#undef DUMPREG
+8 −4
Original line number Diff line number Diff line
@@ -287,7 +287,8 @@ static const struct omap_dss_features omap3430_dss_features = {
		FEAT_FUNCGATED | FEAT_ROWREPEATENABLE |
		FEAT_LINEBUFFERSPLIT | FEAT_RESIZECONF |
		FEAT_DSI_PLL_FREQSEL | FEAT_DSI_REVERSE_TXCLKESC |
		FEAT_VENC_REQUIRES_TV_DAC_CLK,
		FEAT_VENC_REQUIRES_TV_DAC_CLK | FEAT_CPR | FEAT_PRELOAD |
		FEAT_FIR_COEF_V,

	.num_mgrs = 2,
	.num_ovls = 3,
@@ -307,7 +308,8 @@ static const struct omap_dss_features omap3630_dss_features = {
		FEAT_PRE_MULT_ALPHA | FEAT_FUNCGATED |
		FEAT_ROWREPEATENABLE | FEAT_LINEBUFFERSPLIT |
		FEAT_RESIZECONF | FEAT_DSI_PLL_PWR_BUG |
		FEAT_DSI_PLL_FREQSEL,
		FEAT_DSI_PLL_FREQSEL | FEAT_CPR | FEAT_PRELOAD |
		FEAT_FIR_COEF_V,

	.num_mgrs = 2,
	.num_ovls = 3,
@@ -328,7 +330,8 @@ static const struct omap_dss_features omap4430_es1_0_dss_features = {
		FEAT_MGR_LCD2 | FEAT_GLOBAL_ALPHA_VID1 |
		FEAT_CORE_CLK_DIV | FEAT_LCD_CLK_SRC |
		FEAT_DSI_DCS_CMD_CONFIG_VC | FEAT_DSI_VC_OCP_WIDTH |
		FEAT_DSI_GNQ | FEAT_HANDLE_UV_SEPARATE | FEAT_ATTR2,
		FEAT_DSI_GNQ | FEAT_HANDLE_UV_SEPARATE | FEAT_ATTR2 |
		FEAT_CPR | FEAT_PRELOAD | FEAT_FIR_COEF_V,

	.num_mgrs = 3,
	.num_ovls = 3,
@@ -349,7 +352,8 @@ static const struct omap_dss_features omap4_dss_features = {
		FEAT_CORE_CLK_DIV | FEAT_LCD_CLK_SRC |
		FEAT_DSI_DCS_CMD_CONFIG_VC | FEAT_DSI_VC_OCP_WIDTH |
		FEAT_DSI_GNQ | FEAT_HDMI_CTS_SWMODE |
		FEAT_HANDLE_UV_SEPARATE | FEAT_ATTR2,
		FEAT_HANDLE_UV_SEPARATE | FEAT_ATTR2 | FEAT_CPR |
		FEAT_PRELOAD | FEAT_FIR_COEF_V,

	.num_mgrs = 3,
	.num_ovls = 3,
+3 −0
Original line number Diff line number Diff line
@@ -52,6 +52,9 @@ enum dss_feat_id {
	FEAT_HANDLE_UV_SEPARATE         = 1 << 20,
	FEAT_ATTR2                      = 1 << 21,
	FEAT_VENC_REQUIRES_TV_DAC_CLK	= 1 << 22,
	FEAT_CPR			= 1 << 23,
	FEAT_PRELOAD			= 1 << 24,
	FEAT_FIR_COEF_V			= 1 << 25,
};

/* DSS register field id */
+3 −0
Original line number Diff line number Diff line
@@ -238,6 +238,9 @@ static ssize_t overlay_global_alpha_store(struct omap_overlay *ovl,
	u8 alpha;
	struct omap_overlay_info info;

	if (!dss_has_feature(FEAT_GLOBAL_ALPHA))
		return -ENODEV;

	r = kstrtou8(buf, 0, &alpha);
	if (r)
		return r;