Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[media] s5p-fimc: Refactor the register interface functions

Simplify the register API and use FIMC_REG_ prefix for all register
definitions for consistency with FIMC-LITE. The unused image effect
defines are removed.

Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

authored by

Sylwester Nawrocki and committed by
Mauro Carvalho Chehab
c83a1ff0 693f5c40

+641 -681
+1
drivers/media/video/s5p-fimc/fimc-capture.c
··· 29 29 30 30 #include "fimc-mdevice.h" 31 31 #include "fimc-core.h" 32 + #include "fimc-reg.h" 32 33 33 34 static int fimc_init_capture(struct fimc_dev *fimc) 34 35 {
+11 -10
drivers/media/video/s5p-fimc/fimc-core.c
··· 28 28 #include <media/videobuf2-dma-contig.h> 29 29 30 30 #include "fimc-core.h" 31 + #include "fimc-reg.h" 31 32 #include "fimc-mdevice.h" 32 33 33 34 static char *fimc_clocks[MAX_FIMC_CLOCKS] = { ··· 389 388 void fimc_set_yuv_order(struct fimc_ctx *ctx) 390 389 { 391 390 /* The one only mode supported in SoC. */ 392 - ctx->in_order_2p = S5P_FIMC_LSB_CRCB; 393 - ctx->out_order_2p = S5P_FIMC_LSB_CRCB; 391 + ctx->in_order_2p = FIMC_REG_CIOCTRL_ORDER422_2P_LSB_CRCB; 392 + ctx->out_order_2p = FIMC_REG_CIOCTRL_ORDER422_2P_LSB_CRCB; 394 393 395 394 /* Set order for 1 plane input formats. */ 396 395 switch (ctx->s_frame.fmt->color) { 397 396 case S5P_FIMC_YCRYCB422: 398 - ctx->in_order_1p = S5P_MSCTRL_ORDER422_CBYCRY; 397 + ctx->in_order_1p = FIMC_REG_MSCTRL_ORDER422_CBYCRY; 399 398 break; 400 399 case S5P_FIMC_CBYCRY422: 401 - ctx->in_order_1p = S5P_MSCTRL_ORDER422_YCRYCB; 400 + ctx->in_order_1p = FIMC_REG_MSCTRL_ORDER422_YCRYCB; 402 401 break; 403 402 case S5P_FIMC_CRYCBY422: 404 - ctx->in_order_1p = S5P_MSCTRL_ORDER422_YCBYCR; 403 + ctx->in_order_1p = FIMC_REG_MSCTRL_ORDER422_YCBYCR; 405 404 break; 406 405 case S5P_FIMC_YCBYCR422: 407 406 default: 408 - ctx->in_order_1p = S5P_MSCTRL_ORDER422_CRYCBY; 407 + ctx->in_order_1p = FIMC_REG_MSCTRL_ORDER422_CRYCBY; 409 408 break; 410 409 } 411 410 dbg("ctx->in_order_1p= %d", ctx->in_order_1p); 412 411 413 412 switch (ctx->d_frame.fmt->color) { 414 413 case S5P_FIMC_YCRYCB422: 415 - ctx->out_order_1p = S5P_CIOCTRL_ORDER422_CBYCRY; 414 + ctx->out_order_1p = FIMC_REG_CIOCTRL_ORDER422_CBYCRY; 416 415 break; 417 416 case S5P_FIMC_CBYCRY422: 418 - ctx->out_order_1p = S5P_CIOCTRL_ORDER422_YCRYCB; 417 + ctx->out_order_1p = FIMC_REG_CIOCTRL_ORDER422_YCRYCB; 419 418 break; 420 419 case S5P_FIMC_CRYCBY422: 421 - ctx->out_order_1p = S5P_CIOCTRL_ORDER422_YCBYCR; 420 + ctx->out_order_1p = FIMC_REG_CIOCTRL_ORDER422_YCBYCR; 422 421 break; 423 422 case S5P_FIMC_YCBYCR422: 424 423 default: 425 - ctx->out_order_1p = S5P_CIOCTRL_ORDER422_CRYCBY; 424 + ctx->out_order_1p = FIMC_REG_CIOCTRL_ORDER422_CRYCBY; 426 425 break; 427 426 } 428 427 dbg("ctx->out_order_1p= %d", ctx->out_order_1p);
-118
drivers/media/video/s5p-fimc/fimc-core.h
··· 26 26 #include <media/v4l2-mediabus.h> 27 27 #include <media/s5p_fimc.h> 28 28 29 - #include "regs-fimc.h" 30 - 31 29 #define err(fmt, args...) \ 32 30 printk(KERN_ERR "%s:%d: " fmt "\n", __func__, __LINE__, ##args) 33 31 ··· 103 105 104 106 #define IS_M2M(__strt) ((__strt) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE || \ 105 107 __strt == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) 106 - 107 - /* Cb/Cr chrominance components order for 2 plane Y/CbCr 4:2:2 formats. */ 108 - #define S5P_FIMC_LSB_CRCB S5P_CIOCTRL_ORDER422_2P_LSB_CRCB 109 - 110 - /* The embedded image effect selection */ 111 - #define S5P_FIMC_EFFECT_ORIGINAL S5P_CIIMGEFF_FIN_BYPASS 112 - #define S5P_FIMC_EFFECT_ARBITRARY S5P_CIIMGEFF_FIN_ARBITRARY 113 - #define S5P_FIMC_EFFECT_NEGATIVE S5P_CIIMGEFF_FIN_NEGATIVE 114 - #define S5P_FIMC_EFFECT_ARTFREEZE S5P_CIIMGEFF_FIN_ARTFREEZE 115 - #define S5P_FIMC_EFFECT_EMBOSSING S5P_CIIMGEFF_FIN_EMBOSSING 116 - #define S5P_FIMC_EFFECT_SIKHOUETTE S5P_CIIMGEFF_FIN_SILHOUETTE 117 108 118 109 /* The hardware context state. */ 119 110 #define FIMC_PARAMS (1 << 0) ··· 575 588 }; 576 589 } 577 590 578 - static inline void fimc_hw_clear_irq(struct fimc_dev *dev) 579 - { 580 - u32 cfg = readl(dev->regs + S5P_CIGCTRL); 581 - cfg |= S5P_CIGCTRL_IRQ_CLR; 582 - writel(cfg, dev->regs + S5P_CIGCTRL); 583 - } 584 - 585 - static inline void fimc_hw_enable_scaler(struct fimc_dev *dev, bool on) 586 - { 587 - u32 cfg = readl(dev->regs + S5P_CISCCTRL); 588 - if (on) 589 - cfg |= S5P_CISCCTRL_SCALERSTART; 590 - else 591 - cfg &= ~S5P_CISCCTRL_SCALERSTART; 592 - writel(cfg, dev->regs + S5P_CISCCTRL); 593 - } 594 - 595 - static inline void fimc_hw_activate_input_dma(struct fimc_dev *dev, bool on) 596 - { 597 - u32 cfg = readl(dev->regs + S5P_MSCTRL); 598 - if (on) 599 - cfg |= S5P_MSCTRL_ENVID; 600 - else 601 - cfg &= ~S5P_MSCTRL_ENVID; 602 - writel(cfg, dev->regs + S5P_MSCTRL); 603 - } 604 - 605 - static inline void fimc_hw_dis_capture(struct fimc_dev *dev) 606 - { 607 - u32 cfg = readl(dev->regs + S5P_CIIMGCPT); 608 - cfg &= ~(S5P_CIIMGCPT_IMGCPTEN | S5P_CIIMGCPT_IMGCPTEN_SC); 609 - writel(cfg, dev->regs + S5P_CIIMGCPT); 610 - } 611 - 612 - /** 613 - * fimc_hw_set_dma_seq - configure output DMA buffer sequence 614 - * @mask: each bit corresponds to one of 32 output buffer registers set 615 - * 1 to include buffer in the sequence, 0 to disable 616 - * 617 - * This function mask output DMA ring buffers, i.e. it allows to configure 618 - * which of the output buffer address registers will be used by the DMA 619 - * engine. 620 - */ 621 - static inline void fimc_hw_set_dma_seq(struct fimc_dev *dev, u32 mask) 622 - { 623 - writel(mask, dev->regs + S5P_CIFCNTSEQ); 624 - } 625 - 626 591 static inline struct fimc_frame *ctx_get_frame(struct fimc_ctx *ctx, 627 592 enum v4l2_buf_type type) 628 593 { ··· 595 656 596 657 return frame; 597 658 } 598 - 599 - /* Return an index to the buffer actually being written. */ 600 - static inline u32 fimc_hw_get_frame_index(struct fimc_dev *dev) 601 - { 602 - u32 reg; 603 - 604 - if (dev->variant->has_cistatus2) { 605 - reg = readl(dev->regs + S5P_CISTATUS2) & 0x3F; 606 - return reg > 0 ? --reg : reg; 607 - } else { 608 - reg = readl(dev->regs + S5P_CISTATUS); 609 - return (reg & S5P_CISTATUS_FRAMECNT_MASK) >> 610 - S5P_CISTATUS_FRAMECNT_SHIFT; 611 - } 612 - } 613 - 614 - /* -----------------------------------------------------*/ 615 - /* fimc-reg.c */ 616 - void fimc_hw_reset(struct fimc_dev *fimc); 617 - void fimc_hw_set_rotation(struct fimc_ctx *ctx); 618 - void fimc_hw_set_target_format(struct fimc_ctx *ctx); 619 - void fimc_hw_set_out_dma(struct fimc_ctx *ctx); 620 - void fimc_hw_en_lastirq(struct fimc_dev *fimc, int enable); 621 - void fimc_hw_en_irq(struct fimc_dev *fimc, int enable); 622 - void fimc_hw_set_prescaler(struct fimc_ctx *ctx); 623 - void fimc_hw_set_mainscaler(struct fimc_ctx *ctx); 624 - void fimc_hw_en_capture(struct fimc_ctx *ctx); 625 - void fimc_hw_set_effect(struct fimc_ctx *ctx, bool active); 626 - void fimc_hw_set_rgb_alpha(struct fimc_ctx *ctx); 627 - void fimc_hw_set_in_dma(struct fimc_ctx *ctx); 628 - void fimc_hw_set_input_path(struct fimc_ctx *ctx); 629 - void fimc_hw_set_output_path(struct fimc_ctx *ctx); 630 - void fimc_hw_set_input_addr(struct fimc_dev *fimc, struct fimc_addr *paddr); 631 - void fimc_hw_set_output_addr(struct fimc_dev *fimc, struct fimc_addr *paddr, 632 - int index); 633 - int fimc_hw_set_camera_source(struct fimc_dev *fimc, 634 - struct s5p_fimc_isp_info *cam); 635 - int fimc_hw_set_camera_offset(struct fimc_dev *fimc, struct fimc_frame *f); 636 - int fimc_hw_set_camera_polarity(struct fimc_dev *fimc, 637 - struct s5p_fimc_isp_info *cam); 638 - int fimc_hw_set_camera_type(struct fimc_dev *fimc, 639 - struct s5p_fimc_isp_info *cam); 640 659 641 660 /* -----------------------------------------------------*/ 642 661 /* fimc-core.c */ ··· 641 744 void *arg); 642 745 int fimc_capture_suspend(struct fimc_dev *fimc); 643 746 int fimc_capture_resume(struct fimc_dev *fimc); 644 - 645 - /* Locking: the caller holds fimc->slock */ 646 - static inline void fimc_activate_capture(struct fimc_ctx *ctx) 647 - { 648 - fimc_hw_enable_scaler(ctx->fimc_dev, ctx->scaler.enabled); 649 - fimc_hw_en_capture(ctx); 650 - } 651 - 652 - static inline void fimc_deactivate_capture(struct fimc_dev *fimc) 653 - { 654 - fimc_hw_en_lastirq(fimc, true); 655 - fimc_hw_dis_capture(fimc); 656 - fimc_hw_enable_scaler(fimc, false); 657 - fimc_hw_en_lastirq(fimc, false); 658 - } 659 747 660 748 /* 661 749 * Buffer list manipulation functions. Must be called with fimc.slock held.
+1
drivers/media/video/s5p-fimc/fimc-m2m.c
··· 28 28 #include <media/videobuf2-dma-contig.h> 29 29 30 30 #include "fimc-core.h" 31 + #include "fimc-reg.h" 31 32 #include "fimc-mdevice.h" 32 33 33 34
+302 -252
drivers/media/video/s5p-fimc/fimc-reg.c
··· 12 12 13 13 #include <linux/io.h> 14 14 #include <linux/delay.h> 15 - #include <mach/map.h> 16 15 #include <media/s5p_fimc.h> 17 16 17 + #include "fimc-reg.h" 18 18 #include "fimc-core.h" 19 19 20 20 ··· 22 22 { 23 23 u32 cfg; 24 24 25 - cfg = readl(dev->regs + S5P_CISRCFMT); 26 - cfg |= S5P_CISRCFMT_ITU601_8BIT; 27 - writel(cfg, dev->regs + S5P_CISRCFMT); 25 + cfg = readl(dev->regs + FIMC_REG_CISRCFMT); 26 + cfg |= FIMC_REG_CISRCFMT_ITU601_8BIT; 27 + writel(cfg, dev->regs + FIMC_REG_CISRCFMT); 28 28 29 29 /* Software reset. */ 30 - cfg = readl(dev->regs + S5P_CIGCTRL); 31 - cfg |= (S5P_CIGCTRL_SWRST | S5P_CIGCTRL_IRQ_LEVEL); 32 - writel(cfg, dev->regs + S5P_CIGCTRL); 30 + cfg = readl(dev->regs + FIMC_REG_CIGCTRL); 31 + cfg |= (FIMC_REG_CIGCTRL_SWRST | FIMC_REG_CIGCTRL_IRQ_LEVEL); 32 + writel(cfg, dev->regs + FIMC_REG_CIGCTRL); 33 33 udelay(10); 34 34 35 - cfg = readl(dev->regs + S5P_CIGCTRL); 36 - cfg &= ~S5P_CIGCTRL_SWRST; 37 - writel(cfg, dev->regs + S5P_CIGCTRL); 35 + cfg = readl(dev->regs + FIMC_REG_CIGCTRL); 36 + cfg &= ~FIMC_REG_CIGCTRL_SWRST; 37 + writel(cfg, dev->regs + FIMC_REG_CIGCTRL); 38 38 39 39 if (dev->variant->out_buf_count > 4) 40 40 fimc_hw_set_dma_seq(dev, 0xF); ··· 42 42 43 43 static u32 fimc_hw_get_in_flip(struct fimc_ctx *ctx) 44 44 { 45 - u32 flip = S5P_MSCTRL_FLIP_NORMAL; 45 + u32 flip = FIMC_REG_MSCTRL_FLIP_NORMAL; 46 46 47 47 if (ctx->hflip) 48 - flip = S5P_MSCTRL_FLIP_X_MIRROR; 48 + flip = FIMC_REG_MSCTRL_FLIP_X_MIRROR; 49 49 if (ctx->vflip) 50 - flip = S5P_MSCTRL_FLIP_Y_MIRROR; 50 + flip = FIMC_REG_MSCTRL_FLIP_Y_MIRROR; 51 51 52 52 if (ctx->rotation <= 90) 53 53 return flip; 54 54 55 - return (flip ^ S5P_MSCTRL_FLIP_180) & S5P_MSCTRL_FLIP_180; 55 + return (flip ^ FIMC_REG_MSCTRL_FLIP_180) & FIMC_REG_MSCTRL_FLIP_180; 56 56 } 57 57 58 58 static u32 fimc_hw_get_target_flip(struct fimc_ctx *ctx) 59 59 { 60 - u32 flip = S5P_CITRGFMT_FLIP_NORMAL; 60 + u32 flip = FIMC_REG_CITRGFMT_FLIP_NORMAL; 61 61 62 62 if (ctx->hflip) 63 - flip |= S5P_CITRGFMT_FLIP_X_MIRROR; 63 + flip |= FIMC_REG_CITRGFMT_FLIP_X_MIRROR; 64 64 if (ctx->vflip) 65 - flip |= S5P_CITRGFMT_FLIP_Y_MIRROR; 65 + flip |= FIMC_REG_CITRGFMT_FLIP_Y_MIRROR; 66 66 67 67 if (ctx->rotation <= 90) 68 68 return flip; 69 69 70 - return (flip ^ S5P_CITRGFMT_FLIP_180) & S5P_CITRGFMT_FLIP_180; 70 + return (flip ^ FIMC_REG_CITRGFMT_FLIP_180) & FIMC_REG_CITRGFMT_FLIP_180; 71 71 } 72 72 73 73 void fimc_hw_set_rotation(struct fimc_ctx *ctx) ··· 75 75 u32 cfg, flip; 76 76 struct fimc_dev *dev = ctx->fimc_dev; 77 77 78 - cfg = readl(dev->regs + S5P_CITRGFMT); 79 - cfg &= ~(S5P_CITRGFMT_INROT90 | S5P_CITRGFMT_OUTROT90 | 80 - S5P_CITRGFMT_FLIP_180); 78 + cfg = readl(dev->regs + FIMC_REG_CITRGFMT); 79 + cfg &= ~(FIMC_REG_CITRGFMT_INROT90 | FIMC_REG_CITRGFMT_OUTROT90 | 80 + FIMC_REG_CITRGFMT_FLIP_180); 81 81 82 82 /* 83 83 * The input and output rotator cannot work simultaneously. ··· 86 86 */ 87 87 if (ctx->rotation == 90 || ctx->rotation == 270) { 88 88 if (ctx->out_path == FIMC_LCDFIFO) 89 - cfg |= S5P_CITRGFMT_INROT90; 89 + cfg |= FIMC_REG_CITRGFMT_INROT90; 90 90 else 91 - cfg |= S5P_CITRGFMT_OUTROT90; 91 + cfg |= FIMC_REG_CITRGFMT_OUTROT90; 92 92 } 93 93 94 94 if (ctx->out_path == FIMC_DMA) { 95 95 cfg |= fimc_hw_get_target_flip(ctx); 96 - writel(cfg, dev->regs + S5P_CITRGFMT); 96 + writel(cfg, dev->regs + FIMC_REG_CITRGFMT); 97 97 } else { 98 98 /* LCD FIFO path */ 99 - flip = readl(dev->regs + S5P_MSCTRL); 100 - flip &= ~S5P_MSCTRL_FLIP_MASK; 99 + flip = readl(dev->regs + FIMC_REG_MSCTRL); 100 + flip &= ~FIMC_REG_MSCTRL_FLIP_MASK; 101 101 flip |= fimc_hw_get_in_flip(ctx); 102 - writel(flip, dev->regs + S5P_MSCTRL); 102 + writel(flip, dev->regs + FIMC_REG_MSCTRL); 103 103 } 104 104 } 105 105 ··· 110 110 struct fimc_frame *frame = &ctx->d_frame; 111 111 112 112 dbg("w= %d, h= %d color: %d", frame->width, 113 - frame->height, frame->fmt->color); 113 + frame->height, frame->fmt->color); 114 114 115 - cfg = readl(dev->regs + S5P_CITRGFMT); 116 - cfg &= ~(S5P_CITRGFMT_FMT_MASK | S5P_CITRGFMT_HSIZE_MASK | 117 - S5P_CITRGFMT_VSIZE_MASK); 115 + cfg = readl(dev->regs + FIMC_REG_CITRGFMT); 116 + cfg &= ~(FIMC_REG_CITRGFMT_FMT_MASK | FIMC_REG_CITRGFMT_HSIZE_MASK | 117 + FIMC_REG_CITRGFMT_VSIZE_MASK); 118 118 119 119 switch (frame->fmt->color) { 120 120 case S5P_FIMC_RGB444...S5P_FIMC_RGB888: 121 - cfg |= S5P_CITRGFMT_RGB; 121 + cfg |= FIMC_REG_CITRGFMT_RGB; 122 122 break; 123 123 case S5P_FIMC_YCBCR420: 124 - cfg |= S5P_CITRGFMT_YCBCR420; 124 + cfg |= FIMC_REG_CITRGFMT_YCBCR420; 125 125 break; 126 126 case S5P_FIMC_YCBYCR422...S5P_FIMC_CRYCBY422: 127 127 if (frame->fmt->colplanes == 1) 128 - cfg |= S5P_CITRGFMT_YCBCR422_1P; 128 + cfg |= FIMC_REG_CITRGFMT_YCBCR422_1P; 129 129 else 130 - cfg |= S5P_CITRGFMT_YCBCR422; 130 + cfg |= FIMC_REG_CITRGFMT_YCBCR422; 131 131 break; 132 132 default: 133 133 break; 134 134 } 135 135 136 - if (ctx->rotation == 90 || ctx->rotation == 270) { 137 - cfg |= S5P_CITRGFMT_HSIZE(frame->height); 138 - cfg |= S5P_CITRGFMT_VSIZE(frame->width); 139 - } else { 136 + if (ctx->rotation == 90 || ctx->rotation == 270) 137 + cfg |= (frame->height << 16) | frame->width; 138 + else 139 + cfg |= (frame->width << 16) | frame->height; 140 140 141 - cfg |= S5P_CITRGFMT_HSIZE(frame->width); 142 - cfg |= S5P_CITRGFMT_VSIZE(frame->height); 143 - } 141 + writel(cfg, dev->regs + FIMC_REG_CITRGFMT); 144 142 145 - writel(cfg, dev->regs + S5P_CITRGFMT); 146 - 147 - cfg = readl(dev->regs + S5P_CITAREA) & ~S5P_CITAREA_MASK; 143 + cfg = readl(dev->regs + FIMC_REG_CITAREA); 144 + cfg &= ~FIMC_REG_CITAREA_MASK; 148 145 cfg |= (frame->width * frame->height); 149 - writel(cfg, dev->regs + S5P_CITAREA); 146 + writel(cfg, dev->regs + FIMC_REG_CITAREA); 150 147 } 151 148 152 149 static void fimc_hw_set_out_dma_size(struct fimc_ctx *ctx) ··· 152 155 struct fimc_frame *frame = &ctx->d_frame; 153 156 u32 cfg; 154 157 155 - cfg = S5P_ORIG_SIZE_HOR(frame->f_width); 156 - cfg |= S5P_ORIG_SIZE_VER(frame->f_height); 157 - writel(cfg, dev->regs + S5P_ORGOSIZE); 158 + cfg = (frame->f_height << 16) | frame->f_width; 159 + writel(cfg, dev->regs + FIMC_REG_ORGOSIZE); 158 160 159 161 /* Select color space conversion equation (HD/SD size).*/ 160 - cfg = readl(dev->regs + S5P_CIGCTRL); 162 + cfg = readl(dev->regs + FIMC_REG_CIGCTRL); 161 163 if (frame->f_width >= 1280) /* HD */ 162 - cfg |= S5P_CIGCTRL_CSC_ITU601_709; 164 + cfg |= FIMC_REG_CIGCTRL_CSC_ITU601_709; 163 165 else /* SD */ 164 - cfg &= ~S5P_CIGCTRL_CSC_ITU601_709; 165 - writel(cfg, dev->regs + S5P_CIGCTRL); 166 + cfg &= ~FIMC_REG_CIGCTRL_CSC_ITU601_709; 167 + writel(cfg, dev->regs + FIMC_REG_CIGCTRL); 166 168 167 169 } 168 170 169 171 void fimc_hw_set_out_dma(struct fimc_ctx *ctx) 170 172 { 171 - u32 cfg; 172 173 struct fimc_dev *dev = ctx->fimc_dev; 173 174 struct fimc_frame *frame = &ctx->d_frame; 174 175 struct fimc_dma_offset *offset = &frame->dma_offset; 175 176 struct fimc_fmt *fmt = frame->fmt; 177 + u32 cfg; 176 178 177 179 /* Set the input dma offsets. */ 178 - cfg = 0; 179 - cfg |= S5P_CIO_OFFS_HOR(offset->y_h); 180 - cfg |= S5P_CIO_OFFS_VER(offset->y_v); 181 - writel(cfg, dev->regs + S5P_CIOYOFF); 180 + cfg = (offset->y_v << 16) | offset->y_h; 181 + writel(cfg, dev->regs + FIMC_REG_CIOYOFF); 182 182 183 - cfg = 0; 184 - cfg |= S5P_CIO_OFFS_HOR(offset->cb_h); 185 - cfg |= S5P_CIO_OFFS_VER(offset->cb_v); 186 - writel(cfg, dev->regs + S5P_CIOCBOFF); 183 + cfg = (offset->cb_v << 16) | offset->cb_h; 184 + writel(cfg, dev->regs + FIMC_REG_CIOCBOFF); 187 185 188 - cfg = 0; 189 - cfg |= S5P_CIO_OFFS_HOR(offset->cr_h); 190 - cfg |= S5P_CIO_OFFS_VER(offset->cr_v); 191 - writel(cfg, dev->regs + S5P_CIOCROFF); 186 + cfg = (offset->cr_v << 16) | offset->cr_h; 187 + writel(cfg, dev->regs + FIMC_REG_CIOCROFF); 192 188 193 189 fimc_hw_set_out_dma_size(ctx); 194 190 195 191 /* Configure chroma components order. */ 196 - cfg = readl(dev->regs + S5P_CIOCTRL); 192 + cfg = readl(dev->regs + FIMC_REG_CIOCTRL); 197 193 198 - cfg &= ~(S5P_CIOCTRL_ORDER2P_MASK | S5P_CIOCTRL_ORDER422_MASK | 199 - S5P_CIOCTRL_YCBCR_PLANE_MASK | S5P_CIOCTRL_RGB16FMT_MASK); 194 + cfg &= ~(FIMC_REG_CIOCTRL_ORDER2P_MASK | 195 + FIMC_REG_CIOCTRL_ORDER422_MASK | 196 + FIMC_REG_CIOCTRL_YCBCR_PLANE_MASK | 197 + FIMC_REG_CIOCTRL_RGB16FMT_MASK); 200 198 201 199 if (fmt->colplanes == 1) 202 200 cfg |= ctx->out_order_1p; 203 201 else if (fmt->colplanes == 2) 204 - cfg |= ctx->out_order_2p | S5P_CIOCTRL_YCBCR_2PLANE; 202 + cfg |= ctx->out_order_2p | FIMC_REG_CIOCTRL_YCBCR_2PLANE; 205 203 else if (fmt->colplanes == 3) 206 - cfg |= S5P_CIOCTRL_YCBCR_3PLANE; 204 + cfg |= FIMC_REG_CIOCTRL_YCBCR_3PLANE; 207 205 208 206 if (fmt->color == S5P_FIMC_RGB565) 209 - cfg |= S5P_CIOCTRL_RGB565; 207 + cfg |= FIMC_REG_CIOCTRL_RGB565; 210 208 else if (fmt->color == S5P_FIMC_RGB555) 211 - cfg |= S5P_CIOCTRL_ARGB1555; 209 + cfg |= FIMC_REG_CIOCTRL_ARGB1555; 212 210 else if (fmt->color == S5P_FIMC_RGB444) 213 - cfg |= S5P_CIOCTRL_ARGB4444; 211 + cfg |= FIMC_REG_CIOCTRL_ARGB4444; 214 212 215 - writel(cfg, dev->regs + S5P_CIOCTRL); 213 + writel(cfg, dev->regs + FIMC_REG_CIOCTRL); 216 214 } 217 215 218 216 static void fimc_hw_en_autoload(struct fimc_dev *dev, int enable) 219 217 { 220 - u32 cfg = readl(dev->regs + S5P_ORGISIZE); 218 + u32 cfg = readl(dev->regs + FIMC_REG_ORGISIZE); 221 219 if (enable) 222 - cfg |= S5P_CIREAL_ISIZE_AUTOLOAD_EN; 220 + cfg |= FIMC_REG_CIREAL_ISIZE_AUTOLOAD_EN; 223 221 else 224 - cfg &= ~S5P_CIREAL_ISIZE_AUTOLOAD_EN; 225 - writel(cfg, dev->regs + S5P_ORGISIZE); 222 + cfg &= ~FIMC_REG_CIREAL_ISIZE_AUTOLOAD_EN; 223 + writel(cfg, dev->regs + FIMC_REG_ORGISIZE); 226 224 } 227 225 228 226 void fimc_hw_en_lastirq(struct fimc_dev *dev, int enable) 229 227 { 230 - u32 cfg = readl(dev->regs + S5P_CIOCTRL); 228 + u32 cfg = readl(dev->regs + FIMC_REG_CIOCTRL); 231 229 if (enable) 232 - cfg |= S5P_CIOCTRL_LASTIRQ_ENABLE; 230 + cfg |= FIMC_REG_CIOCTRL_LASTIRQ_ENABLE; 233 231 else 234 - cfg &= ~S5P_CIOCTRL_LASTIRQ_ENABLE; 235 - writel(cfg, dev->regs + S5P_CIOCTRL); 232 + cfg &= ~FIMC_REG_CIOCTRL_LASTIRQ_ENABLE; 233 + writel(cfg, dev->regs + FIMC_REG_CIOCTRL); 236 234 } 237 235 238 236 void fimc_hw_set_prescaler(struct fimc_ctx *ctx) ··· 237 245 u32 cfg, shfactor; 238 246 239 247 shfactor = 10 - (sc->hfactor + sc->vfactor); 248 + cfg = shfactor << 28; 240 249 241 - cfg = S5P_CISCPRERATIO_SHFACTOR(shfactor); 242 - cfg |= S5P_CISCPRERATIO_HOR(sc->pre_hratio); 243 - cfg |= S5P_CISCPRERATIO_VER(sc->pre_vratio); 244 - writel(cfg, dev->regs + S5P_CISCPRERATIO); 250 + cfg |= (sc->pre_hratio << 16) | sc->pre_vratio; 251 + writel(cfg, dev->regs + FIMC_REG_CISCPRERATIO); 245 252 246 - cfg = S5P_CISCPREDST_WIDTH(sc->pre_dst_width); 247 - cfg |= S5P_CISCPREDST_HEIGHT(sc->pre_dst_height); 248 - writel(cfg, dev->regs + S5P_CISCPREDST); 253 + cfg = (sc->pre_dst_width << 16) | sc->pre_dst_height; 254 + writel(cfg, dev->regs + FIMC_REG_CISCPREDST); 249 255 } 250 256 251 257 static void fimc_hw_set_scaler(struct fimc_ctx *ctx) ··· 253 263 struct fimc_frame *src_frame = &ctx->s_frame; 254 264 struct fimc_frame *dst_frame = &ctx->d_frame; 255 265 256 - u32 cfg = readl(dev->regs + S5P_CISCCTRL); 266 + u32 cfg = readl(dev->regs + FIMC_REG_CISCCTRL); 257 267 258 - cfg &= ~(S5P_CISCCTRL_CSCR2Y_WIDE | S5P_CISCCTRL_CSCY2R_WIDE | 259 - S5P_CISCCTRL_SCALEUP_H | S5P_CISCCTRL_SCALEUP_V | 260 - S5P_CISCCTRL_SCALERBYPASS | S5P_CISCCTRL_ONE2ONE | 261 - S5P_CISCCTRL_INRGB_FMT_MASK | S5P_CISCCTRL_OUTRGB_FMT_MASK | 262 - S5P_CISCCTRL_INTERLACE | S5P_CISCCTRL_RGB_EXT); 268 + cfg &= ~(FIMC_REG_CISCCTRL_CSCR2Y_WIDE | FIMC_REG_CISCCTRL_CSCY2R_WIDE | 269 + FIMC_REG_CISCCTRL_SCALEUP_H | FIMC_REG_CISCCTRL_SCALEUP_V | 270 + FIMC_REG_CISCCTRL_SCALERBYPASS | FIMC_REG_CISCCTRL_ONE2ONE | 271 + FIMC_REG_CISCCTRL_INRGB_FMT_MASK | FIMC_REG_CISCCTRL_OUTRGB_FMT_MASK | 272 + FIMC_REG_CISCCTRL_INTERLACE | FIMC_REG_CISCCTRL_RGB_EXT); 263 273 264 274 if (!(ctx->flags & FIMC_COLOR_RANGE_NARROW)) 265 - cfg |= (S5P_CISCCTRL_CSCR2Y_WIDE | S5P_CISCCTRL_CSCY2R_WIDE); 275 + cfg |= (FIMC_REG_CISCCTRL_CSCR2Y_WIDE | 276 + FIMC_REG_CISCCTRL_CSCY2R_WIDE); 266 277 267 278 if (!sc->enabled) 268 - cfg |= S5P_CISCCTRL_SCALERBYPASS; 279 + cfg |= FIMC_REG_CISCCTRL_SCALERBYPASS; 269 280 270 281 if (sc->scaleup_h) 271 - cfg |= S5P_CISCCTRL_SCALEUP_H; 282 + cfg |= FIMC_REG_CISCCTRL_SCALEUP_H; 272 283 273 284 if (sc->scaleup_v) 274 - cfg |= S5P_CISCCTRL_SCALEUP_V; 285 + cfg |= FIMC_REG_CISCCTRL_SCALEUP_V; 275 286 276 287 if (sc->copy_mode) 277 - cfg |= S5P_CISCCTRL_ONE2ONE; 288 + cfg |= FIMC_REG_CISCCTRL_ONE2ONE; 278 289 279 290 if (ctx->in_path == FIMC_DMA) { 280 291 switch (src_frame->fmt->color) { 281 292 case S5P_FIMC_RGB565: 282 - cfg |= S5P_CISCCTRL_INRGB_FMT_RGB565; 293 + cfg |= FIMC_REG_CISCCTRL_INRGB_FMT_RGB565; 283 294 break; 284 295 case S5P_FIMC_RGB666: 285 - cfg |= S5P_CISCCTRL_INRGB_FMT_RGB666; 296 + cfg |= FIMC_REG_CISCCTRL_INRGB_FMT_RGB666; 286 297 break; 287 298 case S5P_FIMC_RGB888: 288 - cfg |= S5P_CISCCTRL_INRGB_FMT_RGB888; 299 + cfg |= FIMC_REG_CISCCTRL_INRGB_FMT_RGB888; 289 300 break; 290 301 } 291 302 } ··· 295 304 u32 color = dst_frame->fmt->color; 296 305 297 306 if (color >= S5P_FIMC_RGB444 && color <= S5P_FIMC_RGB565) 298 - cfg |= S5P_CISCCTRL_OUTRGB_FMT_RGB565; 307 + cfg |= FIMC_REG_CISCCTRL_OUTRGB_FMT_RGB565; 299 308 else if (color == S5P_FIMC_RGB666) 300 - cfg |= S5P_CISCCTRL_OUTRGB_FMT_RGB666; 309 + cfg |= FIMC_REG_CISCCTRL_OUTRGB_FMT_RGB666; 301 310 else if (color == S5P_FIMC_RGB888) 302 - cfg |= S5P_CISCCTRL_OUTRGB_FMT_RGB888; 311 + cfg |= FIMC_REG_CISCCTRL_OUTRGB_FMT_RGB888; 303 312 } else { 304 - cfg |= S5P_CISCCTRL_OUTRGB_FMT_RGB888; 313 + cfg |= FIMC_REG_CISCCTRL_OUTRGB_FMT_RGB888; 305 314 306 315 if (ctx->flags & FIMC_SCAN_MODE_INTERLACED) 307 - cfg |= S5P_CISCCTRL_INTERLACE; 316 + cfg |= FIMC_REG_CISCCTRL_INTERLACE; 308 317 } 309 318 310 - writel(cfg, dev->regs + S5P_CISCCTRL); 319 + writel(cfg, dev->regs + FIMC_REG_CISCCTRL); 311 320 } 312 321 313 322 void fimc_hw_set_mainscaler(struct fimc_ctx *ctx) ··· 318 327 u32 cfg; 319 328 320 329 dbg("main_hratio= 0x%X main_vratio= 0x%X", 321 - sc->main_hratio, sc->main_vratio); 330 + sc->main_hratio, sc->main_vratio); 322 331 323 332 fimc_hw_set_scaler(ctx); 324 333 325 - cfg = readl(dev->regs + S5P_CISCCTRL); 326 - cfg &= ~(S5P_CISCCTRL_MHRATIO_MASK | S5P_CISCCTRL_MVRATIO_MASK); 334 + cfg = readl(dev->regs + FIMC_REG_CISCCTRL); 335 + cfg &= ~(FIMC_REG_CISCCTRL_MHRATIO_MASK | 336 + FIMC_REG_CISCCTRL_MVRATIO_MASK); 327 337 328 338 if (variant->has_mainscaler_ext) { 329 - cfg |= S5P_CISCCTRL_MHRATIO_EXT(sc->main_hratio); 330 - cfg |= S5P_CISCCTRL_MVRATIO_EXT(sc->main_vratio); 331 - writel(cfg, dev->regs + S5P_CISCCTRL); 339 + cfg |= FIMC_REG_CISCCTRL_MHRATIO_EXT(sc->main_hratio); 340 + cfg |= FIMC_REG_CISCCTRL_MVRATIO_EXT(sc->main_vratio); 341 + writel(cfg, dev->regs + FIMC_REG_CISCCTRL); 332 342 333 - cfg = readl(dev->regs + S5P_CIEXTEN); 343 + cfg = readl(dev->regs + FIMC_REG_CIEXTEN); 334 344 335 - cfg &= ~(S5P_CIEXTEN_MVRATIO_EXT_MASK | 336 - S5P_CIEXTEN_MHRATIO_EXT_MASK); 337 - cfg |= S5P_CIEXTEN_MHRATIO_EXT(sc->main_hratio); 338 - cfg |= S5P_CIEXTEN_MVRATIO_EXT(sc->main_vratio); 339 - writel(cfg, dev->regs + S5P_CIEXTEN); 345 + cfg &= ~(FIMC_REG_CIEXTEN_MVRATIO_EXT_MASK | 346 + FIMC_REG_CIEXTEN_MHRATIO_EXT_MASK); 347 + cfg |= FIMC_REG_CIEXTEN_MHRATIO_EXT(sc->main_hratio); 348 + cfg |= FIMC_REG_CIEXTEN_MVRATIO_EXT(sc->main_vratio); 349 + writel(cfg, dev->regs + FIMC_REG_CIEXTEN); 340 350 } else { 341 - cfg |= S5P_CISCCTRL_MHRATIO(sc->main_hratio); 342 - cfg |= S5P_CISCCTRL_MVRATIO(sc->main_vratio); 343 - writel(cfg, dev->regs + S5P_CISCCTRL); 351 + cfg |= FIMC_REG_CISCCTRL_MHRATIO(sc->main_hratio); 352 + cfg |= FIMC_REG_CISCCTRL_MVRATIO(sc->main_vratio); 353 + writel(cfg, dev->regs + FIMC_REG_CISCCTRL); 344 354 } 345 355 } 346 356 ··· 349 357 { 350 358 struct fimc_dev *dev = ctx->fimc_dev; 351 359 352 - u32 cfg = readl(dev->regs + S5P_CIIMGCPT); 360 + u32 cfg = readl(dev->regs + FIMC_REG_CIIMGCPT); 353 361 354 362 if (ctx->out_path == FIMC_DMA) { 355 363 /* one shot mode */ 356 - cfg |= S5P_CIIMGCPT_CPT_FREN_ENABLE | S5P_CIIMGCPT_IMGCPTEN; 364 + cfg |= FIMC_REG_CIIMGCPT_CPT_FREN_ENABLE | 365 + FIMC_REG_CIIMGCPT_IMGCPTEN; 357 366 } else { 358 367 /* Continuous frame capture mode (freerun). */ 359 - cfg &= ~(S5P_CIIMGCPT_CPT_FREN_ENABLE | 360 - S5P_CIIMGCPT_CPT_FRMOD_CNT); 361 - cfg |= S5P_CIIMGCPT_IMGCPTEN; 368 + cfg &= ~(FIMC_REG_CIIMGCPT_CPT_FREN_ENABLE | 369 + FIMC_REG_CIIMGCPT_CPT_FRMOD_CNT); 370 + cfg |= FIMC_REG_CIIMGCPT_IMGCPTEN; 362 371 } 363 372 364 373 if (ctx->scaler.enabled) 365 - cfg |= S5P_CIIMGCPT_IMGCPTEN_SC; 374 + cfg |= FIMC_REG_CIIMGCPT_IMGCPTEN_SC; 366 375 367 - writel(cfg | S5P_CIIMGCPT_IMGCPTEN, dev->regs + S5P_CIIMGCPT); 376 + cfg |= FIMC_REG_CIIMGCPT_IMGCPTEN; 377 + writel(cfg, dev->regs + FIMC_REG_CIIMGCPT); 368 378 } 369 379 370 380 void fimc_hw_set_effect(struct fimc_ctx *ctx, bool active) ··· 376 382 u32 cfg = 0; 377 383 378 384 if (active) { 379 - cfg |= S5P_CIIMGEFF_IE_SC_AFTER | S5P_CIIMGEFF_IE_ENABLE; 385 + cfg |= FIMC_REG_CIIMGEFF_IE_SC_AFTER | 386 + FIMC_REG_CIIMGEFF_IE_ENABLE; 380 387 cfg |= effect->type; 381 - if (effect->type == S5P_FIMC_EFFECT_ARBITRARY) { 382 - cfg |= S5P_CIIMGEFF_PAT_CB(effect->pat_cb); 383 - cfg |= S5P_CIIMGEFF_PAT_CR(effect->pat_cr); 384 - } 388 + if (effect->type == FIMC_REG_CIIMGEFF_FIN_ARBITRARY) 389 + cfg |= (effect->pat_cb << 13) | effect->pat_cr; 385 390 } 386 391 387 - writel(cfg, dev->regs + S5P_CIIMGEFF); 392 + writel(cfg, dev->regs + FIMC_REG_CIIMGEFF); 388 393 } 389 394 390 395 void fimc_hw_set_rgb_alpha(struct fimc_ctx *ctx) ··· 395 402 if (!(frame->fmt->flags & FMT_HAS_ALPHA)) 396 403 return; 397 404 398 - cfg = readl(dev->regs + S5P_CIOCTRL); 399 - cfg &= ~S5P_CIOCTRL_ALPHA_OUT_MASK; 405 + cfg = readl(dev->regs + FIMC_REG_CIOCTRL); 406 + cfg &= ~FIMC_REG_CIOCTRL_ALPHA_OUT_MASK; 400 407 cfg |= (frame->alpha << 4); 401 - writel(cfg, dev->regs + S5P_CIOCTRL); 408 + writel(cfg, dev->regs + FIMC_REG_CIOCTRL); 402 409 } 403 410 404 411 static void fimc_hw_set_in_dma_size(struct fimc_ctx *ctx) ··· 409 416 u32 cfg_r = 0; 410 417 411 418 if (FIMC_LCDFIFO == ctx->out_path) 412 - cfg_r |= S5P_CIREAL_ISIZE_AUTOLOAD_EN; 419 + cfg_r |= FIMC_REG_CIREAL_ISIZE_AUTOLOAD_EN; 413 420 414 - cfg_o |= S5P_ORIG_SIZE_HOR(frame->f_width); 415 - cfg_o |= S5P_ORIG_SIZE_VER(frame->f_height); 416 - cfg_r |= S5P_CIREAL_ISIZE_WIDTH(frame->width); 417 - cfg_r |= S5P_CIREAL_ISIZE_HEIGHT(frame->height); 421 + cfg_o |= (frame->f_height << 16) | frame->f_width; 422 + cfg_r |= (frame->height << 16) | frame->width; 418 423 419 - writel(cfg_o, dev->regs + S5P_ORGISIZE); 420 - writel(cfg_r, dev->regs + S5P_CIREAL_ISIZE); 424 + writel(cfg_o, dev->regs + FIMC_REG_ORGISIZE); 425 + writel(cfg_r, dev->regs + FIMC_REG_CIREAL_ISIZE); 421 426 } 422 427 423 428 void fimc_hw_set_in_dma(struct fimc_ctx *ctx) ··· 426 435 u32 cfg; 427 436 428 437 /* Set the pixel offsets. */ 429 - cfg = S5P_CIO_OFFS_HOR(offset->y_h); 430 - cfg |= S5P_CIO_OFFS_VER(offset->y_v); 431 - writel(cfg, dev->regs + S5P_CIIYOFF); 438 + cfg = (offset->y_v << 16) | offset->y_h; 439 + writel(cfg, dev->regs + FIMC_REG_CIIYOFF); 432 440 433 - cfg = S5P_CIO_OFFS_HOR(offset->cb_h); 434 - cfg |= S5P_CIO_OFFS_VER(offset->cb_v); 435 - writel(cfg, dev->regs + S5P_CIICBOFF); 441 + cfg = (offset->cb_v << 16) | offset->cb_h; 442 + writel(cfg, dev->regs + FIMC_REG_CIICBOFF); 436 443 437 - cfg = S5P_CIO_OFFS_HOR(offset->cr_h); 438 - cfg |= S5P_CIO_OFFS_VER(offset->cr_v); 439 - writel(cfg, dev->regs + S5P_CIICROFF); 444 + cfg = (offset->cr_v << 16) | offset->cr_h; 445 + writel(cfg, dev->regs + FIMC_REG_CIICROFF); 440 446 441 447 /* Input original and real size. */ 442 448 fimc_hw_set_in_dma_size(ctx); ··· 442 454 fimc_hw_en_autoload(dev, ctx->out_path == FIMC_LCDFIFO); 443 455 444 456 /* Set the input DMA to process single frame only. */ 445 - cfg = readl(dev->regs + S5P_MSCTRL); 446 - cfg &= ~(S5P_MSCTRL_INFORMAT_MASK 447 - | S5P_MSCTRL_IN_BURST_COUNT_MASK 448 - | S5P_MSCTRL_INPUT_MASK 449 - | S5P_MSCTRL_C_INT_IN_MASK 450 - | S5P_MSCTRL_2P_IN_ORDER_MASK); 457 + cfg = readl(dev->regs + FIMC_REG_MSCTRL); 458 + cfg &= ~(FIMC_REG_MSCTRL_INFORMAT_MASK 459 + | FIMC_REG_MSCTRL_IN_BURST_COUNT_MASK 460 + | FIMC_REG_MSCTRL_INPUT_MASK 461 + | FIMC_REG_MSCTRL_C_INT_IN_MASK 462 + | FIMC_REG_MSCTRL_2P_IN_ORDER_MASK); 451 463 452 - cfg |= (S5P_MSCTRL_IN_BURST_COUNT(4) 453 - | S5P_MSCTRL_INPUT_MEMORY 454 - | S5P_MSCTRL_FIFO_CTRL_FULL); 464 + cfg |= (FIMC_REG_MSCTRL_IN_BURST_COUNT(4) 465 + | FIMC_REG_MSCTRL_INPUT_MEMORY 466 + | FIMC_REG_MSCTRL_FIFO_CTRL_FULL); 455 467 456 468 switch (frame->fmt->color) { 457 469 case S5P_FIMC_RGB565...S5P_FIMC_RGB888: 458 - cfg |= S5P_MSCTRL_INFORMAT_RGB; 470 + cfg |= FIMC_REG_MSCTRL_INFORMAT_RGB; 459 471 break; 460 472 case S5P_FIMC_YCBCR420: 461 - cfg |= S5P_MSCTRL_INFORMAT_YCBCR420; 473 + cfg |= FIMC_REG_MSCTRL_INFORMAT_YCBCR420; 462 474 463 475 if (frame->fmt->colplanes == 2) 464 - cfg |= ctx->in_order_2p | S5P_MSCTRL_C_INT_IN_2PLANE; 476 + cfg |= ctx->in_order_2p | FIMC_REG_MSCTRL_C_INT_IN_2PLANE; 465 477 else 466 - cfg |= S5P_MSCTRL_C_INT_IN_3PLANE; 478 + cfg |= FIMC_REG_MSCTRL_C_INT_IN_3PLANE; 467 479 468 480 break; 469 481 case S5P_FIMC_YCBYCR422...S5P_FIMC_CRYCBY422: 470 482 if (frame->fmt->colplanes == 1) { 471 483 cfg |= ctx->in_order_1p 472 - | S5P_MSCTRL_INFORMAT_YCBCR422_1P; 484 + | FIMC_REG_MSCTRL_INFORMAT_YCBCR422_1P; 473 485 } else { 474 - cfg |= S5P_MSCTRL_INFORMAT_YCBCR422; 486 + cfg |= FIMC_REG_MSCTRL_INFORMAT_YCBCR422; 475 487 476 488 if (frame->fmt->colplanes == 2) 477 489 cfg |= ctx->in_order_2p 478 - | S5P_MSCTRL_C_INT_IN_2PLANE; 490 + | FIMC_REG_MSCTRL_C_INT_IN_2PLANE; 479 491 else 480 - cfg |= S5P_MSCTRL_C_INT_IN_3PLANE; 492 + cfg |= FIMC_REG_MSCTRL_C_INT_IN_3PLANE; 481 493 } 482 494 break; 483 495 default: 484 496 break; 485 497 } 486 498 487 - writel(cfg, dev->regs + S5P_MSCTRL); 499 + writel(cfg, dev->regs + FIMC_REG_MSCTRL); 488 500 489 501 /* Input/output DMA linear/tiled mode. */ 490 - cfg = readl(dev->regs + S5P_CIDMAPARAM); 491 - cfg &= ~S5P_CIDMAPARAM_TILE_MASK; 502 + cfg = readl(dev->regs + FIMC_REG_CIDMAPARAM); 503 + cfg &= ~FIMC_REG_CIDMAPARAM_TILE_MASK; 492 504 493 505 if (tiled_fmt(ctx->s_frame.fmt)) 494 - cfg |= S5P_CIDMAPARAM_R_64X32; 506 + cfg |= FIMC_REG_CIDMAPARAM_R_64X32; 495 507 496 508 if (tiled_fmt(ctx->d_frame.fmt)) 497 - cfg |= S5P_CIDMAPARAM_W_64X32; 509 + cfg |= FIMC_REG_CIDMAPARAM_W_64X32; 498 510 499 - writel(cfg, dev->regs + S5P_CIDMAPARAM); 511 + writel(cfg, dev->regs + FIMC_REG_CIDMAPARAM); 500 512 } 501 513 502 514 ··· 504 516 { 505 517 struct fimc_dev *dev = ctx->fimc_dev; 506 518 507 - u32 cfg = readl(dev->regs + S5P_MSCTRL); 508 - cfg &= ~S5P_MSCTRL_INPUT_MASK; 519 + u32 cfg = readl(dev->regs + FIMC_REG_MSCTRL); 520 + cfg &= ~FIMC_REG_MSCTRL_INPUT_MASK; 509 521 510 522 if (ctx->in_path == FIMC_DMA) 511 - cfg |= S5P_MSCTRL_INPUT_MEMORY; 523 + cfg |= FIMC_REG_MSCTRL_INPUT_MEMORY; 512 524 else 513 - cfg |= S5P_MSCTRL_INPUT_EXTCAM; 525 + cfg |= FIMC_REG_MSCTRL_INPUT_EXTCAM; 514 526 515 - writel(cfg, dev->regs + S5P_MSCTRL); 527 + writel(cfg, dev->regs + FIMC_REG_MSCTRL); 516 528 } 517 529 518 530 void fimc_hw_set_output_path(struct fimc_ctx *ctx) 519 531 { 520 532 struct fimc_dev *dev = ctx->fimc_dev; 521 533 522 - u32 cfg = readl(dev->regs + S5P_CISCCTRL); 523 - cfg &= ~S5P_CISCCTRL_LCDPATHEN_FIFO; 534 + u32 cfg = readl(dev->regs + FIMC_REG_CISCCTRL); 535 + cfg &= ~FIMC_REG_CISCCTRL_LCDPATHEN_FIFO; 524 536 if (ctx->out_path == FIMC_LCDFIFO) 525 - cfg |= S5P_CISCCTRL_LCDPATHEN_FIFO; 526 - writel(cfg, dev->regs + S5P_CISCCTRL); 537 + cfg |= FIMC_REG_CISCCTRL_LCDPATHEN_FIFO; 538 + writel(cfg, dev->regs + FIMC_REG_CISCCTRL); 527 539 } 528 540 529 541 void fimc_hw_set_input_addr(struct fimc_dev *dev, struct fimc_addr *paddr) 530 542 { 531 - u32 cfg = readl(dev->regs + S5P_CIREAL_ISIZE); 532 - cfg |= S5P_CIREAL_ISIZE_ADDR_CH_DIS; 533 - writel(cfg, dev->regs + S5P_CIREAL_ISIZE); 543 + u32 cfg = readl(dev->regs + FIMC_REG_CIREAL_ISIZE); 544 + cfg |= FIMC_REG_CIREAL_ISIZE_ADDR_CH_DIS; 545 + writel(cfg, dev->regs + FIMC_REG_CIREAL_ISIZE); 534 546 535 - writel(paddr->y, dev->regs + S5P_CIIYSA(0)); 536 - writel(paddr->cb, dev->regs + S5P_CIICBSA(0)); 537 - writel(paddr->cr, dev->regs + S5P_CIICRSA(0)); 547 + writel(paddr->y, dev->regs + FIMC_REG_CIIYSA(0)); 548 + writel(paddr->cb, dev->regs + FIMC_REG_CIICBSA(0)); 549 + writel(paddr->cr, dev->regs + FIMC_REG_CIICRSA(0)); 538 550 539 - cfg &= ~S5P_CIREAL_ISIZE_ADDR_CH_DIS; 540 - writel(cfg, dev->regs + S5P_CIREAL_ISIZE); 551 + cfg &= ~FIMC_REG_CIREAL_ISIZE_ADDR_CH_DIS; 552 + writel(cfg, dev->regs + FIMC_REG_CIREAL_ISIZE); 541 553 } 542 554 543 555 void fimc_hw_set_output_addr(struct fimc_dev *dev, ··· 545 557 { 546 558 int i = (index == -1) ? 0 : index; 547 559 do { 548 - writel(paddr->y, dev->regs + S5P_CIOYSA(i)); 549 - writel(paddr->cb, dev->regs + S5P_CIOCBSA(i)); 550 - writel(paddr->cr, dev->regs + S5P_CIOCRSA(i)); 560 + writel(paddr->y, dev->regs + FIMC_REG_CIOYSA(i)); 561 + writel(paddr->cb, dev->regs + FIMC_REG_CIOCBSA(i)); 562 + writel(paddr->cr, dev->regs + FIMC_REG_CIOCRSA(i)); 551 563 dbg("dst_buf[%d]: 0x%X, cb: 0x%X, cr: 0x%X", 552 564 i, paddr->y, paddr->cb, paddr->cr); 553 565 } while (index == -1 && ++i < FIMC_MAX_OUT_BUFS); ··· 556 568 int fimc_hw_set_camera_polarity(struct fimc_dev *fimc, 557 569 struct s5p_fimc_isp_info *cam) 558 570 { 559 - u32 cfg = readl(fimc->regs + S5P_CIGCTRL); 571 + u32 cfg = readl(fimc->regs + FIMC_REG_CIGCTRL); 560 572 561 - cfg &= ~(S5P_CIGCTRL_INVPOLPCLK | S5P_CIGCTRL_INVPOLVSYNC | 562 - S5P_CIGCTRL_INVPOLHREF | S5P_CIGCTRL_INVPOLHSYNC | 563 - S5P_CIGCTRL_INVPOLFIELD); 573 + cfg &= ~(FIMC_REG_CIGCTRL_INVPOLPCLK | FIMC_REG_CIGCTRL_INVPOLVSYNC | 574 + FIMC_REG_CIGCTRL_INVPOLHREF | FIMC_REG_CIGCTRL_INVPOLHSYNC | 575 + FIMC_REG_CIGCTRL_INVPOLFIELD); 564 576 565 577 if (cam->flags & V4L2_MBUS_PCLK_SAMPLE_FALLING) 566 - cfg |= S5P_CIGCTRL_INVPOLPCLK; 578 + cfg |= FIMC_REG_CIGCTRL_INVPOLPCLK; 567 579 568 580 if (cam->flags & V4L2_MBUS_VSYNC_ACTIVE_LOW) 569 - cfg |= S5P_CIGCTRL_INVPOLVSYNC; 581 + cfg |= FIMC_REG_CIGCTRL_INVPOLVSYNC; 570 582 571 583 if (cam->flags & V4L2_MBUS_HSYNC_ACTIVE_LOW) 572 - cfg |= S5P_CIGCTRL_INVPOLHREF; 584 + cfg |= FIMC_REG_CIGCTRL_INVPOLHREF; 573 585 574 586 if (cam->flags & V4L2_MBUS_HSYNC_ACTIVE_LOW) 575 - cfg |= S5P_CIGCTRL_INVPOLHSYNC; 587 + cfg |= FIMC_REG_CIGCTRL_INVPOLHSYNC; 576 588 577 589 if (cam->flags & V4L2_MBUS_FIELD_EVEN_LOW) 578 - cfg |= S5P_CIGCTRL_INVPOLFIELD; 590 + cfg |= FIMC_REG_CIGCTRL_INVPOLFIELD; 579 591 580 - writel(cfg, fimc->regs + S5P_CIGCTRL); 592 + writel(cfg, fimc->regs + FIMC_REG_CIGCTRL); 581 593 582 594 return 0; 583 595 } 596 + 597 + struct mbus_pixfmt_desc { 598 + u32 pixelcode; 599 + u32 cisrcfmt; 600 + u16 bus_width; 601 + }; 602 + 603 + static const struct mbus_pixfmt_desc pix_desc[] = { 604 + { V4L2_MBUS_FMT_YUYV8_2X8, FIMC_REG_CISRCFMT_ORDER422_YCBYCR, 8 }, 605 + { V4L2_MBUS_FMT_YVYU8_2X8, FIMC_REG_CISRCFMT_ORDER422_YCRYCB, 8 }, 606 + { V4L2_MBUS_FMT_VYUY8_2X8, FIMC_REG_CISRCFMT_ORDER422_CRYCBY, 8 }, 607 + { V4L2_MBUS_FMT_UYVY8_2X8, FIMC_REG_CISRCFMT_ORDER422_CBYCRY, 8 }, 608 + }; 584 609 585 610 int fimc_hw_set_camera_source(struct fimc_dev *fimc, 586 611 struct s5p_fimc_isp_info *cam) ··· 602 601 u32 cfg = 0; 603 602 u32 bus_width; 604 603 int i; 605 - 606 - static const struct { 607 - u32 pixelcode; 608 - u32 cisrcfmt; 609 - u16 bus_width; 610 - } pix_desc[] = { 611 - { V4L2_MBUS_FMT_YUYV8_2X8, S5P_CISRCFMT_ORDER422_YCBYCR, 8 }, 612 - { V4L2_MBUS_FMT_YVYU8_2X8, S5P_CISRCFMT_ORDER422_YCRYCB, 8 }, 613 - { V4L2_MBUS_FMT_VYUY8_2X8, S5P_CISRCFMT_ORDER422_CRYCBY, 8 }, 614 - { V4L2_MBUS_FMT_UYVY8_2X8, S5P_CISRCFMT_ORDER422_CBYCRY, 8 }, 615 - /* TODO: Add pixel codes for 16-bit bus width */ 616 - }; 617 604 618 605 if (cam->bus_type == FIMC_ITU_601 || cam->bus_type == FIMC_ITU_656) { 619 606 for (i = 0; i < ARRAY_SIZE(pix_desc); i++) { ··· 621 632 622 633 if (cam->bus_type == FIMC_ITU_601) { 623 634 if (bus_width == 8) 624 - cfg |= S5P_CISRCFMT_ITU601_8BIT; 635 + cfg |= FIMC_REG_CISRCFMT_ITU601_8BIT; 625 636 else if (bus_width == 16) 626 - cfg |= S5P_CISRCFMT_ITU601_16BIT; 637 + cfg |= FIMC_REG_CISRCFMT_ITU601_16BIT; 627 638 } /* else defaults to ITU-R BT.656 8-bit */ 628 639 } else if (cam->bus_type == FIMC_MIPI_CSI2) { 629 640 if (fimc_fmt_is_jpeg(f->fmt->color)) 630 - cfg |= S5P_CISRCFMT_ITU601_8BIT; 641 + cfg |= FIMC_REG_CISRCFMT_ITU601_8BIT; 631 642 } 632 643 633 - cfg |= S5P_CISRCFMT_HSIZE(f->o_width) | S5P_CISRCFMT_VSIZE(f->o_height); 634 - writel(cfg, fimc->regs + S5P_CISRCFMT); 644 + cfg |= (f->o_width << 16) | f->o_height; 645 + writel(cfg, fimc->regs + FIMC_REG_CISRCFMT); 635 646 return 0; 636 647 } 637 648 638 - 639 - int fimc_hw_set_camera_offset(struct fimc_dev *fimc, struct fimc_frame *f) 649 + void fimc_hw_set_camera_offset(struct fimc_dev *fimc, struct fimc_frame *f) 640 650 { 641 651 u32 hoff2, voff2; 642 652 643 - u32 cfg = readl(fimc->regs + S5P_CIWDOFST); 653 + u32 cfg = readl(fimc->regs + FIMC_REG_CIWDOFST); 644 654 645 - cfg &= ~(S5P_CIWDOFST_HOROFF_MASK | S5P_CIWDOFST_VEROFF_MASK); 646 - cfg |= S5P_CIWDOFST_OFF_EN | 647 - S5P_CIWDOFST_HOROFF(f->offs_h) | 648 - S5P_CIWDOFST_VEROFF(f->offs_v); 655 + cfg &= ~(FIMC_REG_CIWDOFST_HOROFF_MASK | FIMC_REG_CIWDOFST_VEROFF_MASK); 656 + cfg |= FIMC_REG_CIWDOFST_OFF_EN | 657 + (f->offs_h << 16) | f->offs_v; 649 658 650 - writel(cfg, fimc->regs + S5P_CIWDOFST); 659 + writel(cfg, fimc->regs + FIMC_REG_CIWDOFST); 651 660 652 661 /* See CIWDOFSTn register description in the datasheet for details. */ 653 662 hoff2 = f->o_width - f->width - f->offs_h; 654 663 voff2 = f->o_height - f->height - f->offs_v; 655 - cfg = S5P_CIWDOFST2_HOROFF(hoff2) | S5P_CIWDOFST2_VEROFF(voff2); 656 - 657 - writel(cfg, fimc->regs + S5P_CIWDOFST2); 658 - return 0; 664 + cfg = (hoff2 << 16) | voff2; 665 + writel(cfg, fimc->regs + FIMC_REG_CIWDOFST2); 659 666 } 660 667 661 668 int fimc_hw_set_camera_type(struct fimc_dev *fimc, ··· 661 676 struct fimc_vid_cap *vid_cap = &fimc->vid_cap; 662 677 u32 csis_data_alignment = 32; 663 678 664 - cfg = readl(fimc->regs + S5P_CIGCTRL); 679 + cfg = readl(fimc->regs + FIMC_REG_CIGCTRL); 665 680 666 681 /* Select ITU B interface, disable Writeback path and test pattern. */ 667 - cfg &= ~(S5P_CIGCTRL_TESTPAT_MASK | S5P_CIGCTRL_SELCAM_ITU_A | 668 - S5P_CIGCTRL_SELCAM_MIPI | S5P_CIGCTRL_CAMIF_SELWB | 669 - S5P_CIGCTRL_SELCAM_MIPI_A | S5P_CIGCTRL_CAM_JPEG); 682 + cfg &= ~(FIMC_REG_CIGCTRL_TESTPAT_MASK | FIMC_REG_CIGCTRL_SELCAM_ITU_A | 683 + FIMC_REG_CIGCTRL_SELCAM_MIPI | FIMC_REG_CIGCTRL_CAMIF_SELWB | 684 + FIMC_REG_CIGCTRL_SELCAM_MIPI_A | FIMC_REG_CIGCTRL_CAM_JPEG); 670 685 671 686 if (cam->bus_type == FIMC_MIPI_CSI2) { 672 - cfg |= S5P_CIGCTRL_SELCAM_MIPI; 687 + cfg |= FIMC_REG_CIGCTRL_SELCAM_MIPI; 673 688 674 689 if (cam->mux_id == 0) 675 - cfg |= S5P_CIGCTRL_SELCAM_MIPI_A; 690 + cfg |= FIMC_REG_CIGCTRL_SELCAM_MIPI_A; 676 691 677 692 /* TODO: add remaining supported formats. */ 678 693 switch (vid_cap->mf.code) { 679 694 case V4L2_MBUS_FMT_VYUY8_2X8: 680 - tmp = S5P_CSIIMGFMT_YCBCR422_8BIT; 695 + tmp = FIMC_REG_CSIIMGFMT_YCBCR422_8BIT; 681 696 break; 682 697 case V4L2_MBUS_FMT_JPEG_1X8: 683 - tmp = S5P_CSIIMGFMT_USER(1); 684 - cfg |= S5P_CIGCTRL_CAM_JPEG; 698 + tmp = FIMC_REG_CSIIMGFMT_USER(1); 699 + cfg |= FIMC_REG_CIGCTRL_CAM_JPEG; 685 700 break; 686 701 default: 687 702 v4l2_err(fimc->vid_cap.vfd, ··· 691 706 } 692 707 tmp |= (csis_data_alignment == 32) << 8; 693 708 694 - writel(tmp, fimc->regs + S5P_CSIIMGFMT); 709 + writel(tmp, fimc->regs + FIMC_REG_CSIIMGFMT); 695 710 696 711 } else if (cam->bus_type == FIMC_ITU_601 || 697 712 cam->bus_type == FIMC_ITU_656) { 698 713 if (cam->mux_id == 0) /* ITU-A, ITU-B: 0, 1 */ 699 - cfg |= S5P_CIGCTRL_SELCAM_ITU_A; 714 + cfg |= FIMC_REG_CIGCTRL_SELCAM_ITU_A; 700 715 } else if (cam->bus_type == FIMC_LCD_WB) { 701 - cfg |= S5P_CIGCTRL_CAMIF_SELWB; 716 + cfg |= FIMC_REG_CIGCTRL_CAMIF_SELWB; 702 717 } else { 703 718 err("invalid camera bus type selected\n"); 704 719 return -EINVAL; 705 720 } 706 - writel(cfg, fimc->regs + S5P_CIGCTRL); 721 + writel(cfg, fimc->regs + FIMC_REG_CIGCTRL); 707 722 708 723 return 0; 724 + } 725 + 726 + void fimc_hw_clear_irq(struct fimc_dev *dev) 727 + { 728 + u32 cfg = readl(dev->regs + FIMC_REG_CIGCTRL); 729 + cfg |= FIMC_REG_CIGCTRL_IRQ_CLR; 730 + writel(cfg, dev->regs + FIMC_REG_CIGCTRL); 731 + } 732 + 733 + void fimc_hw_enable_scaler(struct fimc_dev *dev, bool on) 734 + { 735 + u32 cfg = readl(dev->regs + FIMC_REG_CISCCTRL); 736 + if (on) 737 + cfg |= FIMC_REG_CISCCTRL_SCALERSTART; 738 + else 739 + cfg &= ~FIMC_REG_CISCCTRL_SCALERSTART; 740 + writel(cfg, dev->regs + FIMC_REG_CISCCTRL); 741 + } 742 + 743 + void fimc_hw_activate_input_dma(struct fimc_dev *dev, bool on) 744 + { 745 + u32 cfg = readl(dev->regs + FIMC_REG_MSCTRL); 746 + if (on) 747 + cfg |= FIMC_REG_MSCTRL_ENVID; 748 + else 749 + cfg &= ~FIMC_REG_MSCTRL_ENVID; 750 + writel(cfg, dev->regs + FIMC_REG_MSCTRL); 751 + } 752 + 753 + void fimc_hw_dis_capture(struct fimc_dev *dev) 754 + { 755 + u32 cfg = readl(dev->regs + FIMC_REG_CIIMGCPT); 756 + cfg &= ~(FIMC_REG_CIIMGCPT_IMGCPTEN | FIMC_REG_CIIMGCPT_IMGCPTEN_SC); 757 + writel(cfg, dev->regs + FIMC_REG_CIIMGCPT); 758 + } 759 + 760 + /* Return an index to the buffer actually being written. */ 761 + u32 fimc_hw_get_frame_index(struct fimc_dev *dev) 762 + { 763 + u32 reg; 764 + 765 + if (dev->variant->has_cistatus2) { 766 + reg = readl(dev->regs + FIMC_REG_CISTATUS2) & 0x3F; 767 + return reg > 0 ? --reg : reg; 768 + } 769 + 770 + reg = readl(dev->regs + FIMC_REG_CISTATUS); 771 + 772 + return (reg & FIMC_REG_CISTATUS_FRAMECNT_MASK) >> 773 + FIMC_REG_CISTATUS_FRAMECNT_SHIFT; 774 + } 775 + 776 + /* Locking: the caller holds fimc->slock */ 777 + void fimc_activate_capture(struct fimc_ctx *ctx) 778 + { 779 + fimc_hw_enable_scaler(ctx->fimc_dev, ctx->scaler.enabled); 780 + fimc_hw_en_capture(ctx); 781 + } 782 + 783 + void fimc_deactivate_capture(struct fimc_dev *fimc) 784 + { 785 + fimc_hw_en_lastirq(fimc, true); 786 + fimc_hw_dis_capture(fimc); 787 + fimc_hw_enable_scaler(fimc, false); 788 + fimc_hw_en_lastirq(fimc, false); 709 789 }
+326
drivers/media/video/s5p-fimc/fimc-reg.h
··· 1 + /* 2 + * Samsung camera host interface (FIMC) registers definition 3 + * 4 + * Copyright (C) 2010 - 2012 Samsung Electronics Co., Ltd. 5 + * 6 + * This program is free software; you can redistribute it and/or modify 7 + * it under the terms of the GNU General Public License version 2 as 8 + * published by the Free Software Foundation. 9 + */ 10 + 11 + #ifndef FIMC_REG_H_ 12 + #define FIMC_REG_H_ 13 + 14 + #include "fimc-core.h" 15 + 16 + /* Input source format */ 17 + #define FIMC_REG_CISRCFMT 0x00 18 + #define FIMC_REG_CISRCFMT_ITU601_8BIT (1 << 31) 19 + #define FIMC_REG_CISRCFMT_ITU601_16BIT (1 << 29) 20 + #define FIMC_REG_CISRCFMT_ORDER422_YCBYCR (0 << 14) 21 + #define FIMC_REG_CISRCFMT_ORDER422_YCRYCB (1 << 14) 22 + #define FIMC_REG_CISRCFMT_ORDER422_CBYCRY (2 << 14) 23 + #define FIMC_REG_CISRCFMT_ORDER422_CRYCBY (3 << 14) 24 + 25 + /* Window offset */ 26 + #define FIMC_REG_CIWDOFST 0x04 27 + #define FIMC_REG_CIWDOFST_OFF_EN (1 << 31) 28 + #define FIMC_REG_CIWDOFST_CLROVFIY (1 << 30) 29 + #define FIMC_REG_CIWDOFST_CLROVRLB (1 << 29) 30 + #define FIMC_REG_CIWDOFST_HOROFF_MASK (0x7ff << 16) 31 + #define FIMC_REG_CIWDOFST_CLROVFICB (1 << 15) 32 + #define FIMC_REG_CIWDOFST_CLROVFICR (1 << 14) 33 + #define FIMC_REG_CIWDOFST_VEROFF_MASK (0xfff << 0) 34 + 35 + /* Global control */ 36 + #define FIMC_REG_CIGCTRL 0x08 37 + #define FIMC_REG_CIGCTRL_SWRST (1 << 31) 38 + #define FIMC_REG_CIGCTRL_CAMRST_A (1 << 30) 39 + #define FIMC_REG_CIGCTRL_SELCAM_ITU_A (1 << 29) 40 + #define FIMC_REG_CIGCTRL_TESTPAT_NORMAL (0 << 27) 41 + #define FIMC_REG_CIGCTRL_TESTPAT_COLOR_BAR (1 << 27) 42 + #define FIMC_REG_CIGCTRL_TESTPAT_HOR_INC (2 << 27) 43 + #define FIMC_REG_CIGCTRL_TESTPAT_VER_INC (3 << 27) 44 + #define FIMC_REG_CIGCTRL_TESTPAT_MASK (3 << 27) 45 + #define FIMC_REG_CIGCTRL_TESTPAT_SHIFT 27 46 + #define FIMC_REG_CIGCTRL_INVPOLPCLK (1 << 26) 47 + #define FIMC_REG_CIGCTRL_INVPOLVSYNC (1 << 25) 48 + #define FIMC_REG_CIGCTRL_INVPOLHREF (1 << 24) 49 + #define FIMC_REG_CIGCTRL_IRQ_OVFEN (1 << 22) 50 + #define FIMC_REG_CIGCTRL_HREF_MASK (1 << 21) 51 + #define FIMC_REG_CIGCTRL_IRQ_LEVEL (1 << 20) 52 + #define FIMC_REG_CIGCTRL_IRQ_CLR (1 << 19) 53 + #define FIMC_REG_CIGCTRL_IRQ_ENABLE (1 << 16) 54 + #define FIMC_REG_CIGCTRL_SHDW_DISABLE (1 << 12) 55 + #define FIMC_REG_CIGCTRL_CAM_JPEG (1 << 8) 56 + #define FIMC_REG_CIGCTRL_SELCAM_MIPI_A (1 << 7) 57 + #define FIMC_REG_CIGCTRL_CAMIF_SELWB (1 << 6) 58 + /* 0 - ITU601; 1 - ITU709 */ 59 + #define FIMC_REG_CIGCTRL_CSC_ITU601_709 (1 << 5) 60 + #define FIMC_REG_CIGCTRL_INVPOLHSYNC (1 << 4) 61 + #define FIMC_REG_CIGCTRL_SELCAM_MIPI (1 << 3) 62 + #define FIMC_REG_CIGCTRL_INVPOLFIELD (1 << 1) 63 + #define FIMC_REG_CIGCTRL_INTERLACE (1 << 0) 64 + 65 + /* Window offset 2 */ 66 + #define FIMC_REG_CIWDOFST2 0x14 67 + #define FIMC_REG_CIWDOFST2_HOROFF_MASK (0xfff << 16) 68 + #define FIMC_REG_CIWDOFST2_VEROFF_MASK (0xfff << 0) 69 + 70 + /* Output DMA Y/Cb/Cr plane start addresses */ 71 + #define FIMC_REG_CIOYSA(n) (0x18 + (n) * 4) 72 + #define FIMC_REG_CIOCBSA(n) (0x28 + (n) * 4) 73 + #define FIMC_REG_CIOCRSA(n) (0x38 + (n) * 4) 74 + 75 + /* Target image format */ 76 + #define FIMC_REG_CITRGFMT 0x48 77 + #define FIMC_REG_CITRGFMT_INROT90 (1 << 31) 78 + #define FIMC_REG_CITRGFMT_YCBCR420 (0 << 29) 79 + #define FIMC_REG_CITRGFMT_YCBCR422 (1 << 29) 80 + #define FIMC_REG_CITRGFMT_YCBCR422_1P (2 << 29) 81 + #define FIMC_REG_CITRGFMT_RGB (3 << 29) 82 + #define FIMC_REG_CITRGFMT_FMT_MASK (3 << 29) 83 + #define FIMC_REG_CITRGFMT_HSIZE_MASK (0xfff << 16) 84 + #define FIMC_REG_CITRGFMT_FLIP_SHIFT 14 85 + #define FIMC_REG_CITRGFMT_FLIP_NORMAL (0 << 14) 86 + #define FIMC_REG_CITRGFMT_FLIP_X_MIRROR (1 << 14) 87 + #define FIMC_REG_CITRGFMT_FLIP_Y_MIRROR (2 << 14) 88 + #define FIMC_REG_CITRGFMT_FLIP_180 (3 << 14) 89 + #define FIMC_REG_CITRGFMT_FLIP_MASK (3 << 14) 90 + #define FIMC_REG_CITRGFMT_OUTROT90 (1 << 13) 91 + #define FIMC_REG_CITRGFMT_VSIZE_MASK (0xfff << 0) 92 + 93 + /* Output DMA control */ 94 + #define FIMC_REG_CIOCTRL 0x4c 95 + #define FIMC_REG_CIOCTRL_ORDER422_MASK (3 << 0) 96 + #define FIMC_REG_CIOCTRL_ORDER422_CRYCBY (0 << 0) 97 + #define FIMC_REG_CIOCTRL_ORDER422_CBYCRY (1 << 0) 98 + #define FIMC_REG_CIOCTRL_ORDER422_YCRYCB (2 << 0) 99 + #define FIMC_REG_CIOCTRL_ORDER422_YCBYCR (3 << 0) 100 + #define FIMC_REG_CIOCTRL_LASTIRQ_ENABLE (1 << 2) 101 + #define FIMC_REG_CIOCTRL_YCBCR_3PLANE (0 << 3) 102 + #define FIMC_REG_CIOCTRL_YCBCR_2PLANE (1 << 3) 103 + #define FIMC_REG_CIOCTRL_YCBCR_PLANE_MASK (1 << 3) 104 + #define FIMC_REG_CIOCTRL_ALPHA_OUT_MASK (0xff << 4) 105 + #define FIMC_REG_CIOCTRL_RGB16FMT_MASK (3 << 16) 106 + #define FIMC_REG_CIOCTRL_RGB565 (0 << 16) 107 + #define FIMC_REG_CIOCTRL_ARGB1555 (1 << 16) 108 + #define FIMC_REG_CIOCTRL_ARGB4444 (2 << 16) 109 + #define FIMC_REG_CIOCTRL_ORDER2P_SHIFT 24 110 + #define FIMC_REG_CIOCTRL_ORDER2P_MASK (3 << 24) 111 + #define FIMC_REG_CIOCTRL_ORDER422_2P_LSB_CRCB (0 << 24) 112 + 113 + /* Pre-scaler control 1 */ 114 + #define FIMC_REG_CISCPRERATIO 0x50 115 + 116 + #define FIMC_REG_CISCPREDST 0x54 117 + 118 + /* Main scaler control */ 119 + #define FIMC_REG_CISCCTRL 0x58 120 + #define FIMC_REG_CISCCTRL_SCALERBYPASS (1 << 31) 121 + #define FIMC_REG_CISCCTRL_SCALEUP_H (1 << 30) 122 + #define FIMC_REG_CISCCTRL_SCALEUP_V (1 << 29) 123 + #define FIMC_REG_CISCCTRL_CSCR2Y_WIDE (1 << 28) 124 + #define FIMC_REG_CISCCTRL_CSCY2R_WIDE (1 << 27) 125 + #define FIMC_REG_CISCCTRL_LCDPATHEN_FIFO (1 << 26) 126 + #define FIMC_REG_CISCCTRL_INTERLACE (1 << 25) 127 + #define FIMC_REG_CISCCTRL_SCALERSTART (1 << 15) 128 + #define FIMC_REG_CISCCTRL_INRGB_FMT_RGB565 (0 << 13) 129 + #define FIMC_REG_CISCCTRL_INRGB_FMT_RGB666 (1 << 13) 130 + #define FIMC_REG_CISCCTRL_INRGB_FMT_RGB888 (2 << 13) 131 + #define FIMC_REG_CISCCTRL_INRGB_FMT_MASK (3 << 13) 132 + #define FIMC_REG_CISCCTRL_OUTRGB_FMT_RGB565 (0 << 11) 133 + #define FIMC_REG_CISCCTRL_OUTRGB_FMT_RGB666 (1 << 11) 134 + #define FIMC_REG_CISCCTRL_OUTRGB_FMT_RGB888 (2 << 11) 135 + #define FIMC_REG_CISCCTRL_OUTRGB_FMT_MASK (3 << 11) 136 + #define FIMC_REG_CISCCTRL_RGB_EXT (1 << 10) 137 + #define FIMC_REG_CISCCTRL_ONE2ONE (1 << 9) 138 + #define FIMC_REG_CISCCTRL_MHRATIO(x) ((x) << 16) 139 + #define FIMC_REG_CISCCTRL_MVRATIO(x) ((x) << 0) 140 + #define FIMC_REG_CISCCTRL_MHRATIO_MASK (0x1ff << 16) 141 + #define FIMC_REG_CISCCTRL_MVRATIO_MASK (0x1ff << 0) 142 + #define FIMC_REG_CISCCTRL_MHRATIO_EXT(x) (((x) >> 6) << 16) 143 + #define FIMC_REG_CISCCTRL_MVRATIO_EXT(x) (((x) >> 6) << 0) 144 + 145 + /* Target area */ 146 + #define FIMC_REG_CITAREA 0x5c 147 + #define FIMC_REG_CITAREA_MASK 0x0fffffff 148 + 149 + /* General status */ 150 + #define FIMC_REG_CISTATUS 0x64 151 + #define FIMC_REG_CISTATUS_OVFIY (1 << 31) 152 + #define FIMC_REG_CISTATUS_OVFICB (1 << 30) 153 + #define FIMC_REG_CISTATUS_OVFICR (1 << 29) 154 + #define FIMC_REG_CISTATUS_VSYNC (1 << 28) 155 + #define FIMC_REG_CISTATUS_FRAMECNT_MASK (3 << 26) 156 + #define FIMC_REG_CISTATUS_FRAMECNT_SHIFT 26 157 + #define FIMC_REG_CISTATUS_WINOFF_EN (1 << 25) 158 + #define FIMC_REG_CISTATUS_IMGCPT_EN (1 << 22) 159 + #define FIMC_REG_CISTATUS_IMGCPT_SCEN (1 << 21) 160 + #define FIMC_REG_CISTATUS_VSYNC_A (1 << 20) 161 + #define FIMC_REG_CISTATUS_VSYNC_B (1 << 19) 162 + #define FIMC_REG_CISTATUS_OVRLB (1 << 18) 163 + #define FIMC_REG_CISTATUS_FRAME_END (1 << 17) 164 + #define FIMC_REG_CISTATUS_LASTCAPT_END (1 << 16) 165 + #define FIMC_REG_CISTATUS_VVALID_A (1 << 15) 166 + #define FIMC_REG_CISTATUS_VVALID_B (1 << 14) 167 + 168 + /* Indexes to the last and the currently processed buffer. */ 169 + #define FIMC_REG_CISTATUS2 0x68 170 + 171 + /* Image capture control */ 172 + #define FIMC_REG_CIIMGCPT 0xc0 173 + #define FIMC_REG_CIIMGCPT_IMGCPTEN (1 << 31) 174 + #define FIMC_REG_CIIMGCPT_IMGCPTEN_SC (1 << 30) 175 + #define FIMC_REG_CIIMGCPT_CPT_FREN_ENABLE (1 << 25) 176 + #define FIMC_REG_CIIMGCPT_CPT_FRMOD_CNT (1 << 18) 177 + 178 + /* Frame capture sequence */ 179 + #define FIMC_REG_CICPTSEQ 0xc4 180 + 181 + /* Image effect */ 182 + #define FIMC_REG_CIIMGEFF 0xd0 183 + #define FIMC_REG_CIIMGEFF_IE_ENABLE (1 << 30) 184 + #define FIMC_REG_CIIMGEFF_IE_SC_BEFORE (0 << 29) 185 + #define FIMC_REG_CIIMGEFF_IE_SC_AFTER (1 << 29) 186 + #define FIMC_REG_CIIMGEFF_FIN_BYPASS (0 << 26) 187 + #define FIMC_REG_CIIMGEFF_FIN_ARBITRARY (1 << 26) 188 + #define FIMC_REG_CIIMGEFF_FIN_NEGATIVE (2 << 26) 189 + #define FIMC_REG_CIIMGEFF_FIN_ARTFREEZE (3 << 26) 190 + #define FIMC_REG_CIIMGEFF_FIN_EMBOSSING (4 << 26) 191 + #define FIMC_REG_CIIMGEFF_FIN_SILHOUETTE (5 << 26) 192 + #define FIMC_REG_CIIMGEFF_FIN_MASK (7 << 26) 193 + #define FIMC_REG_CIIMGEFF_PAT_CBCR_MASK ((0xff << 13) | 0xff) 194 + 195 + /* Input DMA Y/Cb/Cr plane start address 0/1 */ 196 + #define FIMC_REG_CIIYSA(n) (0xd4 + (n) * 0x70) 197 + #define FIMC_REG_CIICBSA(n) (0xd8 + (n) * 0x70) 198 + #define FIMC_REG_CIICRSA(n) (0xdc + (n) * 0x70) 199 + 200 + /* Real input DMA image size */ 201 + #define FIMC_REG_CIREAL_ISIZE 0xf8 202 + #define FIMC_REG_CIREAL_ISIZE_AUTOLOAD_EN (1 << 31) 203 + #define FIMC_REG_CIREAL_ISIZE_ADDR_CH_DIS (1 << 30) 204 + 205 + /* Input DMA control */ 206 + #define FIMC_REG_MSCTRL 0xfc 207 + #define FIMC_REG_MSCTRL_IN_BURST_COUNT_MASK (0xf << 24) 208 + #define FIMC_REG_MSCTRL_2P_IN_ORDER_MASK (3 << 16) 209 + #define FIMC_REG_MSCTRL_2P_IN_ORDER_SHIFT 16 210 + #define FIMC_REG_MSCTRL_C_INT_IN_3PLANE (0 << 15) 211 + #define FIMC_REG_MSCTRL_C_INT_IN_2PLANE (1 << 15) 212 + #define FIMC_REG_MSCTRL_C_INT_IN_MASK (1 << 15) 213 + #define FIMC_REG_MSCTRL_FLIP_SHIFT 13 214 + #define FIMC_REG_MSCTRL_FLIP_MASK (3 << 13) 215 + #define FIMC_REG_MSCTRL_FLIP_NORMAL (0 << 13) 216 + #define FIMC_REG_MSCTRL_FLIP_X_MIRROR (1 << 13) 217 + #define FIMC_REG_MSCTRL_FLIP_Y_MIRROR (2 << 13) 218 + #define FIMC_REG_MSCTRL_FLIP_180 (3 << 13) 219 + #define FIMC_REG_MSCTRL_FIFO_CTRL_FULL (1 << 12) 220 + #define FIMC_REG_MSCTRL_ORDER422_SHIFT 4 221 + #define FIMC_REG_MSCTRL_ORDER422_YCBYCR (0 << 4) 222 + #define FIMC_REG_MSCTRL_ORDER422_CBYCRY (1 << 4) 223 + #define FIMC_REG_MSCTRL_ORDER422_YCRYCB (2 << 4) 224 + #define FIMC_REG_MSCTRL_ORDER422_CRYCBY (3 << 4) 225 + #define FIMC_REG_MSCTRL_ORDER422_MASK (3 << 4) 226 + #define FIMC_REG_MSCTRL_INPUT_EXTCAM (0 << 3) 227 + #define FIMC_REG_MSCTRL_INPUT_MEMORY (1 << 3) 228 + #define FIMC_REG_MSCTRL_INPUT_MASK (1 << 3) 229 + #define FIMC_REG_MSCTRL_INFORMAT_YCBCR420 (0 << 1) 230 + #define FIMC_REG_MSCTRL_INFORMAT_YCBCR422 (1 << 1) 231 + #define FIMC_REG_MSCTRL_INFORMAT_YCBCR422_1P (2 << 1) 232 + #define FIMC_REG_MSCTRL_INFORMAT_RGB (3 << 1) 233 + #define FIMC_REG_MSCTRL_INFORMAT_MASK (3 << 1) 234 + #define FIMC_REG_MSCTRL_ENVID (1 << 0) 235 + #define FIMC_REG_MSCTRL_IN_BURST_COUNT(x) ((x) << 24) 236 + 237 + /* Output DMA Y/Cb/Cr offset */ 238 + #define FIMC_REG_CIOYOFF 0x168 239 + #define FIMC_REG_CIOCBOFF 0x16c 240 + #define FIMC_REG_CIOCROFF 0x170 241 + 242 + /* Input DMA Y/Cb/Cr offset */ 243 + #define FIMC_REG_CIIYOFF 0x174 244 + #define FIMC_REG_CIICBOFF 0x178 245 + #define FIMC_REG_CIICROFF 0x17c 246 + 247 + /* Input DMA original image size */ 248 + #define FIMC_REG_ORGISIZE 0x180 249 + 250 + /* Output DMA original image size */ 251 + #define FIMC_REG_ORGOSIZE 0x184 252 + 253 + /* Real output DMA image size (extension register) */ 254 + #define FIMC_REG_CIEXTEN 0x188 255 + #define FIMC_REG_CIEXTEN_MHRATIO_EXT(x) (((x) & 0x3f) << 10) 256 + #define FIMC_REG_CIEXTEN_MVRATIO_EXT(x) ((x) & 0x3f) 257 + #define FIMC_REG_CIEXTEN_MHRATIO_EXT_MASK (0x3f << 10) 258 + #define FIMC_REG_CIEXTEN_MVRATIO_EXT_MASK 0x3f 259 + 260 + #define FIMC_REG_CIDMAPARAM 0x18c 261 + #define FIMC_REG_CIDMAPARAM_R_LINEAR (0 << 29) 262 + #define FIMC_REG_CIDMAPARAM_R_64X32 (3 << 29) 263 + #define FIMC_REG_CIDMAPARAM_W_LINEAR (0 << 13) 264 + #define FIMC_REG_CIDMAPARAM_W_64X32 (3 << 13) 265 + #define FIMC_REG_CIDMAPARAM_TILE_MASK ((3 << 29) | (3 << 13)) 266 + 267 + /* MIPI CSI image format */ 268 + #define FIMC_REG_CSIIMGFMT 0x194 269 + #define FIMC_REG_CSIIMGFMT_YCBCR422_8BIT 0x1e 270 + #define FIMC_REG_CSIIMGFMT_RAW8 0x2a 271 + #define FIMC_REG_CSIIMGFMT_RAW10 0x2b 272 + #define FIMC_REG_CSIIMGFMT_RAW12 0x2c 273 + /* User defined formats. x = 0...16. */ 274 + #define FIMC_REG_CSIIMGFMT_USER(x) (0x30 + x - 1) 275 + 276 + /* Output frame buffer sequence mask */ 277 + #define FIMC_REG_CIFCNTSEQ 0x1fc 278 + 279 + /* 280 + * Function declarations 281 + */ 282 + void fimc_hw_reset(struct fimc_dev *fimc); 283 + void fimc_hw_set_rotation(struct fimc_ctx *ctx); 284 + void fimc_hw_set_target_format(struct fimc_ctx *ctx); 285 + void fimc_hw_set_out_dma(struct fimc_ctx *ctx); 286 + void fimc_hw_en_lastirq(struct fimc_dev *fimc, int enable); 287 + void fimc_hw_en_irq(struct fimc_dev *fimc, int enable); 288 + void fimc_hw_set_prescaler(struct fimc_ctx *ctx); 289 + void fimc_hw_set_mainscaler(struct fimc_ctx *ctx); 290 + void fimc_hw_en_capture(struct fimc_ctx *ctx); 291 + void fimc_hw_set_effect(struct fimc_ctx *ctx, bool active); 292 + void fimc_hw_set_rgb_alpha(struct fimc_ctx *ctx); 293 + void fimc_hw_set_in_dma(struct fimc_ctx *ctx); 294 + void fimc_hw_set_input_path(struct fimc_ctx *ctx); 295 + void fimc_hw_set_output_path(struct fimc_ctx *ctx); 296 + void fimc_hw_set_input_addr(struct fimc_dev *fimc, struct fimc_addr *paddr); 297 + void fimc_hw_set_output_addr(struct fimc_dev *fimc, struct fimc_addr *paddr, 298 + int index); 299 + int fimc_hw_set_camera_source(struct fimc_dev *fimc, 300 + struct s5p_fimc_isp_info *cam); 301 + void fimc_hw_set_camera_offset(struct fimc_dev *fimc, struct fimc_frame *f); 302 + int fimc_hw_set_camera_polarity(struct fimc_dev *fimc, 303 + struct s5p_fimc_isp_info *cam); 304 + int fimc_hw_set_camera_type(struct fimc_dev *fimc, 305 + struct s5p_fimc_isp_info *cam); 306 + void fimc_hw_clear_irq(struct fimc_dev *dev); 307 + void fimc_hw_enable_scaler(struct fimc_dev *dev, bool on); 308 + void fimc_hw_activate_input_dma(struct fimc_dev *dev, bool on); 309 + void fimc_hw_dis_capture(struct fimc_dev *dev); 310 + u32 fimc_hw_get_frame_index(struct fimc_dev *dev); 311 + void fimc_activate_capture(struct fimc_ctx *ctx); 312 + void fimc_deactivate_capture(struct fimc_dev *fimc); 313 + 314 + /** 315 + * fimc_hw_set_dma_seq - configure output DMA buffer sequence 316 + * @mask: bitmask for the DMA output buffer registers, set to 0 to skip buffer 317 + * This function masks output DMA ring buffers, it allows to select which of 318 + * the 32 available output buffer address registers will be used by the DMA 319 + * engine. 320 + */ 321 + static inline void fimc_hw_set_dma_seq(struct fimc_dev *dev, u32 mask) 322 + { 323 + writel(mask, dev->regs + FIMC_REG_CIFCNTSEQ); 324 + } 325 + 326 + #endif /* FIMC_REG_H_ */
-301
drivers/media/video/s5p-fimc/regs-fimc.h
··· 1 - /* 2 - * Register definition file for Samsung Camera Interface (FIMC) driver 3 - * 4 - * Copyright (c) 2010 Samsung Electronics 5 - * 6 - * This program is free software; you can redistribute it and/or modify 7 - * it under the terms of the GNU General Public License version 2 as 8 - * published by the Free Software Foundation. 9 - */ 10 - 11 - #ifndef REGS_FIMC_H_ 12 - #define REGS_FIMC_H_ 13 - 14 - /* Input source format */ 15 - #define S5P_CISRCFMT 0x00 16 - #define S5P_CISRCFMT_ITU601_8BIT (1 << 31) 17 - #define S5P_CISRCFMT_ITU601_16BIT (1 << 29) 18 - #define S5P_CISRCFMT_ORDER422_YCBYCR (0 << 14) 19 - #define S5P_CISRCFMT_ORDER422_YCRYCB (1 << 14) 20 - #define S5P_CISRCFMT_ORDER422_CBYCRY (2 << 14) 21 - #define S5P_CISRCFMT_ORDER422_CRYCBY (3 << 14) 22 - #define S5P_CISRCFMT_HSIZE(x) ((x) << 16) 23 - #define S5P_CISRCFMT_VSIZE(x) ((x) << 0) 24 - 25 - /* Window offset */ 26 - #define S5P_CIWDOFST 0x04 27 - #define S5P_CIWDOFST_OFF_EN (1 << 31) 28 - #define S5P_CIWDOFST_CLROVFIY (1 << 30) 29 - #define S5P_CIWDOFST_CLROVRLB (1 << 29) 30 - #define S5P_CIWDOFST_HOROFF_MASK (0x7ff << 16) 31 - #define S5P_CIWDOFST_CLROVFICB (1 << 15) 32 - #define S5P_CIWDOFST_CLROVFICR (1 << 14) 33 - #define S5P_CIWDOFST_HOROFF(x) ((x) << 16) 34 - #define S5P_CIWDOFST_VEROFF(x) ((x) << 0) 35 - #define S5P_CIWDOFST_VEROFF_MASK (0xfff << 0) 36 - 37 - /* Global control */ 38 - #define S5P_CIGCTRL 0x08 39 - #define S5P_CIGCTRL_SWRST (1 << 31) 40 - #define S5P_CIGCTRL_CAMRST_A (1 << 30) 41 - #define S5P_CIGCTRL_SELCAM_ITU_A (1 << 29) 42 - #define S5P_CIGCTRL_TESTPAT_NORMAL (0 << 27) 43 - #define S5P_CIGCTRL_TESTPAT_COLOR_BAR (1 << 27) 44 - #define S5P_CIGCTRL_TESTPAT_HOR_INC (2 << 27) 45 - #define S5P_CIGCTRL_TESTPAT_VER_INC (3 << 27) 46 - #define S5P_CIGCTRL_TESTPAT_MASK (3 << 27) 47 - #define S5P_CIGCTRL_TESTPAT_SHIFT (27) 48 - #define S5P_CIGCTRL_INVPOLPCLK (1 << 26) 49 - #define S5P_CIGCTRL_INVPOLVSYNC (1 << 25) 50 - #define S5P_CIGCTRL_INVPOLHREF (1 << 24) 51 - #define S5P_CIGCTRL_IRQ_OVFEN (1 << 22) 52 - #define S5P_CIGCTRL_HREF_MASK (1 << 21) 53 - #define S5P_CIGCTRL_IRQ_LEVEL (1 << 20) 54 - #define S5P_CIGCTRL_IRQ_CLR (1 << 19) 55 - #define S5P_CIGCTRL_IRQ_ENABLE (1 << 16) 56 - #define S5P_CIGCTRL_SHDW_DISABLE (1 << 12) 57 - #define S5P_CIGCTRL_CAM_JPEG (1 << 8) 58 - #define S5P_CIGCTRL_SELCAM_MIPI_A (1 << 7) 59 - #define S5P_CIGCTRL_CAMIF_SELWB (1 << 6) 60 - /* 0 - ITU601; 1 - ITU709 */ 61 - #define S5P_CIGCTRL_CSC_ITU601_709 (1 << 5) 62 - #define S5P_CIGCTRL_INVPOLHSYNC (1 << 4) 63 - #define S5P_CIGCTRL_SELCAM_MIPI (1 << 3) 64 - #define S5P_CIGCTRL_INVPOLFIELD (1 << 1) 65 - #define S5P_CIGCTRL_INTERLACE (1 << 0) 66 - 67 - /* Window offset 2 */ 68 - #define S5P_CIWDOFST2 0x14 69 - #define S5P_CIWDOFST2_HOROFF_MASK (0xfff << 16) 70 - #define S5P_CIWDOFST2_VEROFF_MASK (0xfff << 0) 71 - #define S5P_CIWDOFST2_HOROFF(x) ((x) << 16) 72 - #define S5P_CIWDOFST2_VEROFF(x) ((x) << 0) 73 - 74 - /* Output DMA Y/Cb/Cr plane start addresses */ 75 - #define S5P_CIOYSA(n) (0x18 + (n) * 4) 76 - #define S5P_CIOCBSA(n) (0x28 + (n) * 4) 77 - #define S5P_CIOCRSA(n) (0x38 + (n) * 4) 78 - 79 - /* Target image format */ 80 - #define S5P_CITRGFMT 0x48 81 - #define S5P_CITRGFMT_INROT90 (1 << 31) 82 - #define S5P_CITRGFMT_YCBCR420 (0 << 29) 83 - #define S5P_CITRGFMT_YCBCR422 (1 << 29) 84 - #define S5P_CITRGFMT_YCBCR422_1P (2 << 29) 85 - #define S5P_CITRGFMT_RGB (3 << 29) 86 - #define S5P_CITRGFMT_FMT_MASK (3 << 29) 87 - #define S5P_CITRGFMT_HSIZE_MASK (0xfff << 16) 88 - #define S5P_CITRGFMT_FLIP_SHIFT (14) 89 - #define S5P_CITRGFMT_FLIP_NORMAL (0 << 14) 90 - #define S5P_CITRGFMT_FLIP_X_MIRROR (1 << 14) 91 - #define S5P_CITRGFMT_FLIP_Y_MIRROR (2 << 14) 92 - #define S5P_CITRGFMT_FLIP_180 (3 << 14) 93 - #define S5P_CITRGFMT_FLIP_MASK (3 << 14) 94 - #define S5P_CITRGFMT_OUTROT90 (1 << 13) 95 - #define S5P_CITRGFMT_VSIZE_MASK (0xfff << 0) 96 - #define S5P_CITRGFMT_HSIZE(x) ((x) << 16) 97 - #define S5P_CITRGFMT_VSIZE(x) ((x) << 0) 98 - 99 - /* Output DMA control */ 100 - #define S5P_CIOCTRL 0x4c 101 - #define S5P_CIOCTRL_ORDER422_MASK (3 << 0) 102 - #define S5P_CIOCTRL_ORDER422_CRYCBY (0 << 0) 103 - #define S5P_CIOCTRL_ORDER422_CBYCRY (1 << 0) 104 - #define S5P_CIOCTRL_ORDER422_YCRYCB (2 << 0) 105 - #define S5P_CIOCTRL_ORDER422_YCBYCR (3 << 0) 106 - #define S5P_CIOCTRL_LASTIRQ_ENABLE (1 << 2) 107 - #define S5P_CIOCTRL_YCBCR_3PLANE (0 << 3) 108 - #define S5P_CIOCTRL_YCBCR_2PLANE (1 << 3) 109 - #define S5P_CIOCTRL_YCBCR_PLANE_MASK (1 << 3) 110 - #define S5P_CIOCTRL_ALPHA_OUT_MASK (0xff << 4) 111 - #define S5P_CIOCTRL_RGB16FMT_MASK (3 << 16) 112 - #define S5P_CIOCTRL_RGB565 (0 << 16) 113 - #define S5P_CIOCTRL_ARGB1555 (1 << 16) 114 - #define S5P_CIOCTRL_ARGB4444 (2 << 16) 115 - #define S5P_CIOCTRL_ORDER2P_SHIFT (24) 116 - #define S5P_CIOCTRL_ORDER2P_MASK (3 << 24) 117 - #define S5P_CIOCTRL_ORDER422_2P_LSB_CRCB (0 << 24) 118 - 119 - /* Pre-scaler control 1 */ 120 - #define S5P_CISCPRERATIO 0x50 121 - #define S5P_CISCPRERATIO_SHFACTOR(x) ((x) << 28) 122 - #define S5P_CISCPRERATIO_HOR(x) ((x) << 16) 123 - #define S5P_CISCPRERATIO_VER(x) ((x) << 0) 124 - 125 - #define S5P_CISCPREDST 0x54 126 - #define S5P_CISCPREDST_WIDTH(x) ((x) << 16) 127 - #define S5P_CISCPREDST_HEIGHT(x) ((x) << 0) 128 - 129 - /* Main scaler control */ 130 - #define S5P_CISCCTRL 0x58 131 - #define S5P_CISCCTRL_SCALERBYPASS (1 << 31) 132 - #define S5P_CISCCTRL_SCALEUP_H (1 << 30) 133 - #define S5P_CISCCTRL_SCALEUP_V (1 << 29) 134 - #define S5P_CISCCTRL_CSCR2Y_WIDE (1 << 28) 135 - #define S5P_CISCCTRL_CSCY2R_WIDE (1 << 27) 136 - #define S5P_CISCCTRL_LCDPATHEN_FIFO (1 << 26) 137 - #define S5P_CISCCTRL_INTERLACE (1 << 25) 138 - #define S5P_CISCCTRL_SCALERSTART (1 << 15) 139 - #define S5P_CISCCTRL_INRGB_FMT_RGB565 (0 << 13) 140 - #define S5P_CISCCTRL_INRGB_FMT_RGB666 (1 << 13) 141 - #define S5P_CISCCTRL_INRGB_FMT_RGB888 (2 << 13) 142 - #define S5P_CISCCTRL_INRGB_FMT_MASK (3 << 13) 143 - #define S5P_CISCCTRL_OUTRGB_FMT_RGB565 (0 << 11) 144 - #define S5P_CISCCTRL_OUTRGB_FMT_RGB666 (1 << 11) 145 - #define S5P_CISCCTRL_OUTRGB_FMT_RGB888 (2 << 11) 146 - #define S5P_CISCCTRL_OUTRGB_FMT_MASK (3 << 11) 147 - #define S5P_CISCCTRL_RGB_EXT (1 << 10) 148 - #define S5P_CISCCTRL_ONE2ONE (1 << 9) 149 - #define S5P_CISCCTRL_MHRATIO(x) ((x) << 16) 150 - #define S5P_CISCCTRL_MVRATIO(x) ((x) << 0) 151 - #define S5P_CISCCTRL_MHRATIO_MASK (0x1ff << 16) 152 - #define S5P_CISCCTRL_MVRATIO_MASK (0x1ff << 0) 153 - #define S5P_CISCCTRL_MHRATIO_EXT(x) (((x) >> 6) << 16) 154 - #define S5P_CISCCTRL_MVRATIO_EXT(x) (((x) >> 6) << 0) 155 - 156 - /* Target area */ 157 - #define S5P_CITAREA 0x5c 158 - #define S5P_CITAREA_MASK 0x0fffffff 159 - 160 - /* General status */ 161 - #define S5P_CISTATUS 0x64 162 - #define S5P_CISTATUS_OVFIY (1 << 31) 163 - #define S5P_CISTATUS_OVFICB (1 << 30) 164 - #define S5P_CISTATUS_OVFICR (1 << 29) 165 - #define S5P_CISTATUS_VSYNC (1 << 28) 166 - #define S5P_CISTATUS_FRAMECNT_MASK (3 << 26) 167 - #define S5P_CISTATUS_FRAMECNT_SHIFT 26 168 - #define S5P_CISTATUS_WINOFF_EN (1 << 25) 169 - #define S5P_CISTATUS_IMGCPT_EN (1 << 22) 170 - #define S5P_CISTATUS_IMGCPT_SCEN (1 << 21) 171 - #define S5P_CISTATUS_VSYNC_A (1 << 20) 172 - #define S5P_CISTATUS_VSYNC_B (1 << 19) 173 - #define S5P_CISTATUS_OVRLB (1 << 18) 174 - #define S5P_CISTATUS_FRAME_END (1 << 17) 175 - #define S5P_CISTATUS_LASTCAPT_END (1 << 16) 176 - #define S5P_CISTATUS_VVALID_A (1 << 15) 177 - #define S5P_CISTATUS_VVALID_B (1 << 14) 178 - 179 - /* Indexes to the last and the currently processed buffer. */ 180 - #define S5P_CISTATUS2 0x68 181 - 182 - /* Image capture control */ 183 - #define S5P_CIIMGCPT 0xc0 184 - #define S5P_CIIMGCPT_IMGCPTEN (1 << 31) 185 - #define S5P_CIIMGCPT_IMGCPTEN_SC (1 << 30) 186 - #define S5P_CIIMGCPT_CPT_FREN_ENABLE (1 << 25) 187 - #define S5P_CIIMGCPT_CPT_FRMOD_CNT (1 << 18) 188 - 189 - /* Frame capture sequence */ 190 - #define S5P_CICPTSEQ 0xc4 191 - 192 - /* Image effect */ 193 - #define S5P_CIIMGEFF 0xd0 194 - #define S5P_CIIMGEFF_IE_ENABLE (1 << 30) 195 - #define S5P_CIIMGEFF_IE_SC_BEFORE (0 << 29) 196 - #define S5P_CIIMGEFF_IE_SC_AFTER (1 << 29) 197 - #define S5P_CIIMGEFF_FIN_BYPASS (0 << 26) 198 - #define S5P_CIIMGEFF_FIN_ARBITRARY (1 << 26) 199 - #define S5P_CIIMGEFF_FIN_NEGATIVE (2 << 26) 200 - #define S5P_CIIMGEFF_FIN_ARTFREEZE (3 << 26) 201 - #define S5P_CIIMGEFF_FIN_EMBOSSING (4 << 26) 202 - #define S5P_CIIMGEFF_FIN_SILHOUETTE (5 << 26) 203 - #define S5P_CIIMGEFF_FIN_MASK (7 << 26) 204 - #define S5P_CIIMGEFF_PAT_CBCR_MASK ((0xff < 13) | (0xff < 0)) 205 - #define S5P_CIIMGEFF_PAT_CB(x) ((x) << 13) 206 - #define S5P_CIIMGEFF_PAT_CR(x) ((x) << 0) 207 - 208 - /* Input DMA Y/Cb/Cr plane start address 0/1 */ 209 - #define S5P_CIIYSA(n) (0xd4 + (n) * 0x70) 210 - #define S5P_CIICBSA(n) (0xd8 + (n) * 0x70) 211 - #define S5P_CIICRSA(n) (0xdc + (n) * 0x70) 212 - 213 - /* Real input DMA image size */ 214 - #define S5P_CIREAL_ISIZE 0xf8 215 - #define S5P_CIREAL_ISIZE_AUTOLOAD_EN (1 << 31) 216 - #define S5P_CIREAL_ISIZE_ADDR_CH_DIS (1 << 30) 217 - #define S5P_CIREAL_ISIZE_HEIGHT(x) ((x) << 16) 218 - #define S5P_CIREAL_ISIZE_WIDTH(x) ((x) << 0) 219 - 220 - 221 - /* Input DMA control */ 222 - #define S5P_MSCTRL 0xfc 223 - #define S5P_MSCTRL_IN_BURST_COUNT_MASK (0xF << 24) 224 - #define S5P_MSCTRL_2P_IN_ORDER_MASK (3 << 16) 225 - #define S5P_MSCTRL_2P_IN_ORDER_SHIFT 16 226 - #define S5P_MSCTRL_C_INT_IN_3PLANE (0 << 15) 227 - #define S5P_MSCTRL_C_INT_IN_2PLANE (1 << 15) 228 - #define S5P_MSCTRL_C_INT_IN_MASK (1 << 15) 229 - #define S5P_MSCTRL_FLIP_SHIFT 13 230 - #define S5P_MSCTRL_FLIP_MASK (3 << 13) 231 - #define S5P_MSCTRL_FLIP_NORMAL (0 << 13) 232 - #define S5P_MSCTRL_FLIP_X_MIRROR (1 << 13) 233 - #define S5P_MSCTRL_FLIP_Y_MIRROR (2 << 13) 234 - #define S5P_MSCTRL_FLIP_180 (3 << 13) 235 - #define S5P_MSCTRL_FIFO_CTRL_FULL (1 << 12) 236 - #define S5P_MSCTRL_ORDER422_SHIFT 4 237 - #define S5P_MSCTRL_ORDER422_YCBYCR (0 << 4) 238 - #define S5P_MSCTRL_ORDER422_CBYCRY (1 << 4) 239 - #define S5P_MSCTRL_ORDER422_YCRYCB (2 << 4) 240 - #define S5P_MSCTRL_ORDER422_CRYCBY (3 << 4) 241 - #define S5P_MSCTRL_ORDER422_MASK (3 << 4) 242 - #define S5P_MSCTRL_INPUT_EXTCAM (0 << 3) 243 - #define S5P_MSCTRL_INPUT_MEMORY (1 << 3) 244 - #define S5P_MSCTRL_INPUT_MASK (1 << 3) 245 - #define S5P_MSCTRL_INFORMAT_YCBCR420 (0 << 1) 246 - #define S5P_MSCTRL_INFORMAT_YCBCR422 (1 << 1) 247 - #define S5P_MSCTRL_INFORMAT_YCBCR422_1P (2 << 1) 248 - #define S5P_MSCTRL_INFORMAT_RGB (3 << 1) 249 - #define S5P_MSCTRL_INFORMAT_MASK (3 << 1) 250 - #define S5P_MSCTRL_ENVID (1 << 0) 251 - #define S5P_MSCTRL_IN_BURST_COUNT(x) ((x) << 24) 252 - 253 - /* Output DMA Y/Cb/Cr offset */ 254 - #define S5P_CIOYOFF 0x168 255 - #define S5P_CIOCBOFF 0x16c 256 - #define S5P_CIOCROFF 0x170 257 - 258 - /* Input DMA Y/Cb/Cr offset */ 259 - #define S5P_CIIYOFF 0x174 260 - #define S5P_CIICBOFF 0x178 261 - #define S5P_CIICROFF 0x17c 262 - 263 - #define S5P_CIO_OFFS_VER(x) ((x) << 16) 264 - #define S5P_CIO_OFFS_HOR(x) ((x) << 0) 265 - 266 - /* Input DMA original image size */ 267 - #define S5P_ORGISIZE 0x180 268 - 269 - /* Output DMA original image size */ 270 - #define S5P_ORGOSIZE 0x184 271 - 272 - #define S5P_ORIG_SIZE_VER(x) ((x) << 16) 273 - #define S5P_ORIG_SIZE_HOR(x) ((x) << 0) 274 - 275 - /* Real output DMA image size (extension register) */ 276 - #define S5P_CIEXTEN 0x188 277 - #define S5P_CIEXTEN_MHRATIO_EXT(x) (((x) & 0x3f) << 10) 278 - #define S5P_CIEXTEN_MVRATIO_EXT(x) ((x) & 0x3f) 279 - #define S5P_CIEXTEN_MHRATIO_EXT_MASK (0x3f << 10) 280 - #define S5P_CIEXTEN_MVRATIO_EXT_MASK 0x3f 281 - 282 - #define S5P_CIDMAPARAM 0x18c 283 - #define S5P_CIDMAPARAM_R_LINEAR (0 << 29) 284 - #define S5P_CIDMAPARAM_R_64X32 (3 << 29) 285 - #define S5P_CIDMAPARAM_W_LINEAR (0 << 13) 286 - #define S5P_CIDMAPARAM_W_64X32 (3 << 13) 287 - #define S5P_CIDMAPARAM_TILE_MASK ((3 << 29) | (3 << 13)) 288 - 289 - /* MIPI CSI image format */ 290 - #define S5P_CSIIMGFMT 0x194 291 - #define S5P_CSIIMGFMT_YCBCR422_8BIT 0x1e 292 - #define S5P_CSIIMGFMT_RAW8 0x2a 293 - #define S5P_CSIIMGFMT_RAW10 0x2b 294 - #define S5P_CSIIMGFMT_RAW12 0x2c 295 - /* User defined formats. x = 0...16. */ 296 - #define S5P_CSIIMGFMT_USER(x) (0x30 + x - 1) 297 - 298 - /* Output frame buffer sequence mask */ 299 - #define S5P_CIFCNTSEQ 0x1FC 300 - 301 - #endif /* REGS_FIMC_H_ */