/* * Copyright (C) 2005-2015 Freescale Semiconductor, Inc. All Rights Reserved. */ /* * The code contained herein is licensed under the GNU General Public * License. You may obtain a copy of the GNU General Public License * Version 2 or later at the following locations: * * http://www.opensource.org/licenses/gpl-license.html * http://www.gnu.org/copyleft/gpl.html */ /* * @file ipu_regs.h * * @brief IPU Register definitions * * @ingroup IPU */ #ifndef __IPU_REGS_INCLUDED__ #define __IPU_REGS_INCLUDED__ #include "ipu_prv.h" #define IPU_MCU_T_DEFAULT 8 /* Register addresses */ /* IPU Common registers */ #define IPU_CM_REG(offset) (offset) #define IPU_CONF IPU_CM_REG(0) #define IPU_SRM_PRI1 IPU_CM_REG(0x00A0) #define IPU_SRM_PRI2 IPU_CM_REG(0x00A4) #define IPU_FS_PROC_FLOW1 IPU_CM_REG(0x00A8) #define IPU_FS_PROC_FLOW2 IPU_CM_REG(0x00AC) #define IPU_FS_PROC_FLOW3 IPU_CM_REG(0x00B0) #define IPU_FS_DISP_FLOW1 IPU_CM_REG(0x00B4) #define IPU_FS_DISP_FLOW2 IPU_CM_REG(0x00B8) #define IPU_SKIP IPU_CM_REG(0x00BC) #define IPU_DISP_ALT_CONF IPU_CM_REG(0x00C0) #define IPU_DISP_GEN IPU_CM_REG(0x00C4) #define IPU_DISP_ALT1 IPU_CM_REG(0x00C8) #define IPU_DISP_ALT2 IPU_CM_REG(0x00CC) #define IPU_DISP_ALT3 IPU_CM_REG(0x00D0) #define IPU_DISP_ALT4 IPU_CM_REG(0x00D4) #define IPU_SNOOP IPU_CM_REG(0x00D8) #define IPU_MEM_RST IPU_CM_REG(0x00DC) #define IPU_PM IPU_CM_REG(0x00E0) #define IPU_GPR IPU_CM_REG(0x00E4) #define IPU_CHA_DB_MODE_SEL(ch) IPU_CM_REG(0x0150 + 4 * ((ch) / 32)) #define IPU_ALT_CHA_DB_MODE_SEL(ch) IPU_CM_REG(0x0168 + 4 * ((ch) / 32)) /* * IPUv3D doesn't support triple buffer, so point * IPU_CHA_TRB_MODE_SEL, IPU_CHA_TRIPLE_CUR_BUF and * IPU_CHA_BUF2_RDY to readonly * IPU_ALT_CUR_BUF0 for IPUv3D. */ #define IPU_CHA_TRB_MODE_SEL(type, ch) IPU_CM_REG({(type) >= IPUv3EX ? \ (0x0178 + 4 * ((ch) / 32)) : \ (0x012C); }) #define IPU_CHA_TRIPLE_CUR_BUF(type, ch) IPU_CM_REG({(type) >= IPUv3EX ? \ (0x0258 + \ 4 * (((ch) * 2) / 32)) : \ (0x012C); }) #define IPU_CHA_BUF2_RDY(type, ch) IPU_CM_REG({(type) >= IPUv3EX ? \ (0x0288 + 4 * ((ch) / 32)) : \ (0x012C); }) #define IPU_CHA_CUR_BUF(type, ch) IPU_CM_REG({(type) >= IPUv3EX ? \ (0x023C + 4 * ((ch) / 32)) : \ (0x0124 + 4 * ((ch) / 32)); }) #define IPU_ALT_CUR_BUF0(type) IPU_CM_REG({(type) >= IPUv3EX ? \ (0x0244) : \ (0x012C); }) #define IPU_ALT_CUR_BUF1(type) IPU_CM_REG({(type) >= IPUv3EX ? \ (0x0248) : \ (0x0130); }) #define IPU_SRM_STAT(type) IPU_CM_REG({(type) >= IPUv3EX ? \ (0x024C) : \ (0x0134); }) #define IPU_PROC_TASK_STAT(type) IPU_CM_REG({(type) >= IPUv3EX ? \ (0x0250) : \ (0x0138); }) #define IPU_DISP_TASK_STAT(type) IPU_CM_REG({(type) >= IPUv3EX ? \ (0x0254) : \ (0x013C); }) #define IPU_CHA_BUF0_RDY(type, ch) IPU_CM_REG({(type) >= IPUv3EX ? \ (0x0268 + 4 * ((ch) / 32)) : \ (0x0140 + 4 * ((ch) / 32)); }) #define IPU_CHA_BUF1_RDY(type, ch) IPU_CM_REG({(type) >= IPUv3EX ? \ (0x0270 + 4 * ((ch) / 32)) : \ (0x0148 + 4 * ((ch) / 32)); }) #define IPU_ALT_CHA_BUF0_RDY(type, ch) IPU_CM_REG({(type) >= IPUv3EX ? \ (0x0278 + 4 * ((ch) / 32)) : \ (0x0158 + 4 * ((ch) / 32)); }) #define IPU_ALT_CHA_BUF1_RDY(type, ch) IPU_CM_REG({(type) >= IPUv3EX ? \ (0x0280 + 4 * ((ch) / 32)) : \ (0x0160 + 4 * ((ch) / 32)); }) #define IPU_INT_CTRL(n) IPU_CM_REG(0x003C + 4 * ((n) - 1)) #define IPU_INT_STAT(type, n) IPU_CM_REG({(type) >= IPUv3EX ? \ (0x0200 + 4 * ((n) - 1)) : \ (0x00E8 + 4 * ((n) - 1)); }) #define IPUIRQ_2_STATREG(type, irq) IPU_CM_REG(IPU_INT_STAT((type), 1) + 4 \ * ((irq) / 32)) #define IPUIRQ_2_CTRLREG(irq) IPU_CM_REG(IPU_INT_CTRL(1) + 4 * ((irq) / 32)) #define IPUIRQ_2_MASK(irq) (1UL << ((irq) & 0x1F)) /* IPU VDI registers */ #define IPU_VDI_REG(offset) (offset) #define VDI_FSIZE IPU_VDI_REG(0) #define VDI_C IPU_VDI_REG(0x0004) /* IPU CSI Registers */ #define IPU_CSI_REG(offset) (offset) #define CSI_SENS_CONF IPU_CSI_REG(0) #define CSI_SENS_FRM_SIZE IPU_CSI_REG(0x0004) #define CSI_ACT_FRM_SIZE IPU_CSI_REG(0x0008) #define CSI_OUT_FRM_CTRL IPU_CSI_REG(0x000C) #define CSI_TST_CTRL IPU_CSI_REG(0x0010) #define CSI_CCIR_CODE_1 IPU_CSI_REG(0x0014) #define CSI_CCIR_CODE_2 IPU_CSI_REG(0x0018) #define CSI_CCIR_CODE_3 IPU_CSI_REG(0x001C) #define CSI_MIPI_DI IPU_CSI_REG(0x0020) #define CSI_SKIP IPU_CSI_REG(0x0024) #define CSI_CPD_CTRL IPU_CSI_REG(0x0028) #define CSI_CPD_RC(n) IPU_CSI_REG(0x002C + 4 * (n)) #define CSI_CPD_RS(n) IPU_CSI_REG(0x004C + 4 * (n)) #define CSI_CPD_GRC(n) IPU_CSI_REG(0x005C + 4 * (n)) #define CSI_CPD_GRS(n) IPU_CSI_REG(0x007C + 4 * (n)) #define CSI_CPD_GBC(n) IPU_CSI_REG(0x008C + 4 * (n)) #define CSI_CPD_GBS(n) IPU_CSI_REG(0x00AC + 4 * (n)) #define CSI_CPD_BC(n) IPU_CSI_REG(0x00BC + 4 * (n)) #define CSI_CPD_BS(n) IPU_CSI_REG(0x00DC + 4 * (n)) #define CSI_CPD_OFFSET1 IPU_CSI_REG(0x00EC) #define CSI_CPD_OFFSET2 IPU_CSI_REG(0x00F0) /* IPU SMFC Registers */ #define IPU_SMFC_REG(offset) (offset) #define SMFC_MAP IPU_SMFC_REG(0) #define SMFC_WMC IPU_SMFC_REG(0x0004) #define SMFC_BS IPU_SMFC_REG(0x0008) /* IPU IC Registers */ #define IPU_IC_REG(offset) (offset) #define IC_CONF IPU_IC_REG(0) #define IC_PRP_ENC_RSC IPU_IC_REG(0x0004) #define IC_PRP_VF_RSC IPU_IC_REG(0x0008) #define IC_PP_RSC IPU_IC_REG(0x000C) #define IC_CMBP_1 IPU_IC_REG(0x0010) #define IC_CMBP_2 IPU_IC_REG(0x0014) #define IC_IDMAC_1 IPU_IC_REG(0x0018) #define IC_IDMAC_2 IPU_IC_REG(0x001C) #define IC_IDMAC_3 IPU_IC_REG(0x0020) #define IC_IDMAC_4 IPU_IC_REG(0x0024) /* IPU IDMAC Registers */ #define IPU_IDMAC_REG(offset) (offset) #define IDMAC_CONF IPU_IDMAC_REG(0x0000) #define IDMAC_CHA_EN(ch) IPU_IDMAC_REG(0x0004 + 4 * ((ch) / 32)) #define IDMAC_SEP_ALPHA IPU_IDMAC_REG(0x000C) #define IDMAC_ALT_SEP_ALPHA IPU_IDMAC_REG(0x0010) #define IDMAC_CHA_PRI(ch) IPU_IDMAC_REG(0x0014 + 4 * ((ch) / 32)) #define IDMAC_WM_EN(ch) IPU_IDMAC_REG(0x001C + 4 * ((ch) / 32)) #define IDMAC_CH_LOCK_EN_1(type) IPU_IDMAC_REG({(type) >= IPUv3EX ? \ (0x0024) : 0; }) #define IDMAC_CH_LOCK_EN_2(type) IPU_IDMAC_REG({(type) >= IPUv3EX ? \ (0x0028) : \ (0x0024); }) #define IDMAC_SUB_ADDR_0(type) IPU_IDMAC_REG({(type) >= IPUv3EX ? \ (0x002C) : \ (0x0028); }) #define IDMAC_SUB_ADDR_1(type) IPU_IDMAC_REG({(type) >= IPUv3EX ? \ (0x0030) : \ (0x002C); }) #define IDMAC_SUB_ADDR_2(type) IPU_IDMAC_REG({(type) >= IPUv3EX ? \ (0x0034) : \ (0x0030); }) /* * IPUv3D doesn't support IDMAC_SUB_ADDR_3 and IDMAC_SUB_ADDR_4, * so point them to readonly IDMAC_CHA_BUSY1 for IPUv3D. */ #define IDMAC_SUB_ADDR_3(type) IPU_IDMAC_REG({(type) >= IPUv3EX ? \ (0x0038) : \ (0x0040); }) #define IDMAC_SUB_ADDR_4(type) IPU_IDMAC_REG({(type) >= IPUv3EX ? \ (0x003C) : \ (0x0040); }) #define IDMAC_BAND_EN(type, ch) IPU_IDMAC_REG({(type) >= IPUv3EX ? \ (0x0040 + 4 * ((ch) / 32)) : \ (0x0034 + 4 * ((ch) / 32)); }) #define IDMAC_CHA_BUSY(type, ch) IPU_IDMAC_REG({(type) >= IPUv3EX ? \ (0x0100 + 4 * ((ch) / 32)) : \ (0x0040 + 4 * ((ch) / 32)); }) /* IPU DI Registers */ #define IPU_DI_REG(offset) (offset) #define DI_GENERAL IPU_DI_REG(0) #define DI_BS_CLKGEN0 IPU_DI_REG(0x0004) #define DI_BS_CLKGEN1 IPU_DI_REG(0x0008) #define DI_SW_GEN0(gen) IPU_DI_REG(0x000C + 4 * ((gen) - 1)) #define DI_SW_GEN1(gen) IPU_DI_REG(0x0030 + 4 * ((gen) - 1)) #define DI_STP_REP(gen) IPU_DI_REG(0x0148 + 4 * (((gen) - 1) / 2)) #define DI_SYNC_AS_GEN IPU_DI_REG(0x0054) #define DI_DW_GEN(gen) IPU_DI_REG(0x0058 + 4 * (gen)) #define DI_DW_SET(gen, set) IPU_DI_REG(0x0088 + 4 * ((gen) + 0xC * (set))) #define DI_SER_CONF IPU_DI_REG(0x015C) #define DI_SSC IPU_DI_REG(0x0160) #define DI_POL IPU_DI_REG(0x0164) #define DI_AW0 IPU_DI_REG(0x0168) #define DI_AW1 IPU_DI_REG(0x016C) #define DI_SCR_CONF IPU_DI_REG(0x0170) #define DI_STAT IPU_DI_REG(0x0174) /* IPU DMFC Registers */ #define IPU_DMFC_REG(offset) (offset) #define DMFC_RD_CHAN IPU_DMFC_REG(0) #define DMFC_WR_CHAN IPU_DMFC_REG(0x0004) #define DMFC_WR_CHAN_DEF IPU_DMFC_REG(0x0008) #define DMFC_DP_CHAN IPU_DMFC_REG(0x000C) #define DMFC_DP_CHAN_DEF IPU_DMFC_REG(0x0010) #define DMFC_GENERAL1 IPU_DMFC_REG(0x0014) #define DMFC_GENERAL2 IPU_DMFC_REG(0x0018) #define DMFC_IC_CTRL IPU_DMFC_REG(0x001C) #define DMFC_STAT IPU_DMFC_REG(0x0020) /* IPU DC Registers */ #define IPU_DC_REG(offset) (offset) #define DC_MAP_CONF_PTR(n) IPU_DC_REG(0x0108 + ((n) & ~0x1) * 2) #define DC_MAP_CONF_VAL(n) IPU_DC_REG(0x0144 + ((n) & ~0x1) * 2) #define _RL_CH_2_OFFSET(ch) (((ch) == 0) ? 8 : ( \ ((ch) == 1) ? 0x24 : ( \ ((ch) == 2) ? 0x40 : ( \ ((ch) == 5) ? 0x64 : ( \ ((ch) == 6) ? 0x80 : ( \ ((ch) == 8) ? 0x9C : ( \ ((ch) == 9) ? 0xBC : (-1)))))))) #define DC_RL_CH(ch, evt) IPU_DC_REG(_RL_CH_2_OFFSET(ch) + \ ((evt) & ~0x1) * 2) #define DC_EVT_NF 0 #define DC_EVT_NL 1 #define DC_EVT_EOF 2 #define DC_EVT_NFIELD 3 #define DC_EVT_EOL 4 #define DC_EVT_EOFIELD 5 #define DC_EVT_NEW_ADDR 6 #define DC_EVT_NEW_CHAN 7 #define DC_EVT_NEW_DATA 8 #define DC_EVT_NEW_ADDR_W_0 0 #define DC_EVT_NEW_ADDR_W_1 1 #define DC_EVT_NEW_CHAN_W_0 2 #define DC_EVT_NEW_CHAN_W_1 3 #define DC_EVT_NEW_DATA_W_0 4 #define DC_EVT_NEW_DATA_W_1 5 #define DC_EVT_NEW_ADDR_R_0 6 #define DC_EVT_NEW_ADDR_R_1 7 #define DC_EVT_NEW_CHAN_R_0 8 #define DC_EVT_NEW_CHAN_R_1 9 #define DC_EVT_NEW_DATA_R_0 10 #define DC_EVT_NEW_DATA_R_1 11 #define DC_EVEN_UGDE0 12 #define DC_ODD_UGDE0 13 #define DC_EVEN_UGDE1 14 #define DC_ODD_UGDE1 15 #define DC_EVEN_UGDE2 16 #define DC_ODD_UGDE2 17 #define DC_EVEN_UGDE3 18 #define DC_ODD_UGDE3 19 #define dc_ch_offset(ch) \ ({ \ const u8 _offset[] = { \ 0, 0x1C, 0x38, 0x54, 0x58, 0x5C, 0x78, 0, 0x94, 0xB4}; \ _offset[ch]; \ }) #define DC_WR_CH_CONF(ch) IPU_DC_REG(dc_ch_offset(ch)) #define DC_WR_CH_ADDR(ch) IPU_DC_REG(dc_ch_offset(ch) + 4) #define DC_WR_CH_CONF_1 IPU_DC_REG(0x001C) #define DC_WR_CH_ADDR_1 IPU_DC_REG(0x0020) #define DC_WR_CH_CONF_5 IPU_DC_REG(0x005C) #define DC_WR_CH_ADDR_5 IPU_DC_REG(0x0060) #define DC_GEN IPU_DC_REG(0x00D4) #define DC_DISP_CONF1(disp) IPU_DC_REG(0x00D8 + 4 * (disp)) #define DC_DISP_CONF2(disp) IPU_DC_REG(0x00E8 + 4 * (disp)) #define DC_STAT IPU_DC_REG(0x01C8) #define DC_UGDE_0(evt) IPU_DC_REG(0x0174 + 16 * (evt)) #define DC_UGDE_1(evt) IPU_DC_REG(0x0178 + 16 * (evt)) #define DC_UGDE_2(evt) IPU_DC_REG(0x017C + 16 * (evt)) #define DC_UGDE_3(evt) IPU_DC_REG(0x0180 + 16 * (evt)) /* IPU DP Registers */ #define IPU_DP_REG(offset) (offset) #define DP_SYNC 0 #define DP_ASYNC0 0x60 #define DP_ASYNC1 0xBC #define DP_COM_CONF(flow) IPU_DP_REG(flow) #define DP_GRAPH_WIND_CTRL(flow) IPU_DP_REG(0x0004 + (flow)) #define DP_FG_POS(flow) IPU_DP_REG(0x0008 + (flow)) #define DP_GAMMA_C(flow, i) IPU_DP_REG(0x0014 + (flow) + 4 * (i)) #define DP_GAMMA_S(flow, i) IPU_DP_REG(0x0034 + (flow) + 4 * (i)) #define DP_CSC_A_0(flow) IPU_DP_REG(0x0044 + (flow)) #define DP_CSC_A_1(flow) IPU_DP_REG(0x0048 + (flow)) #define DP_CSC_A_2(flow) IPU_DP_REG(0x004C + (flow)) #define DP_CSC_A_3(flow) IPU_DP_REG(0x0050 + (flow)) #define DP_CSC_0(flow) IPU_DP_REG(0x0054 + (flow)) #define DP_CSC_1(flow) IPU_DP_REG(0x0058 + (flow)) enum { IPU_CONF_CSI0_EN = 0x00000001, IPU_CONF_CSI1_EN = 0x00000002, IPU_CONF_IC_EN = 0x00000004, IPU_CONF_ROT_EN = 0x00000008, IPU_CONF_ISP_EN = 0x00000010, IPU_CONF_DP_EN = 0x00000020, IPU_CONF_DI0_EN = 0x00000040, IPU_CONF_DI1_EN = 0x00000080, IPU_CONF_DMFC_EN = 0x00000400, IPU_CONF_SMFC_EN = 0x00000100, IPU_CONF_DC_EN = 0x00000200, IPU_CONF_VDI_EN = 0x00001000, IPU_CONF_IDMAC_DIS = 0x00400000, IPU_CONF_IC_DMFC_SEL = 0x02000000, IPU_CONF_IC_DMFC_SYNC = 0x04000000, IPU_CONF_VDI_DMFC_SYNC = 0x08000000, IPU_CONF_CSI0_DATA_SOURCE = 0x10000000, IPU_CONF_CSI0_DATA_SOURCE_OFFSET = 28, IPU_CONF_CSI1_DATA_SOURCE = 0x20000000, IPU_CONF_IC_INPUT = 0x40000000, IPU_CONF_CSI_SEL = 0x80000000, DI0_COUNTER_RELEASE = 0x01000000, DI1_COUNTER_RELEASE = 0x02000000, FS_PRPVF_ROT_SRC_SEL_MASK = 0x00000F00, FS_PRPVF_ROT_SRC_SEL_OFFSET = 8, FS_PRPENC_ROT_SRC_SEL_MASK = 0x0000000F, FS_PRPENC_ROT_SRC_SEL_OFFSET = 0, FS_PP_ROT_SRC_SEL_MASK = 0x000F0000, FS_PP_ROT_SRC_SEL_OFFSET = 16, FS_PP_SRC_SEL_MASK = 0x0000F000, FS_PP_SRC_SEL_VDOA = 0x00008000, FS_PP_SRC_SEL_OFFSET = 12, FS_PRP_SRC_SEL_MASK = 0x0F000000, FS_PRP_SRC_SEL_OFFSET = 24, FS_VF_IN_VALID = 0x80000000, FS_ENC_IN_VALID = 0x40000000, FS_VDI_SRC_SEL_MASK = 0x30000000, FS_VDI_SRC_SEL_VDOA = 0x20000000, FS_VDOA_DEST_SEL_MASK = 0x00030000, FS_VDOA_DEST_SEL_VDI = 0x00020000, FS_VDOA_DEST_SEL_IC = 0x00010000, FS_VDI_SRC_SEL_OFFSET = 28, FS_PRPENC_DEST_SEL_MASK = 0x0000000F, FS_PRPENC_DEST_SEL_OFFSET = 0, FS_PRPVF_DEST_SEL_MASK = 0x000000F0, FS_PRPVF_DEST_SEL_OFFSET = 4, FS_PRPVF_ROT_DEST_SEL_MASK = 0x00000F00, FS_PRPVF_ROT_DEST_SEL_OFFSET = 8, FS_PP_DEST_SEL_MASK = 0x0000F000, FS_PP_DEST_SEL_OFFSET = 12, FS_PP_ROT_DEST_SEL_MASK = 0x000F0000, FS_PP_ROT_DEST_SEL_OFFSET = 16, FS_PRPENC_ROT_DEST_SEL_MASK = 0x00F00000, FS_PRPENC_ROT_DEST_SEL_OFFSET = 20, FS_SMFC0_DEST_SEL_MASK = 0x0000000F, FS_SMFC0_DEST_SEL_OFFSET = 0, FS_SMFC1_DEST_SEL_MASK = 0x00000070, FS_SMFC1_DEST_SEL_OFFSET = 4, FS_SMFC2_DEST_SEL_MASK = 0x00000780, FS_SMFC2_DEST_SEL_OFFSET = 7, FS_SMFC3_DEST_SEL_MASK = 0x00003800, FS_SMFC3_DEST_SEL_OFFSET = 11, FS_DC1_SRC_SEL_MASK = 0x00F00000, FS_DC1_SRC_SEL_OFFSET = 20, FS_DC2_SRC_SEL_MASK = 0x000F0000, FS_DC2_SRC_SEL_OFFSET = 16, FS_DP_SYNC0_SRC_SEL_MASK = 0x0000000F, FS_DP_SYNC0_SRC_SEL_OFFSET = 0, FS_DP_SYNC1_SRC_SEL_MASK = 0x000000F0, FS_DP_SYNC1_SRC_SEL_OFFSET = 4, FS_DP_ASYNC0_SRC_SEL_MASK = 0x00000F00, FS_DP_ASYNC0_SRC_SEL_OFFSET = 8, FS_DP_ASYNC1_SRC_SEL_MASK = 0x0000F000, FS_DP_ASYNC1_SRC_SEL_OFFSET = 12, FS_AUTO_REF_PER_MASK = 0, FS_AUTO_REF_PER_OFFSET = 16, TSTAT_VF_MASK = 0x0000000C, TSTAT_VF_OFFSET = 2, TSTAT_VF_ROT_MASK = 0x00000300, TSTAT_VF_ROT_OFFSET = 8, TSTAT_ENC_MASK = 0x00000003, TSTAT_ENC_OFFSET = 0, TSTAT_ENC_ROT_MASK = 0x000000C0, TSTAT_ENC_ROT_OFFSET = 6, TSTAT_PP_MASK = 0x00000030, TSTAT_PP_OFFSET = 4, TSTAT_PP_ROT_MASK = 0x00000C00, TSTAT_PP_ROT_OFFSET = 10, TASK_STAT_IDLE = 0, TASK_STAT_ACTIVE = 1, TASK_STAT_WAIT4READY = 2, /* IDMAC register bits */ IDMAC_CONF_USED_BUFS_EN_R = 0x02000000, IDMAC_CONF_USED_BUFS_MAX_R_MASK = 0x01E00000, IDMAC_CONF_USED_BUFS_MAX_R_OFFSET = 21, IDMAC_CONF_USED_BUFS_EN_W = 0x00100000, IDMAC_CONF_USED_BUFS_MAX_W_MASK = 0x000E0000, IDMAC_CONF_USED_BUFS_MAX_W_OFFSET = 17, /* Image Converter Register bits */ IC_CONF_PRPENC_EN = 0x00000001, IC_CONF_PRPENC_CSC1 = 0x00000002, IC_CONF_PRPENC_ROT_EN = 0x00000004, IC_CONF_PRPVF_EN = 0x00000100, IC_CONF_PRPVF_CSC1 = 0x00000200, IC_CONF_PRPVF_CSC2 = 0x00000400, IC_CONF_PRPVF_CMB = 0x00000800, IC_CONF_PRPVF_ROT_EN = 0x00001000, IC_CONF_PP_EN = 0x00010000, IC_CONF_PP_CSC1 = 0x00020000, IC_CONF_PP_CSC2 = 0x00040000, IC_CONF_PP_CMB = 0x00080000, IC_CONF_PP_ROT_EN = 0x00100000, IC_CONF_IC_GLB_LOC_A = 0x10000000, IC_CONF_KEY_COLOR_EN = 0x20000000, IC_CONF_RWS_EN = 0x40000000, IC_CONF_CSI_MEM_WR_EN = 0x80000000, IC_RSZ_MAX_RESIZE_RATIO = 0x00004000, IC_IDMAC_1_CB0_BURST_16 = 0x00000001, IC_IDMAC_1_CB1_BURST_16 = 0x00000002, IC_IDMAC_1_CB2_BURST_16 = 0x00000004, IC_IDMAC_1_CB3_BURST_16 = 0x00000008, IC_IDMAC_1_CB4_BURST_16 = 0x00000010, IC_IDMAC_1_CB5_BURST_16 = 0x00000020, IC_IDMAC_1_CB6_BURST_16 = 0x00000040, IC_IDMAC_1_CB7_BURST_16 = 0x00000080, IC_IDMAC_1_PRPENC_ROT_MASK = 0x00003800, IC_IDMAC_1_PRPENC_ROT_OFFSET = 11, IC_IDMAC_1_PRPVF_ROT_MASK = 0x0001C000, IC_IDMAC_1_PRPVF_ROT_OFFSET = 14, IC_IDMAC_1_PP_ROT_MASK = 0x000E0000, IC_IDMAC_1_PP_ROT_OFFSET = 17, IC_IDMAC_1_PP_FLIP_RS = 0x00400000, IC_IDMAC_1_PRPVF_FLIP_RS = 0x00200000, IC_IDMAC_1_PRPENC_FLIP_RS = 0x00100000, IC_IDMAC_2_PRPENC_HEIGHT_MASK = 0x000003FF, IC_IDMAC_2_PRPENC_HEIGHT_OFFSET = 0, IC_IDMAC_2_PRPVF_HEIGHT_MASK = 0x000FFC00, IC_IDMAC_2_PRPVF_HEIGHT_OFFSET = 10, IC_IDMAC_2_PP_HEIGHT_MASK = 0x3FF00000, IC_IDMAC_2_PP_HEIGHT_OFFSET = 20, IC_IDMAC_3_PRPENC_WIDTH_MASK = 0x000003FF, IC_IDMAC_3_PRPENC_WIDTH_OFFSET = 0, IC_IDMAC_3_PRPVF_WIDTH_MASK = 0x000FFC00, IC_IDMAC_3_PRPVF_WIDTH_OFFSET = 10, IC_IDMAC_3_PP_WIDTH_MASK = 0x3FF00000, IC_IDMAC_3_PP_WIDTH_OFFSET = 20, CSI_SENS_CONF_DATA_FMT_SHIFT = 8, CSI_SENS_CONF_DATA_FMT_MASK = 0x00000700, CSI_SENS_CONF_DATA_FMT_RGB_YUV444 = 0L, CSI_SENS_CONF_DATA_FMT_YUV422_YUYV = 1L, CSI_SENS_CONF_DATA_FMT_YUV422_UYVY = 2L, CSI_SENS_CONF_DATA_FMT_BAYER = 3L, CSI_SENS_CONF_DATA_FMT_RGB565 = 4L, CSI_SENS_CONF_DATA_FMT_RGB555 = 5L, CSI_SENS_CONF_DATA_FMT_RGB444 = 6L, CSI_SENS_CONF_DATA_FMT_JPEG = 7L, CSI_SENS_CONF_VSYNC_POL_SHIFT = 0, CSI_SENS_CONF_HSYNC_POL_SHIFT = 1, CSI_SENS_CONF_DATA_POL_SHIFT = 2, CSI_SENS_CONF_PIX_CLK_POL_SHIFT = 3, CSI_SENS_CONF_SENS_PRTCL_MASK = 0x00000070L, CSI_SENS_CONF_SENS_PRTCL_SHIFT = 4, CSI_SENS_CONF_PACK_TIGHT_SHIFT = 7, CSI_SENS_CONF_DATA_WIDTH_SHIFT = 11, CSI_SENS_CONF_EXT_VSYNC_SHIFT = 15, CSI_SENS_CONF_DIVRATIO_SHIFT = 16, CSI_SENS_CONF_DIVRATIO_MASK = 0x00FF0000L, CSI_SENS_CONF_DATA_DEST_SHIFT = 24, CSI_SENS_CONF_DATA_DEST_MASK = 0x07000000L, CSI_SENS_CONF_JPEG8_EN_SHIFT = 27, CSI_SENS_CONF_JPEG_EN_SHIFT = 28, CSI_SENS_CONF_FORCE_EOF_SHIFT = 29, CSI_SENS_CONF_DATA_EN_POL_SHIFT = 31, CSI_DATA_DEST_ISP = 1L, CSI_DATA_DEST_IC = 2L, CSI_DATA_DEST_IDMAC = 4L, CSI_CCIR_ERR_DET_EN = 0x01000000L, CSI_HORI_DOWNSIZE_EN = 0x80000000L, CSI_VERT_DOWNSIZE_EN = 0x40000000L, CSI_TEST_GEN_MODE_EN = 0x01000000L, CSI_HSC_MASK = 0x1FFF0000, CSI_HSC_SHIFT = 16, CSI_VSC_MASK = 0x00000FFF, CSI_VSC_SHIFT = 0, CSI_TEST_GEN_R_MASK = 0x000000FFL, CSI_TEST_GEN_R_SHIFT = 0, CSI_TEST_GEN_G_MASK = 0x0000FF00L, CSI_TEST_GEN_G_SHIFT = 8, CSI_TEST_GEN_B_MASK = 0x00FF0000L, CSI_TEST_GEN_B_SHIFT = 16, CSI_MIPI_DI0_MASK = 0x000000FFL, CSI_MIPI_DI0_SHIFT = 0, CSI_MIPI_DI1_MASK = 0x0000FF00L, CSI_MIPI_DI1_SHIFT = 8, CSI_MIPI_DI2_MASK = 0x00FF0000L, CSI_MIPI_DI2_SHIFT = 16, CSI_MIPI_DI3_MASK = 0xFF000000L, CSI_MIPI_DI3_SHIFT = 24, CSI_MAX_RATIO_SKIP_ISP_MASK = 0x00070000L, CSI_MAX_RATIO_SKIP_ISP_SHIFT = 16, CSI_SKIP_ISP_MASK = 0x00F80000L, CSI_SKIP_ISP_SHIFT = 19, CSI_MAX_RATIO_SKIP_SMFC_MASK = 0x00000007L, CSI_MAX_RATIO_SKIP_SMFC_SHIFT = 0, CSI_SKIP_SMFC_MASK = 0x000000F8L, CSI_SKIP_SMFC_SHIFT = 3, CSI_ID_2_SKIP_MASK = 0x00000300L, CSI_ID_2_SKIP_SHIFT = 8, CSI_COLOR_FIRST_ROW_MASK = 0x00000002L, CSI_COLOR_FIRST_COMP_MASK = 0x00000001L, SMFC_MAP_CH0_MASK = 0x00000007L, SMFC_MAP_CH0_SHIFT = 0, SMFC_MAP_CH1_MASK = 0x00000038L, SMFC_MAP_CH1_SHIFT = 3, SMFC_MAP_CH2_MASK = 0x000001C0L, SMFC_MAP_CH2_SHIFT = 6, SMFC_MAP_CH3_MASK = 0x00000E00L, SMFC_MAP_CH3_SHIFT = 9, SMFC_WM0_SET_MASK = 0x00000007L, SMFC_WM0_SET_SHIFT = 0, SMFC_WM1_SET_MASK = 0x000001C0L, SMFC_WM1_SET_SHIFT = 6, SMFC_WM2_SET_MASK = 0x00070000L, SMFC_WM2_SET_SHIFT = 16, SMFC_WM3_SET_MASK = 0x01C00000L, SMFC_WM3_SET_SHIFT = 22, SMFC_WM0_CLR_MASK = 0x00000038L, SMFC_WM0_CLR_SHIFT = 3, SMFC_WM1_CLR_MASK = 0x00000E00L, SMFC_WM1_CLR_SHIFT = 9, SMFC_WM2_CLR_MASK = 0x00380000L, SMFC_WM2_CLR_SHIFT = 19, SMFC_WM3_CLR_MASK = 0x0E000000L, SMFC_WM3_CLR_SHIFT = 25, SMFC_BS0_MASK = 0x0000000FL, SMFC_BS0_SHIFT = 0, SMFC_BS1_MASK = 0x000000F0L, SMFC_BS1_SHIFT = 4, SMFC_BS2_MASK = 0x00000F00L, SMFC_BS2_SHIFT = 8, SMFC_BS3_MASK = 0x0000F000L, SMFC_BS3_SHIFT = 12, PF_CONF_TYPE_MASK = 0x00000007, PF_CONF_TYPE_SHIFT = 0, PF_CONF_PAUSE_EN = 0x00000010, PF_CONF_RESET = 0x00008000, PF_CONF_PAUSE_ROW_MASK = 0x00FF0000, PF_CONF_PAUSE_ROW_SHIFT = 16, DI_DW_GEN_ACCESS_SIZE_OFFSET = 24, DI_DW_GEN_COMPONENT_SIZE_OFFSET = 16, DI_GEN_DI_CLK_EXT = 0x100000, DI_GEN_POLARITY_DISP_CLK = 0x00020000, DI_GEN_POLARITY_1 = 0x00000001, DI_GEN_POLARITY_2 = 0x00000002, DI_GEN_POLARITY_3 = 0x00000004, DI_GEN_POLARITY_4 = 0x00000008, DI_GEN_POLARITY_5 = 0x00000010, DI_GEN_POLARITY_6 = 0x00000020, DI_GEN_POLARITY_7 = 0x00000040, DI_GEN_POLARITY_8 = 0x00000080, DI_POL_DRDY_DATA_POLARITY = 0x00000080, DI_POL_DRDY_POLARITY_15 = 0x00000010, DI_VSYNC_SEL_OFFSET = 13, DC_WR_CH_CONF_FIELD_MODE = 0x00000200, DC_WR_CH_CONF_PROG_TYPE_OFFSET = 5, DC_WR_CH_CONF_PROG_TYPE_MASK = 0x000000E0, DC_WR_CH_CONF_PROG_DI_ID = 0x00000004, DC_WR_CH_CONF_PROG_DISP_ID_OFFSET = 3, DC_WR_CH_CONF_PROG_DISP_ID_MASK = 0x00000018, DC_UGDE_0_ODD_EN = 0x02000000, DC_UGDE_0_ID_CODED_MASK = 0x00000007, DC_UGDE_0_ID_CODED_OFFSET = 0, DC_UGDE_0_EV_PRIORITY_MASK = 0x00000078, DC_UGDE_0_EV_PRIORITY_OFFSET = 3, DP_COM_CONF_FG_EN = 0x00000001, DP_COM_CONF_GWSEL = 0x00000002, DP_COM_CONF_GWAM = 0x00000004, DP_COM_CONF_GWCKE = 0x00000008, DP_COM_CONF_CSC_DEF_MASK = 0x00000300, DP_COM_CONF_CSC_DEF_OFFSET = 8, DP_COM_CONF_CSC_DEF_FG = 0x00000300, DP_COM_CONF_CSC_DEF_BG = 0x00000200, DP_COM_CONF_CSC_DEF_BOTH = 0x00000100, DP_COM_CONF_GAMMA_EN = 0x00001000, DP_COM_CONF_GAMMA_YUV_EN = 0x00002000, DI_SER_CONF_LLA_SER_ACCESS = 0x00000020, DI_SER_CONF_SERIAL_CLK_POL = 0x00000010, DI_SER_CONF_SERIAL_DATA_POL = 0x00000008, DI_SER_CONF_SERIAL_RS_POL = 0x00000004, DI_SER_CONF_SERIAL_CS_POL = 0x00000002, DI_SER_CONF_WAIT4SERIAL = 0x00000001, VDI_C_CH_420 = 0x00000000, VDI_C_CH_422 = 0x00000002, VDI_C_MOT_SEL_FULL = 0x00000008, VDI_C_MOT_SEL_LOW = 0x00000004, VDI_C_MOT_SEL_MED = 0x00000000, VDI_C_BURST_SIZE1_4 = 0x00000030, VDI_C_BURST_SIZE2_4 = 0x00000300, VDI_C_BURST_SIZE3_4 = 0x00003000, VDI_C_BURST_SIZE_MASK = 0xF, VDI_C_BURST_SIZE1_OFFSET = 4, VDI_C_BURST_SIZE2_OFFSET = 8, VDI_C_BURST_SIZE3_OFFSET = 12, VDI_C_VWM1_SET_1 = 0x00000000, VDI_C_VWM1_SET_2 = 0x00010000, VDI_C_VWM1_CLR_2 = 0x00080000, VDI_C_VWM3_SET_1 = 0x00000000, VDI_C_VWM3_SET_2 = 0x00400000, VDI_C_VWM3_CLR_2 = 0x02000000, VDI_C_TOP_FIELD_MAN_1 = 0x40000000, VDI_C_TOP_FIELD_AUTO_1 = 0x80000000, }; enum di_pins { DI_PIN11 = 0, DI_PIN12 = 1, DI_PIN13 = 2, DI_PIN14 = 3, DI_PIN15 = 4, DI_PIN16 = 5, DI_PIN17 = 6, DI_PIN_CS = 7, DI_PIN_SER_CLK = 0, DI_PIN_SER_RS = 1, }; enum di_sync_wave { DI_SYNC_NONE = -1, DI_SYNC_CLK = 0, DI_SYNC_INT_HSYNC = 1, DI_SYNC_HSYNC = 2, DI_SYNC_VSYNC = 3, DI_SYNC_DE = 5, }; /* DC template opcodes */ #define WROD(lf) (0x18 | ((lf) << 1)) #define WRG (0x01) #endif