int fimc_hwset_input_burst_cnt(struct fimc_control *ctrl, u32 cnt) { u32 cfg = readl(ctrl->regs + S3C_MSCTRL); cfg &= ~S3C_MSCTRL_BURST_CNT_MASK; if (cnt > 4) cnt = 4; else if (cnt == 0) cnt = 4; cfg |= S3C_MSCTRL_SUCCESSIVE_COUNT(cnt); writel(cfg, ctrl->regs + S3C_MSCTRL); return 0; }
void s3c_fimc_set_input_dma(struct s3c_fimc_control *ctrl) { struct s3c_fimc_in_frame *frame = &ctrl->in_frame; u32 cfg; /* for offsets */ cfg = 0; cfg |= S3C_CIIYOFF_HORIZONTAL(frame->offset.y_h); cfg |= S3C_CIIYOFF_VERTICAL(frame->offset.y_v); writel(cfg, ctrl->regs + S3C_CIIYOFF); cfg = 0; cfg |= S3C_CIICBOFF_HORIZONTAL(frame->offset.cb_h); cfg |= S3C_CIICBOFF_VERTICAL(frame->offset.cb_v); writel(cfg, ctrl->regs + S3C_CIICBOFF); cfg = 0; cfg |= S3C_CIICROFF_HORIZONTAL(frame->offset.cr_h); cfg |= S3C_CIICROFF_VERTICAL(frame->offset.cr_v); writel(cfg, ctrl->regs + S3C_CIICROFF); /* for original & real size */ s3c_fimc_set_input_dma_size(ctrl); /* for input dma control */ cfg = (S3C_MSCTRL_SUCCESSIVE_COUNT(4) | S3C_MSCTRL_INPUT_MEMORY); switch (frame->format) { case FORMAT_RGB565: /* fall through */ case FORMAT_RGB666: /* fall through */ case FORMAT_RGB888: cfg |= S3C_MSCTRL_INFORMAT_RGB; break; case FORMAT_YCBCR420: cfg |= S3C_MSCTRL_INFORMAT_YCBCR420; if (frame->planes == 2) cfg |= (S3C_MSCTRL_C_INT_IN_2PLANE | \ (frame->order_2p << S3C_MSCTRL_2PLANE_SHIFT)); else cfg |= S3C_MSCTRL_C_INT_IN_3PLANE; break; case FORMAT_YCBCR422: if (frame->planes == 1) cfg |= (frame->order_1p | \ S3C_MSCTRL_INFORMAT_YCBCR422_1PLANE); else { cfg |= S3C_MSCTRL_INFORMAT_YCBCR422; if (frame->planes == 2) cfg |= (S3C_MSCTRL_C_INT_IN_2PLANE | \ (frame->order_2p << S3C_MSCTRL_2PLANE_SHIFT)); else cfg |= S3C_MSCTRL_C_INT_IN_3PLANE; } break; } writel(cfg, ctrl->regs + S3C_MSCTRL); }