ENGR00123439 DMFC size: IPU DMFC DP high resulution fail to display small frame
[efikamx:linux-kernel.git] / drivers / mxc / ipu3 / ipu_regs.h
1 /*
2  * Copyright (C) 2005-2010 Freescale Semiconductor, Inc. All Rights Reserved.
3  */
4
5 /*
6  * The code contained herein is licensed under the GNU General Public
7  * License. You may obtain a copy of the GNU General Public License
8  * Version 2 or later at the following locations:
9  *
10  * http://www.opensource.org/licenses/gpl-license.html
11  * http://www.gnu.org/copyleft/gpl.html
12  */
13
14 /*
15  * @file ipu_regs.h
16  *
17  * @brief IPU Register definitions
18  *
19  * @ingroup IPU
20  */
21 #ifndef __IPU_REGS_INCLUDED__
22 #define __IPU_REGS_INCLUDED__
23
24 #define IPU_DISP0_BASE          0x00000000
25 #define IPU_MCU_T_DEFAULT       8
26 #define IPU_DISP1_BASE          (IPU_MCU_T_DEFAULT << 25)
27 #define IPU_REG_BASE            0x1E000000
28 #define IPUV3M_REG_BASE         0x06000000
29
30 #define IPU_CM_REG_BASE         0x00000000
31 #define IPU_IDMAC_REG_BASE      0x00008000
32 #define IPU_ISP_REG_BASE        0x00010000
33 #define IPU_DP_REG_BASE         0x00018000
34 #define IPU_IC_REG_BASE         0x00020000
35 #define IPU_IRT_REG_BASE        0x00028000
36 #define IPU_CSI0_REG_BASE       0x00030000
37 #define IPU_CSI1_REG_BASE       0x00038000
38 #define IPU_DI0_REG_BASE        0x00040000
39 #define IPU_DI1_REG_BASE        0x00048000
40 #define IPU_SMFC_REG_BASE       0x00050000
41 #define IPU_DC_REG_BASE         0x00058000
42 #define IPU_DMFC_REG_BASE       0x00060000
43 #define IPU_VDI_REG_BASE        0x00068000
44 #define IPU_CPMEM_REG_BASE      0x01000000
45 #define IPU_LUT_REG_BASE        0x01020000
46 #define IPU_SRM_REG_BASE        0x01040000
47 #define IPU_TPM_REG_BASE        0x01060000
48 #define IPU_DC_TMPL_REG_BASE    0x01080000
49 #define IPU_ISP_TBPR_REG_BASE   0x010C0000
50
51
52 extern u32 *ipu_cm_reg;
53 extern u32 *ipu_idmac_reg;
54 extern u32 *ipu_dp_reg;
55 extern u32 *ipu_ic_reg;
56 extern u32 *ipu_dc_reg;
57 extern u32 *ipu_dc_tmpl_reg;
58 extern u32 *ipu_dmfc_reg;
59 extern u32 *ipu_di_reg[];
60 extern u32 *ipu_smfc_reg;
61 extern u32 *ipu_csi_reg[];
62 extern u32 *ipu_tpmem_base;
63 extern u32 *ipu_disp_base[];
64 extern u32 *ipu_vdi_reg;
65
66 /* Register addresses */
67 /* IPU Common registers */
68 #define IPU_CONF                (ipu_cm_reg)
69
70 #define IPU_SRM_PRI1            (ipu_cm_reg + 0x00A0/4)
71 #define IPU_SRM_PRI2            (ipu_cm_reg + 0x00A4/4)
72 #define IPU_FS_PROC_FLOW1       (ipu_cm_reg + 0x00A8/4)
73 #define IPU_FS_PROC_FLOW2       (ipu_cm_reg + 0x00AC/4)
74 #define IPU_FS_PROC_FLOW3       (ipu_cm_reg + 0x00B0/4)
75 #define IPU_FS_DISP_FLOW1       (ipu_cm_reg + 0x00B4/4)
76 #define IPU_FS_DISP_FLOW2       (ipu_cm_reg + 0x00B8/4)
77 #define IPU_SKIP                (ipu_cm_reg + 0x00BC/4)
78 #define IPU_DISP_ALT_CONF       (ipu_cm_reg + 0x00C0/4)
79 #define IPU_DISP_GEN            (ipu_cm_reg + 0x00C4/4)
80 #define IPU_DISP_ALT1           (ipu_cm_reg + 0x00C8/4)
81 #define IPU_DISP_ALT2           (ipu_cm_reg + 0x00CC/4)
82 #define IPU_DISP_ALT3           (ipu_cm_reg + 0x00D0/4)
83 #define IPU_DISP_ALT4           (ipu_cm_reg + 0x00D4/4)
84 #define IPU_SNOOP               (ipu_cm_reg + 0x00D8/4)
85 #define IPU_MEM_RST             (ipu_cm_reg + 0x00DC/4)
86 #define IPU_PM                  (ipu_cm_reg + 0x00E0/4)
87 #define IPU_GPR                 (ipu_cm_reg + 0x00E4/4)
88 #define IPU_CHA_DB_MODE_SEL(ch) (ipu_cm_reg + 0x0150/4 + (ch / 32))
89 #define IPU_ALT_CHA_DB_MODE_SEL(ch) (ipu_cm_reg + 0x0168/4 + (ch / 32))
90 #define IPU_CHA_CUR_BUF(ch)     ({g_ipu_hw_rev >= 2 ? \
91                                   (ipu_cm_reg + 0x023C/4 + (ch / 32)) : \
92                                   (ipu_cm_reg + 0x0124/4 + (ch / 32)); })
93 #define IPU_ALT_CUR_BUF0        ({g_ipu_hw_rev >= 2 ? \
94                                   (ipu_cm_reg + 0x0244/4) : \
95                                   (ipu_cm_reg + 0x012C/4); })
96 #define IPU_ALT_CUR_BUF1        ({g_ipu_hw_rev >= 2 ? \
97                                   (ipu_cm_reg + 0x0248/4) : \
98                                   (ipu_cm_reg + 0x0130/4); })
99 #define IPU_SRM_STAT            ({g_ipu_hw_rev >= 2 ? \
100                                   (ipu_cm_reg + 0x024C/4) : \
101                                   (ipu_cm_reg + 0x0134/4); })
102 #define IPU_PROC_TASK_STAT      ({g_ipu_hw_rev >= 2 ? \
103                                   (ipu_cm_reg + 0x0250/4) : \
104                                   (ipu_cm_reg + 0x0138/4); })
105 #define IPU_DISP_TASK_STAT      ({g_ipu_hw_rev >= 2 ? \
106                                   (ipu_cm_reg + 0x0254/4) : \
107                                   (ipu_cm_reg + 0x013C/4); })
108 #define IPU_CHA_BUF0_RDY(ch)    ({g_ipu_hw_rev >= 2 ? \
109                                   (ipu_cm_reg + 0x0268/4 + (ch / 32)) : \
110                                   (ipu_cm_reg + 0x0140/4 + (ch / 32)); })
111 #define IPU_CHA_BUF1_RDY(ch)    ({g_ipu_hw_rev >= 2 ? \
112                                   (ipu_cm_reg + 0x0270/4 + (ch / 32)) : \
113                                   (ipu_cm_reg + 0x0148/4 + (ch / 32)); })
114 #define IPU_ALT_CHA_BUF0_RDY(ch) ({g_ipu_hw_rev >= 2 ? \
115                                    (ipu_cm_reg + 0x0278/4 + (ch / 32)) : \
116                                    (ipu_cm_reg + 0x0158/4 + (ch / 32)); })
117 #define IPU_ALT_CHA_BUF1_RDY(ch) ({g_ipu_hw_rev >= 2 ? \
118                                    (ipu_cm_reg + 0x0280/4 + (ch / 32)) : \
119                                    (ipu_cm_reg + 0x0160/4 + (ch / 32)); })
120
121 #define IPU_INT_CTRL(n)         (ipu_cm_reg + 0x003C/4 + ((n) - 1))
122 #define IPU_INT_CTRL_IRQ(irq)   IPU_INT_CTRL(((irq) / 32))
123 #define IPU_INT_STAT_IRQ(irq)   IPU_INT_STAT(((irq) / 32))
124 #define IPU_INT_STAT(n)         ({g_ipu_hw_rev >= 2 ? \
125                                   (ipu_cm_reg + 0x0200/4 + ((n) - 1)) : \
126                                   (ipu_cm_reg + 0x00E8/4 + ((n) - 1)); })
127
128 #define IPUIRQ_2_STATREG(irq)   (IPU_INT_STAT(1) + ((irq) / 32))
129 #define IPUIRQ_2_CTRLREG(irq)   (IPU_INT_CTRL(1) + ((irq) / 32))
130 #define IPUIRQ_2_MASK(irq)      (1UL << ((irq) & 0x1F))
131
132 #define VDI_FSIZE (ipu_vdi_reg)
133 #define VDI_C (ipu_vdi_reg + 0x0004/4)
134
135 /* CMOS Sensor Interface Registers */
136 #define CSI_SENS_CONF(csi)      (ipu_csi_reg[csi])
137 #define CSI_SENS_FRM_SIZE(csi)  (ipu_csi_reg[csi] + 0x0004/4)
138 #define CSI_ACT_FRM_SIZE(csi)   (ipu_csi_reg[csi] + 0x0008/4)
139 #define CSI_OUT_FRM_CTRL(csi)   (ipu_csi_reg[csi] + 0x000C/4)
140 #define CSI_TST_CTRL(csi)       (ipu_csi_reg[csi] + 0x0010/4)
141 #define CSI_CCIR_CODE_1(csi)    (ipu_csi_reg[csi] + 0x0014/4)
142 #define CSI_CCIR_CODE_2(csi)    (ipu_csi_reg[csi] + 0x0018/4)
143 #define CSI_CCIR_CODE_3(csi)    (ipu_csi_reg[csi] + 0x001C/4)
144 #define CSI_MIPI_DI(csi)        (ipu_csi_reg[csi] + 0x0020/4)
145 #define CSI_SKIP(csi)           (ipu_csi_reg[csi] + 0x0024/4)
146 #define CSI_CPD_CTRL(csi)       (ipu_csi_reg[csi] + 0x0028/4)
147 #define CSI_CPD_RC(csi, n)      (ipu_csi_reg[csi] + 0x002C/4 + n)
148 #define CSI_CPD_RS(csi, n)      (ipu_csi_reg[csi] + 0x004C/4 + n)
149 #define CSI_CPD_GRC(csi, n)     (ipu_csi_reg[csi] + 0x005C/4 + n)
150 #define CSI_CPD_GRS(csi, n)     (ipu_csi_reg[csi] + 0x007C/4 + n)
151 #define CSI_CPD_GBC(csi, n)     (ipu_csi_reg[csi] + 0x008C/4 + n)
152 #define CSI_CPD_GBS(csi, n)     (ipu_csi_reg[csi] + 0x00AC/4 + n)
153 #define CSI_CPD_BC(csi, n)      (ipu_csi_reg[csi] + 0x00BC/4 + n)
154 #define CSI_CPD_BS(csi, n)      (ipu_csi_reg[csi] + 0x00DC/4 + n)
155 #define CSI_CPD_OFFSET1(csi)    (ipu_csi_reg[csi] + 0x00EC/4)
156 #define CSI_CPD_OFFSET2(csi)    (ipu_csi_reg[csi] + 0x00F0/4)
157
158 /*SMFC Registers */
159 #define SMFC_MAP        (ipu_smfc_reg)
160 #define SMFC_WMC        (ipu_smfc_reg + 0x0004/4)
161 #define SMFC_BS         (ipu_smfc_reg + 0x0008/4)
162
163 /* Image Converter Registers */
164 #define IC_CONF                 (ipu_ic_reg)
165 #define IC_PRP_ENC_RSC          (ipu_ic_reg + 0x0004/4)
166 #define IC_PRP_VF_RSC           (ipu_ic_reg + 0x0008/4)
167 #define IC_PP_RSC               (ipu_ic_reg + 0x000C/4)
168 #define IC_CMBP_1               (ipu_ic_reg + 0x0010/4)
169 #define IC_CMBP_2               (ipu_ic_reg + 0x0014/4)
170 #define IC_IDMAC_1              (ipu_ic_reg + 0x0018/4)
171 #define IC_IDMAC_2              (ipu_ic_reg + 0x001C/4)
172 #define IC_IDMAC_3              (ipu_ic_reg + 0x0020/4)
173 #define IC_IDMAC_4              (ipu_ic_reg + 0x0024/4)
174
175 #define IDMAC_CONF              (ipu_idmac_reg + 0x0000)
176 #define IDMAC_CHA_EN(ch)        (ipu_idmac_reg + 0x0004/4 + (ch/32))
177 #define IDMAC_SEP_ALPHA         (ipu_idmac_reg + 0x000C/4)
178 #define IDMAC_ALT_SEP_ALPHA     (ipu_idmac_reg + 0x0010/4)
179 #define IDMAC_CHA_PRI(ch)       (ipu_idmac_reg + 0x0014/4 + (ch/32))
180 #define IDMAC_WM_EN(ch)         (ipu_idmac_reg + 0x001C/4 + (ch/32))
181 #define IDMAC_CH_LOCK_EN_1      ({g_ipu_hw_rev >= 2 ? \
182                                   (ipu_idmac_reg + 0x0024/4) : 0; })
183 #define IDMAC_CH_LOCK_EN_2      ({g_ipu_hw_rev >= 2 ? \
184                                   (ipu_idmac_reg + 0x0028/4) : \
185                                   (ipu_idmac_reg + 0x0024/4); })
186 #define IDMAC_SUB_ADDR_0        ({g_ipu_hw_rev >= 2 ? \
187                                   (ipu_idmac_reg + 0x002C/4) : \
188                                   (ipu_idmac_reg + 0x0028/4); })
189 #define IDMAC_SUB_ADDR_1        ({g_ipu_hw_rev >= 2 ? \
190                                   (ipu_idmac_reg + 0x0030/4) : \
191                                   (ipu_idmac_reg + 0x002C/4); })
192 #define IDMAC_SUB_ADDR_2        ({g_ipu_hw_rev >= 2 ? \
193                                   (ipu_idmac_reg + 0x0034/4) : \
194                                   (ipu_idmac_reg + 0x0030/4); })
195 #define IDMAC_BAND_EN(ch)       ({g_ipu_hw_rev >= 2 ? \
196                                   (ipu_idmac_reg + 0x0040/4 + (ch/32)) : \
197                                   (ipu_idmac_reg + 0x0034/4 + (ch/32)); })
198 #define IDMAC_CHA_BUSY(ch)      ({g_ipu_hw_rev >= 2 ? \
199                                   (ipu_idmac_reg + 0x0100/4 + (ch/32)) : \
200                                   (ipu_idmac_reg + 0x0040/4 + (ch/32)); })
201
202 #define DI_GENERAL(di)          (ipu_di_reg[di])
203 #define DI_BS_CLKGEN0(di)       (ipu_di_reg[di] + 0x0004/4)
204 #define DI_BS_CLKGEN1(di)       (ipu_di_reg[di] + 0x0008/4)
205
206 #define DI_SW_GEN0(di, gen)     (ipu_di_reg[di] + 0x000C/4 + (gen - 1))
207 #define DI_SW_GEN1(di, gen)     (ipu_di_reg[di] + 0x0030/4 + (gen - 1))
208 #define DI_STP_REP(di, gen)     (ipu_di_reg[di] + 0x0148/4 + (gen - 1)/2)
209 #define DI_SYNC_AS_GEN(di)      (ipu_di_reg[di] + 0x0054/4)
210 #define DI_DW_GEN(di, gen)      (ipu_di_reg[di] + 0x0058/4 + gen)
211 #define DI_DW_SET(di, gen, set) (ipu_di_reg[di] + 0x0088/4 + gen + 0xC*set)
212 #define DI_SER_CONF(di)         (ipu_di_reg[di] + 0x015C/4)
213 #define DI_SSC(di)              (ipu_di_reg[di] + 0x0160/4)
214 #define DI_POL(di)              (ipu_di_reg[di] + 0x0164/4)
215 #define DI_AW0(di)              (ipu_di_reg[di] + 0x0168/4)
216 #define DI_AW1(di)              (ipu_di_reg[di] + 0x016C/4)
217 #define DI_SCR_CONF(di)         (ipu_di_reg[di] + 0x0170/4)
218 #define DI_STAT(di)             (ipu_di_reg[di] + 0x0174/4)
219
220 #define DMFC_RD_CHAN            (ipu_dmfc_reg)
221 #define DMFC_WR_CHAN            (ipu_dmfc_reg + 0x0004/4)
222 #define DMFC_WR_CHAN_DEF        (ipu_dmfc_reg + 0x0008/4)
223 #define DMFC_DP_CHAN            (ipu_dmfc_reg + 0x000C/4)
224 #define DMFC_DP_CHAN_DEF        (ipu_dmfc_reg + 0x0010/4)
225 #define DMFC_GENERAL1           (ipu_dmfc_reg + 0x0014/4)
226 #define DMFC_GENERAL2           (ipu_dmfc_reg + 0x0018/4)
227 #define DMFC_IC_CTRL            (ipu_dmfc_reg + 0x001C/4)
228 #define DMFC_STAT               (ipu_dmfc_reg + 0x0020/4)
229
230 #define DC_MAP_CONF_PTR(n)      (ipu_dc_reg + 0x0108/4 + n/2)
231 #define DC_MAP_CONF_VAL(n)      (ipu_dc_reg + 0x0144/4 + n/2)
232
233 #define _RL_CH_2_OFFSET(ch)     ((ch == 0) ? 8 : ( \
234                                  (ch == 1) ? 0x24 : ( \
235                                  (ch == 2) ? 0x40 : ( \
236                                  (ch == 5) ? 0x64 : ( \
237                                  (ch == 6) ? 0x80 : ( \
238                                  (ch == 8) ? 0x9C : ( \
239                                  (ch == 9) ? 0xBC : (-1))))))))
240 #define DC_RL_CH(ch, evt)       (ipu_dc_reg + _RL_CH_2_OFFSET(ch)/4 + evt/2)
241
242 #define DC_EVT_NF               0
243 #define DC_EVT_NL               1
244 #define DC_EVT_EOF              2
245 #define DC_EVT_NFIELD           3
246 #define DC_EVT_EOL              4
247 #define DC_EVT_EOFIELD          5
248 #define DC_EVT_NEW_ADDR         6
249 #define DC_EVT_NEW_CHAN         7
250 #define DC_EVT_NEW_DATA         8
251
252 #define DC_EVT_NEW_ADDR_W_0     0
253 #define DC_EVT_NEW_ADDR_W_1     1
254 #define DC_EVT_NEW_CHAN_W_0     2
255 #define DC_EVT_NEW_CHAN_W_1     3
256 #define DC_EVT_NEW_DATA_W_0     4
257 #define DC_EVT_NEW_DATA_W_1     5
258 #define DC_EVT_NEW_ADDR_R_0     6
259 #define DC_EVT_NEW_ADDR_R_1     7
260 #define DC_EVT_NEW_CHAN_R_0     8
261 #define DC_EVT_NEW_CHAN_R_1     9
262 #define DC_EVT_NEW_DATA_R_0     10
263 #define DC_EVT_NEW_DATA_R_1     11
264
265 #define dc_ch_offset(ch) \
266 ({ \
267         const u8 _offset[] = { \
268                 0, 0x1C, 0x38, 0x54, 0x58, 0x5C, 0x78, 0, 0x94, 0xB4}; \
269         _offset[ch]; \
270 })
271 #define DC_WR_CH_CONF(ch)       (ipu_dc_reg + dc_ch_offset(ch)/4)
272 #define DC_WR_CH_ADDR(ch)       (ipu_dc_reg + dc_ch_offset(ch)/4 + 4/4)
273
274 #define DC_WR_CH_CONF_1         (ipu_dc_reg + 0x001C/4)
275 #define DC_WR_CH_ADDR_1         (ipu_dc_reg + 0x0020/4)
276 #define DC_WR_CH_CONF_5         (ipu_dc_reg + 0x005C/4)
277 #define DC_WR_CH_ADDR_5         (ipu_dc_reg + 0x0060/4)
278 #define DC_GEN                  (ipu_dc_reg + 0x00D4/4)
279 #define DC_DISP_CONF1(disp)     (ipu_dc_reg + 0x00D8/4 + disp)
280 #define DC_DISP_CONF2(disp)     (ipu_dc_reg + 0x00E8/4 + disp)
281 #define DC_STAT                 (ipu_dc_reg + 0x01C8/4)
282 #define DC_UGDE_0(evt)          (ipu_dc_reg + 0x0174/4 + evt*4)
283 #define DC_UGDE_1(evt)          (ipu_dc_reg + 0x0178/4 + evt*4)
284 #define DC_UGDE_2(evt)          (ipu_dc_reg + 0x017C/4 + evt*4)
285 #define DC_UGDE_3(evt)          (ipu_dc_reg + 0x0180/4 + evt*4)
286
287 #define DP_SYNC 0
288 #define DP_ASYNC0 0x60
289 #define DP_ASYNC1 0xBC
290 #define DP_COM_CONF(flow)       (ipu_dp_reg + flow/4)
291 #define DP_GRAPH_WIND_CTRL(flow) (ipu_dp_reg + 0x0004/4 + flow/4)
292 #define DP_FG_POS(flow)         (ipu_dp_reg + 0x0008/4 + flow/4)
293 #define DP_GAMMA_C(flow, i)     (ipu_dp_reg + 0x0014/4 + flow/4 + i)
294 #define DP_GAMMA_S(flow, i)     (ipu_dp_reg + 0x0034/4 + flow/4 + i)
295 #define DP_CSC_A_0(flow)        (ipu_dp_reg + 0x0044/4 + flow/4)
296 #define DP_CSC_A_1(flow)        (ipu_dp_reg + 0x0048/4 + flow/4)
297 #define DP_CSC_A_2(flow)        (ipu_dp_reg + 0x004C/4 + flow/4)
298 #define DP_CSC_A_3(flow)        (ipu_dp_reg + 0x0050/4 + flow/4)
299 #define DP_CSC_0(flow)          (ipu_dp_reg + 0x0054/4 + flow/4)
300 #define DP_CSC_1(flow)          (ipu_dp_reg + 0x0058/4 + flow/4)
301
302 enum {
303         IPU_CONF_CSI0_EN = 0x00000001,
304         IPU_CONF_CSI1_EN = 0x00000002,
305         IPU_CONF_IC_EN = 0x00000004,
306         IPU_CONF_ROT_EN = 0x00000008,
307         IPU_CONF_ISP_EN = 0x00000010,
308         IPU_CONF_DP_EN = 0x00000020,
309         IPU_CONF_DI0_EN = 0x00000040,
310         IPU_CONF_DI1_EN = 0x00000080,
311         IPU_CONF_DMFC_EN = 0x00000400,
312         IPU_CONF_SMFC_EN = 0x00000100,
313         IPU_CONF_DC_EN = 0x00000200,
314         IPU_CONF_VDI_EN = 0x00001000,
315         IPU_CONF_IDMAC_DIS = 0x00400000,
316         IPU_CONF_IC_DMFC_SEL = 0x02000000,
317         IPU_CONF_IC_DMFC_SYNC = 0x04000000,
318         IPU_CONF_VDI_DMFC_SYNC = 0x08000000,
319         IPU_CONF_CSI0_DATA_SOURCE = 0x10000000,
320         IPU_CONF_CSI0_DATA_SOURCE_OFFSET = 28,
321         IPU_CONF_CSI1_DATA_SOURCE = 0x20000000,
322         IPU_CONF_IC_INPUT = 0x40000000,
323         IPU_CONF_CSI_SEL = 0x80000000,
324
325         DI0_COUNTER_RELEASE = 0x01000000,
326         DI1_COUNTER_RELEASE = 0x02000000,
327
328         FS_PRPVF_ROT_SRC_SEL_MASK = 0x00000F00,
329         FS_PRPVF_ROT_SRC_SEL_OFFSET = 8,
330         FS_PRPENC_ROT_SRC_SEL_MASK = 0x0000000F,
331         FS_PRPENC_ROT_SRC_SEL_OFFSET = 0,
332         FS_PP_ROT_SRC_SEL_MASK = 0x000F0000,
333         FS_PP_ROT_SRC_SEL_OFFSET = 16,
334         FS_PP_SRC_SEL_MASK = 0x0000F000,
335         FS_PP_SRC_SEL_OFFSET = 12,
336         FS_PRP_SRC_SEL_MASK = 0x0F000000,
337         FS_PRP_SRC_SEL_OFFSET = 24,
338         FS_VF_IN_VALID = 0x80000000,
339         FS_ENC_IN_VALID = 0x40000000,
340         FS_VDI_SRC_SEL_MASK = 0x30000000,
341         FS_VDI_SRC_SEL_OFFSET = 28,
342
343
344         FS_PRPENC_DEST_SEL_MASK = 0x0000000F,
345         FS_PRPENC_DEST_SEL_OFFSET = 0,
346         FS_PRPVF_DEST_SEL_MASK = 0x000000F0,
347         FS_PRPVF_DEST_SEL_OFFSET = 4,
348         FS_PRPVF_ROT_DEST_SEL_MASK = 0x00000F00,
349         FS_PRPVF_ROT_DEST_SEL_OFFSET = 8,
350         FS_PP_DEST_SEL_MASK = 0x0000F000,
351         FS_PP_DEST_SEL_OFFSET = 12,
352         FS_PP_ROT_DEST_SEL_MASK = 0x000F0000,
353         FS_PP_ROT_DEST_SEL_OFFSET = 16,
354         FS_PRPENC_ROT_DEST_SEL_MASK = 0x00F00000,
355         FS_PRPENC_ROT_DEST_SEL_OFFSET = 20,
356
357         FS_SMFC0_DEST_SEL_MASK = 0x0000000F,
358         FS_SMFC0_DEST_SEL_OFFSET = 0,
359         FS_SMFC1_DEST_SEL_MASK = 0x00000070,
360         FS_SMFC1_DEST_SEL_OFFSET = 4,
361         FS_SMFC2_DEST_SEL_MASK = 0x00000780,
362         FS_SMFC2_DEST_SEL_OFFSET = 7,
363         FS_SMFC3_DEST_SEL_MASK = 0x00003800,
364         FS_SMFC3_DEST_SEL_OFFSET = 11,
365
366         FS_DC1_SRC_SEL_MASK = 0x00F00000,
367         FS_DC1_SRC_SEL_OFFSET = 20,
368         FS_DC2_SRC_SEL_MASK = 0x000F0000,
369         FS_DC2_SRC_SEL_OFFSET = 16,
370         FS_DP_SYNC0_SRC_SEL_MASK = 0x0000000F,
371         FS_DP_SYNC0_SRC_SEL_OFFSET = 0,
372         FS_DP_SYNC1_SRC_SEL_MASK = 0x000000F0,
373         FS_DP_SYNC1_SRC_SEL_OFFSET = 4,
374         FS_DP_ASYNC0_SRC_SEL_MASK = 0x00000F00,
375         FS_DP_ASYNC0_SRC_SEL_OFFSET = 8,
376         FS_DP_ASYNC1_SRC_SEL_MASK = 0x0000F000,
377         FS_DP_ASYNC1_SRC_SEL_OFFSET = 12,
378
379         FS_AUTO_REF_PER_MASK = 0,
380         FS_AUTO_REF_PER_OFFSET = 16,
381
382         TSTAT_VF_MASK = 0x0000000C,
383         TSTAT_VF_OFFSET = 2,
384         TSTAT_VF_ROT_MASK = 0x00000300,
385         TSTAT_VF_ROT_OFFSET = 8,
386         TSTAT_ENC_MASK = 0x00000003,
387         TSTAT_ENC_OFFSET = 0,
388         TSTAT_ENC_ROT_MASK = 0x000000C0,
389         TSTAT_ENC_ROT_OFFSET = 6,
390         TSTAT_PP_MASK = 0x00000030,
391         TSTAT_PP_OFFSET = 4,
392         TSTAT_PP_ROT_MASK = 0x00000C00,
393         TSTAT_PP_ROT_OFFSET = 10,
394
395         TASK_STAT_IDLE = 0,
396         TASK_STAT_ACTIVE = 1,
397         TASK_STAT_WAIT4READY = 2,
398
399         /* Image Converter Register bits */
400         IC_CONF_PRPENC_EN = 0x00000001,
401         IC_CONF_PRPENC_CSC1 = 0x00000002,
402         IC_CONF_PRPENC_ROT_EN = 0x00000004,
403         IC_CONF_PRPVF_EN = 0x00000100,
404         IC_CONF_PRPVF_CSC1 = 0x00000200,
405         IC_CONF_PRPVF_CSC2 = 0x00000400,
406         IC_CONF_PRPVF_CMB = 0x00000800,
407         IC_CONF_PRPVF_ROT_EN = 0x00001000,
408         IC_CONF_PP_EN = 0x00010000,
409         IC_CONF_PP_CSC1 = 0x00020000,
410         IC_CONF_PP_CSC2 = 0x00040000,
411         IC_CONF_PP_CMB = 0x00080000,
412         IC_CONF_PP_ROT_EN = 0x00100000,
413         IC_CONF_IC_GLB_LOC_A = 0x10000000,
414         IC_CONF_KEY_COLOR_EN = 0x20000000,
415         IC_CONF_RWS_EN = 0x40000000,
416         IC_CONF_CSI_MEM_WR_EN = 0x80000000,
417
418         IC_IDMAC_1_CB0_BURST_16 = 0x00000001,
419         IC_IDMAC_1_CB1_BURST_16 = 0x00000002,
420         IC_IDMAC_1_CB2_BURST_16 = 0x00000004,
421         IC_IDMAC_1_CB3_BURST_16 = 0x00000008,
422         IC_IDMAC_1_CB4_BURST_16 = 0x00000010,
423         IC_IDMAC_1_CB5_BURST_16 = 0x00000020,
424         IC_IDMAC_1_CB6_BURST_16 = 0x00000040,
425         IC_IDMAC_1_CB7_BURST_16 = 0x00000080,
426         IC_IDMAC_1_PRPENC_ROT_MASK = 0x00003800,
427         IC_IDMAC_1_PRPENC_ROT_OFFSET = 11,
428         IC_IDMAC_1_PRPVF_ROT_MASK = 0x0001C000,
429         IC_IDMAC_1_PRPVF_ROT_OFFSET = 14,
430         IC_IDMAC_1_PP_ROT_MASK = 0x000E0000,
431         IC_IDMAC_1_PP_ROT_OFFSET = 17,
432         IC_IDMAC_1_PP_FLIP_RS = 0x00400000,
433         IC_IDMAC_1_PRPVF_FLIP_RS = 0x00200000,
434         IC_IDMAC_1_PRPENC_FLIP_RS = 0x00100000,
435
436         IC_IDMAC_2_PRPENC_HEIGHT_MASK = 0x000003FF,
437         IC_IDMAC_2_PRPENC_HEIGHT_OFFSET = 0,
438         IC_IDMAC_2_PRPVF_HEIGHT_MASK = 0x000FFC00,
439         IC_IDMAC_2_PRPVF_HEIGHT_OFFSET = 10,
440         IC_IDMAC_2_PP_HEIGHT_MASK = 0x3FF00000,
441         IC_IDMAC_2_PP_HEIGHT_OFFSET = 20,
442
443         IC_IDMAC_3_PRPENC_WIDTH_MASK = 0x000003FF,
444         IC_IDMAC_3_PRPENC_WIDTH_OFFSET = 0,
445         IC_IDMAC_3_PRPVF_WIDTH_MASK = 0x000FFC00,
446         IC_IDMAC_3_PRPVF_WIDTH_OFFSET = 10,
447         IC_IDMAC_3_PP_WIDTH_MASK = 0x3FF00000,
448         IC_IDMAC_3_PP_WIDTH_OFFSET = 20,
449
450         CSI_SENS_CONF_DATA_FMT_SHIFT = 8,
451         CSI_SENS_CONF_DATA_FMT_MASK = 0x00000700,
452         CSI_SENS_CONF_DATA_FMT_RGB_YUV444 = 0L,
453         CSI_SENS_CONF_DATA_FMT_YUV422_YUYV = 1L,
454         CSI_SENS_CONF_DATA_FMT_YUV422_UYVY = 2L,
455         CSI_SENS_CONF_DATA_FMT_BAYER = 3L,
456         CSI_SENS_CONF_DATA_FMT_RGB565 = 4L,
457         CSI_SENS_CONF_DATA_FMT_RGB555 = 5L,
458         CSI_SENS_CONF_DATA_FMT_RGB444 = 6L,
459         CSI_SENS_CONF_DATA_FMT_JPEG = 7L,
460
461         CSI_SENS_CONF_VSYNC_POL_SHIFT = 0,
462         CSI_SENS_CONF_HSYNC_POL_SHIFT = 1,
463         CSI_SENS_CONF_DATA_POL_SHIFT = 2,
464         CSI_SENS_CONF_PIX_CLK_POL_SHIFT = 3,
465         CSI_SENS_CONF_SENS_PRTCL_SHIFT = 4,
466         CSI_SENS_CONF_PACK_TIGHT_SHIFT = 7,
467         CSI_SENS_CONF_DATA_WIDTH_SHIFT = 11,
468         CSI_SENS_CONF_EXT_VSYNC_SHIFT = 15,
469         CSI_SENS_CONF_DIVRATIO_SHIFT = 16,
470
471         CSI_SENS_CONF_DIVRATIO_MASK = 0x00FF0000L,
472         CSI_SENS_CONF_DATA_DEST_SHIFT = 24,
473         CSI_SENS_CONF_DATA_DEST_MASK = 0x07000000L,
474         CSI_SENS_CONF_JPEG8_EN_SHIFT = 27,
475         CSI_SENS_CONF_JPEG_EN_SHIFT = 28,
476         CSI_SENS_CONF_FORCE_EOF_SHIFT = 29,
477         CSI_SENS_CONF_DATA_EN_POL_SHIFT = 31,
478
479         CSI_DATA_DEST_ISP = 1L,
480         CSI_DATA_DEST_IC = 2L,
481         CSI_DATA_DEST_IDMAC = 4L,
482
483         CSI_CCIR_ERR_DET_EN = 0x01000000L,
484         CSI_HORI_DOWNSIZE_EN = 0x80000000L,
485         CSI_VERT_DOWNSIZE_EN = 0x40000000L,
486         CSI_TEST_GEN_MODE_EN = 0x01000000L,
487
488         CSI_HSC_MASK = 0x1FFF0000,
489         CSI_HSC_SHIFT = 16,
490         CSI_VSC_MASK = 0x00000FFF,
491         CSI_VSC_SHIFT = 0,
492
493         CSI_TEST_GEN_R_MASK = 0x000000FFL,
494         CSI_TEST_GEN_R_SHIFT = 0,
495         CSI_TEST_GEN_G_MASK = 0x0000FF00L,
496         CSI_TEST_GEN_G_SHIFT = 8,
497         CSI_TEST_GEN_B_MASK = 0x00FF0000L,
498         CSI_TEST_GEN_B_SHIFT = 16,
499
500         CSI_MIPI_DI0_MASK = 0x000000FFL,
501         CSI_MIPI_DI0_SHIFT = 0,
502         CSI_MIPI_DI1_MASK = 0x0000FF00L,
503         CSI_MIPI_DI1_SHIFT = 8,
504         CSI_MIPI_DI2_MASK = 0x00FF0000L,
505         CSI_MIPI_DI2_SHIFT = 16,
506         CSI_MIPI_DI3_MASK = 0xFF000000L,
507         CSI_MIPI_DI3_SHIFT = 24,
508
509         CSI_MAX_RATIO_SKIP_ISP_MASK = 0x00070000L,
510         CSI_MAX_RATIO_SKIP_ISP_SHIFT = 16,
511         CSI_SKIP_ISP_MASK = 0x00F80000L,
512         CSI_SKIP_ISP_SHIFT = 19,
513         CSI_MAX_RATIO_SKIP_SMFC_MASK = 0x00000007L,
514         CSI_MAX_RATIO_SKIP_SMFC_SHIFT = 0,
515         CSI_SKIP_SMFC_MASK = 0x000000F8L,
516         CSI_SKIP_SMFC_SHIFT = 3,
517         CSI_ID_2_SKIP_MASK = 0x00000300L,
518         CSI_ID_2_SKIP_SHIFT = 8,
519
520         CSI_COLOR_FIRST_ROW_MASK = 0x00000002L,
521         CSI_COLOR_FIRST_COMP_MASK = 0x00000001L,
522
523         SMFC_MAP_CH0_MASK = 0x00000007L,
524         SMFC_MAP_CH0_SHIFT = 0,
525         SMFC_MAP_CH1_MASK = 0x00000038L,
526         SMFC_MAP_CH1_SHIFT = 3,
527         SMFC_MAP_CH2_MASK = 0x000001C0L,
528         SMFC_MAP_CH2_SHIFT = 6,
529         SMFC_MAP_CH3_MASK = 0x00000E00L,
530         SMFC_MAP_CH3_SHIFT = 9,
531
532         SMFC_WM0_SET_MASK = 0x00000007L,
533         SMFC_WM0_SET_SHIFT = 0,
534         SMFC_WM1_SET_MASK = 0x000001C0L,
535         SMFC_WM1_SET_SHIFT = 6,
536         SMFC_WM2_SET_MASK = 0x00070000L,
537         SMFC_WM2_SET_SHIFT = 16,
538         SMFC_WM3_SET_MASK = 0x01C00000L,
539         SMFC_WM3_SET_SHIFT = 22,
540
541         SMFC_WM0_CLR_MASK = 0x00000038L,
542         SMFC_WM0_CLR_SHIFT = 3,
543         SMFC_WM1_CLR_MASK = 0x00000E00L,
544         SMFC_WM1_CLR_SHIFT = 9,
545         SMFC_WM2_CLR_MASK = 0x00380000L,
546         SMFC_WM2_CLR_SHIFT = 19,
547         SMFC_WM3_CLR_MASK = 0x0E000000L,
548         SMFC_WM3_CLR_SHIFT = 25,
549
550         SMFC_BS0_MASK = 0x0000000FL,
551         SMFC_BS0_SHIFT = 0,
552         SMFC_BS1_MASK = 0x000000F0L,
553         SMFC_BS1_SHIFT = 4,
554         SMFC_BS2_MASK = 0x00000F00L,
555         SMFC_BS2_SHIFT = 8,
556         SMFC_BS3_MASK = 0x0000F000L,
557         SMFC_BS3_SHIFT = 12,
558
559         PF_CONF_TYPE_MASK = 0x00000007,
560         PF_CONF_TYPE_SHIFT = 0,
561         PF_CONF_PAUSE_EN = 0x00000010,
562         PF_CONF_RESET = 0x00008000,
563         PF_CONF_PAUSE_ROW_MASK = 0x00FF0000,
564         PF_CONF_PAUSE_ROW_SHIFT = 16,
565
566         DI_DW_GEN_ACCESS_SIZE_OFFSET = 24,
567         DI_DW_GEN_COMPONENT_SIZE_OFFSET = 16,
568
569         DI_GEN_DI_CLK_EXT = 0x100000,
570         DI_GEN_POLARITY_1 = 0x00000001,
571         DI_GEN_POLARITY_2 = 0x00000002,
572         DI_GEN_POLARITY_3 = 0x00000004,
573         DI_GEN_POLARITY_4 = 0x00000008,
574         DI_GEN_POLARITY_5 = 0x00000010,
575         DI_GEN_POLARITY_6 = 0x00000020,
576         DI_GEN_POLARITY_7 = 0x00000040,
577         DI_GEN_POLARITY_8 = 0x00000080,
578
579         DI_POL_DRDY_DATA_POLARITY = 0x00000080,
580         DI_POL_DRDY_POLARITY_15 = 0x00000010,
581
582         DI_VSYNC_SEL_OFFSET = 13,
583
584         DC_WR_CH_CONF_FIELD_MODE = 0x00000200,
585         DC_WR_CH_CONF_PROG_TYPE_OFFSET = 5,
586         DC_WR_CH_CONF_PROG_TYPE_MASK = 0x000000E0,
587         DC_WR_CH_CONF_PROG_DI_ID = 0x00000004,
588         DC_WR_CH_CONF_PROG_DISP_ID_OFFSET = 3,
589         DC_WR_CH_CONF_PROG_DISP_ID_MASK = 0x00000018,
590
591         DC_UGDE_0_ODD_EN = 0x02000000,
592         DC_UGDE_0_ID_CODED_MASK = 0x00000007,
593         DC_UGDE_0_ID_CODED_OFFSET = 0,
594         DC_UGDE_0_EV_PRIORITY_MASK = 0x00000078,
595         DC_UGDE_0_EV_PRIORITY_OFFSET = 3,
596
597         DP_COM_CONF_FG_EN = 0x00000001,
598         DP_COM_CONF_GWSEL = 0x00000002,
599         DP_COM_CONF_GWAM = 0x00000004,
600         DP_COM_CONF_GWCKE = 0x00000008,
601         DP_COM_CONF_CSC_DEF_MASK = 0x00000300,
602         DP_COM_CONF_CSC_DEF_OFFSET = 8,
603         DP_COM_CONF_CSC_DEF_FG = 0x00000300,
604         DP_COM_CONF_CSC_DEF_BG = 0x00000200,
605         DP_COM_CONF_CSC_DEF_BOTH = 0x00000100,
606         DP_COM_CONF_GAMMA_EN = 0x00001000,
607         DP_COM_CONF_GAMMA_YUV_EN = 0x00002000,
608
609         DI_SER_CONF_LLA_SER_ACCESS = 0x00000020,
610         DI_SER_CONF_SERIAL_CLK_POL = 0x00000010,
611         DI_SER_CONF_SERIAL_DATA_POL = 0x00000008,
612         DI_SER_CONF_SERIAL_RS_POL = 0x00000004,
613         DI_SER_CONF_SERIAL_CS_POL = 0x00000002,
614         DI_SER_CONF_WAIT4SERIAL = 0x00000001,
615
616         VDI_C_CH_420 = 0x00000000,
617         VDI_C_CH_422 = 0x00000002,
618         VDI_C_MOT_SEL_FULL = 0x00000008,
619         VDI_C_MOT_SEL_LOW = 0x00000004,
620         VDI_C_MOT_SEL_MED = 0x00000000,
621         VDI_C_BURST_SIZE1_4 = 0x00000030,
622         VDI_C_BURST_SIZE2_4 = 0x00000300,
623         VDI_C_BURST_SIZE3_4 = 0x00003000,
624         VDI_C_VWM1_SET_1 = 0x00000000,
625         VDI_C_VWM1_CLR_2 = 0x00080000,
626         VDI_C_VWM3_SET_1 = 0x00000000,
627         VDI_C_VWM3_CLR_2 = 0x02000000,
628         VDI_C_TOP_FIELD_MAN_1 = 0x40000000,
629         VDI_C_TOP_FIELD_AUTO_1 = 0x80000000,
630
631         DMFC_FIFO_SIZE_5F = 0x00003800,
632 };
633
634 enum di_pins {
635         DI_PIN11 = 0,
636         DI_PIN12 = 1,
637         DI_PIN13 = 2,
638         DI_PIN14 = 3,
639         DI_PIN15 = 4,
640         DI_PIN16 = 5,
641         DI_PIN17 = 6,
642         DI_PIN_CS = 7,
643
644         DI_PIN_SER_CLK = 0,
645         DI_PIN_SER_RS = 1,
646 };
647
648 enum di_sync_wave {
649         DI_SYNC_NONE = -1,
650         DI_SYNC_CLK = 0,
651         DI_SYNC_INT_HSYNC = 1,
652         DI_SYNC_HSYNC = 2,
653         DI_SYNC_VSYNC = 3,
654         DI_SYNC_DE = 5,
655 };
656
657 /* DC template opcodes */
658 #define WROD(lf)                (0x18 | (lf << 1))
659
660 #endif