Example #1
0
int fimc40_hwset_scaler(struct fimc_control *ctrl, struct fimc_scaler *sc)
{
	u32 cfg = readl(ctrl->regs + S3C_CISCCTRL);

	cfg &= ~(S3C_CISCCTRL_SCALERBYPASS |
		S3C_CISCCTRL_SCALEUP_H | S3C_CISCCTRL_SCALEUP_V |
		S3C_CISCCTRL_MAIN_V_RATIO_MASK |
		S3C_CISCCTRL_MAIN_H_RATIO_MASK |
		S3C_CISCCTRL_CSCR2Y_WIDE |
		S3C_CISCCTRL_CSCY2R_WIDE);

#ifdef CONFIG_VIDEO_FIMC_RANGE_WIDE
	cfg |= (S3C_CISCCTRL_CSCR2Y_WIDE | S3C_CISCCTRL_CSCY2R_WIDE);
#endif

	if (sc->bypass)
		cfg |= S3C_CISCCTRL_SCALERBYPASS;

	if (sc->scaleup_h)
		cfg |= S3C_CISCCTRL_SCALEUP_H;

	if (sc->scaleup_v)
		cfg |= S3C_CISCCTRL_SCALEUP_V;

	cfg |= S3C_CISCCTRL_MAINHORRATIO(sc->main_hratio);
	cfg |= S3C_CISCCTRL_MAINVERRATIO(sc->main_vratio);

	writel(cfg, ctrl->regs + S3C_CISCCTRL);

	return 0;
}
int fimc_hwset_scaler(struct fimc_control *ctrl)
{
	u32 cfg = readl(ctrl->regs + S3C_CISCCTRL);

	cfg &= ~(S3C_CISCCTRL_SCALERBYPASS |
		S3C_CISCCTRL_SCALEUP_H | S3C_CISCCTRL_SCALEUP_V |
		S3C_CISCCTRL_MAIN_V_RATIO_MASK |
		S3C_CISCCTRL_MAIN_H_RATIO_MASK);
	cfg |= (S3C_CISCCTRL_CSCR2Y_WIDE | S3C_CISCCTRL_CSCY2R_WIDE);

	if (ctrl->sc.bypass)
		cfg |= S3C_CISCCTRL_SCALERBYPASS;

	if (ctrl->sc.scaleup_h)
		cfg |= S3C_CISCCTRL_SCALEUP_H;

	if (ctrl->sc.scaleup_v)
		cfg |= S3C_CISCCTRL_SCALEUP_V;

	cfg |= S3C_CISCCTRL_MAINHORRATIO(ctrl->sc.main_hratio);
	cfg |= S3C_CISCCTRL_MAINVERRATIO(ctrl->sc.main_vratio);

	writel(cfg, ctrl->regs + S3C_CISCCTRL);

	return 0;
}
Example #3
0
int fimc43_hwset_scaler(struct fimc_control *ctrl, struct fimc_scaler *sc)
{
	u32 cfg = readl(ctrl->regs + S3C_CISCCTRL);
	u32 cfg_ext = readl(ctrl->regs + S3C_CIEXTEN);

	cfg &= ~(S3C_CISCCTRL_SCALERBYPASS |
		S3C_CISCCTRL_SCALEUP_H | S3C_CISCCTRL_SCALEUP_V |
		S3C_CISCCTRL_MAIN_V_RATIO_MASK |
		S3C_CISCCTRL_MAIN_H_RATIO_MASK);
	cfg |= (S3C_CISCCTRL_CSCR2Y_WIDE | S3C_CISCCTRL_CSCY2R_WIDE);

	if (sc->bypass)
		cfg |= S3C_CISCCTRL_SCALERBYPASS;

	if (sc->scaleup_h)
		cfg |= S3C_CISCCTRL_SCALEUP_H;

	if (sc->scaleup_v)
		cfg |= S3C_CISCCTRL_SCALEUP_V;

	cfg |= S3C_CISCCTRL_MAINHORRATIO(sc->main_hratio);
	cfg |= S3C_CISCCTRL_MAINVERRATIO(sc->main_vratio);

	writel(cfg, ctrl->regs + S3C_CISCCTRL);

	cfg_ext &= ~S3C_CIEXTEN_MAINHORRATIO_EXT_MASK;
	cfg_ext &= ~S3C_CIEXTEN_MAINVERRATIO_EXT_MASK;

	cfg_ext |= S3C_CIEXTEN_MAINHORRATIO_EXT(sc->main_hratio);
	cfg_ext |= S3C_CIEXTEN_MAINVERRATIO_EXT(sc->main_vratio);

	writel(cfg_ext, ctrl->regs + S3C_CIEXTEN);

	return 0;
}
Example #4
0
void s3c_fimc_set_scaler(struct s3c_fimc_control *ctrl)
{
	struct s3c_fimc_scaler *sc = &ctrl->scaler;
	u32 cfg = (S3C_CISCCTRL_CSCR2Y_WIDE | S3C_CISCCTRL_CSCY2R_WIDE);

	if (sc->bypass)
		cfg |= S3C_CISCCTRL_SCALERBYPASS;

	if (sc->scaleup_h)
		cfg |= S3C_CISCCTRL_SCALEUP_H;

	if (sc->scaleup_v)
		cfg |= S3C_CISCCTRL_SCALEUP_V;

	if (ctrl->in_type == PATH_IN_DMA) {
		if (ctrl->in_frame.format == FORMAT_RGB565)
			cfg |= S3C_CISCCTRL_INRGB_FMT_RGB565;
		else if (ctrl->in_frame.format == FORMAT_RGB666)
			cfg |= S3C_CISCCTRL_INRGB_FMT_RGB666;
		else if (ctrl->in_frame.format == FORMAT_RGB888)
			cfg |= S3C_CISCCTRL_INRGB_FMT_RGB888;
	}

	if (ctrl->out_type == PATH_OUT_DMA) {
		if (ctrl->out_frame.format == FORMAT_RGB565)
			cfg |= S3C_CISCCTRL_OUTRGB_FMT_RGB565;
		else if (ctrl->out_frame.format == FORMAT_RGB666)
			cfg |= S3C_CISCCTRL_OUTRGB_FMT_RGB666;
		else if (ctrl->out_frame.format == FORMAT_RGB888)
			cfg |= S3C_CISCCTRL_OUTRGB_FMT_RGB888;
	} else {
		cfg |= S3C_CISCCTRL_OUTRGB_FMT_RGB888;

		if (ctrl->out_frame.scan == SCAN_TYPE_INTERLACE)
			cfg |= S3C_CISCCTRL_INTERLACE;
		else
			cfg |= S3C_CISCCTRL_PROGRESSIVE;
	}

	cfg |= S3C_CISCCTRL_MAINHORRATIO(sc->main_hratio);
	cfg |= S3C_CISCCTRL_MAINVERRATIO(sc->main_vratio);

	writel(cfg, ctrl->regs + S3C_CISCCTRL);
}