Esempio n. 1
0
void sc_hwset_polyphase_vcoef(struct sc_dev *sc,
				unsigned int yratio, unsigned int cratio,
				unsigned int filter)
{
	unsigned int phase;
	unsigned int yfilter = sc_get_scale_filter(yratio);
	unsigned int cfilter = sc_get_scale_filter(cratio);
	const __u32 (*sc_coef_4t)[16][2] = sc_coef_4t_org;

	if (sc_set_blur || filter == SC_FT_BLUR)
		sc_coef_4t = sc_coef_4t_blur1;

	BUG_ON(yfilter >= ARRAY_SIZE(sc_coef_4t_org));
	BUG_ON(cfilter >= ARRAY_SIZE(sc_coef_4t_org));

	BUILD_BUG_ON(ARRAY_SIZE(sc_coef_4t_org[yfilter]) < 9);
	BUILD_BUG_ON(ARRAY_SIZE(sc_coef_4t_org[cfilter]) < 9);

	/* reset value of the coefficient registers are the 8:8 table */
	for (phase = 0; phase < 9; phase++) {
		__raw_writel(sc_coef_4t[yfilter][phase][1],
				sc->regs + SCALER_YVCOEF + phase * 8);
		__raw_writel(sc_coef_4t[yfilter][phase][0],
				sc->regs + SCALER_YVCOEF + phase * 8 + 4);
	}

	for (phase = 0; phase < 9; phase++) {
		__raw_writel(sc_coef_4t[cfilter][phase][1],
				sc->regs + SCALER_CVCOEF + phase * 8);
		__raw_writel(sc_coef_4t[cfilter][phase][0],
				sc->regs + SCALER_CVCOEF + phase * 8 + 4);
	}
}
Esempio n. 2
0
void sc_hwset_polyphase_vcoef(struct sc_dev *sc,
				unsigned int yratio, unsigned int cratio)
{
	unsigned int phase;
	unsigned int yfilter = sc_get_scale_filter(yratio);
	unsigned int cfilter = sc_get_scale_filter(cratio);

	BUG_ON(yfilter >= ARRAY_SIZE(sc_coef_4t));
	BUG_ON(cfilter >= ARRAY_SIZE(sc_coef_4t));

	BUILD_BUG_ON(ARRAY_SIZE(sc_coef_4t[yfilter]) < 9);
	BUILD_BUG_ON(ARRAY_SIZE(sc_coef_4t[cfilter]) < 9);

	/* reset value of the coefficient registers are the 8:8 table */
	if (IS_ENABLED(CONFIG_SCALER_NO_SOFTRST) || (yfilter != 0)) {
		for (phase = 0; phase < 9; phase++) {
			writel(sc_coef_4t[yfilter][phase][1],
				sc->regs + SCALER_YVCOEF + phase * 8);
			writel(sc_coef_4t[yfilter][phase][0],
				sc->regs + SCALER_YVCOEF + phase * 8 + 4);
		}
	}

	if (IS_ENABLED(CONFIG_SCALER_NO_SOFTRST) || (cfilter != 0)) {
		for (phase = 0; phase < 9; phase++) {
			writel(sc_coef_4t[cfilter][phase][1],
				sc->regs + SCALER_CVCOEF + phase * 8);
			writel(sc_coef_4t[cfilter][phase][0],
				sc->regs + SCALER_CVCOEF + phase * 8 + 4);
		}
	}
}
Esempio n. 3
0
void sc_hwset_polyphase_hcoef(struct sc_dev *sc,
				unsigned int yratio, unsigned int cratio,
				unsigned int filter)
{
	unsigned int phase;
	unsigned int yfilter = sc_get_scale_filter(yratio);
	unsigned int cfilter = sc_get_scale_filter(cratio);
	const __u32 (*sc_coef_8t)[16][4] = sc_coef_8t_org;

	if (sc_set_blur || filter == SC_FT_BLUR)
		sc_coef_8t = sc_coef_8t_blur1;

	BUG_ON(yfilter >= ARRAY_SIZE(sc_coef_8t_org));
	BUG_ON(cfilter >= ARRAY_SIZE(sc_coef_8t_org));

	BUILD_BUG_ON(ARRAY_SIZE(sc_coef_8t_org[yfilter]) < 9);
	BUILD_BUG_ON(ARRAY_SIZE(sc_coef_8t_org[cfilter]) < 9);

	for (phase = 0; phase < 9; phase++) {
		__raw_writel(sc_coef_8t[yfilter][phase][3],
				sc->regs + SCALER_YHCOEF + phase * 16);
		__raw_writel(sc_coef_8t[yfilter][phase][2],
				sc->regs + SCALER_YHCOEF + phase * 16 + 4);
		__raw_writel(sc_coef_8t[yfilter][phase][1],
				sc->regs + SCALER_YHCOEF + phase * 16 + 8);
		__raw_writel(sc_coef_8t[yfilter][phase][0],
				sc->regs + SCALER_YHCOEF + phase * 16 + 12);
	}

	for (phase = 0; phase < 9; phase++) {
		__raw_writel(sc_coef_8t[cfilter][phase][3],
				sc->regs + SCALER_CHCOEF + phase * 16);
		__raw_writel(sc_coef_8t[cfilter][phase][2],
				sc->regs + SCALER_CHCOEF + phase * 16 + 4);
		__raw_writel(sc_coef_8t[cfilter][phase][1],
				sc->regs + SCALER_CHCOEF + phase * 16 + 8);
		__raw_writel(sc_coef_8t[cfilter][phase][0],
				sc->regs + SCALER_CHCOEF + phase * 16 + 12);
	}
}