int fimc_hwset_input_rot(struct fimc_control *ctrl, u32 rot, u32 flip) { u32 cfg, val; cfg = readl(ctrl->regs + S3C_CITRGFMT); cfg &= ~S3C_CITRGFMT_INROT90_CLOCKWISE; val = fimc_mapping_rot_flip(rot, flip); if (val & FIMC_ROT) cfg |= S3C_CITRGFMT_INROT90_CLOCKWISE; writel(cfg, ctrl->regs + S3C_CITRGFMT); return 0; }
int fimc_try_fmt_overlay(struct file *filp, void *fh, struct v4l2_format *f) { struct fimc_control *ctrl = ((struct fimc_prv_data *)fh)->ctrl; int ctx_id = ((struct fimc_prv_data *)fh)->ctx_id; struct fimc_ctx *ctx; u32 is_rotate = 0; ctx = &ctrl->out->ctx[ctx_id]; fimc_info1("%s: top(%d) left(%d) width(%d) height(%d)\n", __func__, f->fmt.win.w.top, f->fmt.win.w.left, f->fmt.win.w.width, f->fmt.win.w.height); if (ctx->overlay.mode == FIMC_OVLY_NONE_SINGLE_BUF || (ctx->overlay.mode == FIMC_OVLY_NONE_MULTI_BUF)) return 0; /* Check Overlay Size : Overlay size must be smaller than LCD size. */ is_rotate = fimc_mapping_rot_flip(ctx->rotate, ctx->flip); if (is_rotate & FIMC_ROT) { /* Landscape mode */ if (f->fmt.win.w.width > ctrl->fb.lcd_vres) { fimc_warn("The width is changed %d -> %d\n", f->fmt.win.w.width, ctrl->fb.lcd_vres); f->fmt.win.w.width = ctrl->fb.lcd_vres; } if (f->fmt.win.w.height > ctrl->fb.lcd_hres) { fimc_warn("The height is changed %d -> %d\n", f->fmt.win.w.height, ctrl->fb.lcd_hres); f->fmt.win.w.height = ctrl->fb.lcd_hres; } } else { /* Portrait mode */ if (f->fmt.win.w.width > ctrl->fb.lcd_hres) { fimc_warn("The width is changed %d -> %d\n", f->fmt.win.w.width, ctrl->fb.lcd_hres); f->fmt.win.w.width = ctrl->fb.lcd_hres; } if (f->fmt.win.w.height > ctrl->fb.lcd_vres) { fimc_warn("The height is changed %d -> %d\n", f->fmt.win.w.height, ctrl->fb.lcd_vres); f->fmt.win.w.height = ctrl->fb.lcd_vres; } } return 0; }
int fimc_hwset_input_flip(struct fimc_control *ctrl, u32 rot, u32 flip) { u32 cfg, val; cfg = readl(ctrl->regs + S3C_MSCTRL); cfg &= ~(S3C_MSCTRL_FLIP_X_MIRROR | S3C_MSCTRL_FLIP_Y_MIRROR); val = fimc_mapping_rot_flip(rot, flip); if (val & FIMC_XFLIP) cfg |= S3C_MSCTRL_FLIP_X_MIRROR; if (val & FIMC_YFLIP) cfg |= S3C_MSCTRL_FLIP_Y_MIRROR; writel(cfg, ctrl->regs + S3C_MSCTRL); return 0; }
int fimc_hwset_output_rot_flip(struct fimc_control *ctrl, u32 rot, u32 flip) { u32 cfg, val; cfg = readl(ctrl->regs + S3C_CITRGFMT); cfg &= ~S3C_CITRGFMT_FLIP_MASK; cfg &= ~S3C_CITRGFMT_OUTROT90_CLOCKWISE; val = fimc_mapping_rot_flip(rot, flip); if (val & FIMC_ROT) cfg |= S3C_CITRGFMT_OUTROT90_CLOCKWISE; if (val & FIMC_XFLIP) cfg |= S3C_CITRGFMT_FLIP_X_MIRROR; if (val & FIMC_YFLIP) cfg |= S3C_CITRGFMT_FLIP_Y_MIRROR; writel(cfg, ctrl->regs + S3C_CITRGFMT); return 0; }