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; }
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; }
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); }