blob: f35a757d4731eacc6c6e101dbfb395cbd0ab73a0 [file] [log] [blame]
Pavel Machekd480ace2009-09-22 16:47:03 -07001/* drivers/video/msm_fb/mdp_hw.h
2 *
3 * Copyright (C) 2007 QUALCOMM Incorporated
4 * Copyright (C) 2007 Google Incorporated
5 *
6 * This software is licensed under the terms of the GNU General Public
7 * License version 2, as published by the Free Software Foundation, and
8 * may be copied, distributed, and modified under those terms.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 */
15#ifndef _MDP_HW_H_
16#define _MDP_HW_H_
17
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070018#include <linux/platform_device.h>
19#include <linux/wait.h>
Pavel Machekd480ace2009-09-22 16:47:03 -070020#include <mach/msm_iomap.h>
21#include <mach/msm_fb.h>
22
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070023typedef void (*mdp_dma_start_func_t)(void *private_data, uint32_t addr,
24 uint32_t stride, uint32_t width,
25 uint32_t height, uint32_t x, uint32_t y);
26
27struct mdp_out_interface {
28 uint32_t registered:1;
29 void *priv;
30
31 /* If the interface client wants to get DMA_DONE events */
32 uint32_t dma_mask;
33 mdp_dma_start_func_t dma_start;
34
35 struct msmfb_callback *dma_cb;
36 wait_queue_head_t dma_waitqueue;
37
38 /* If the interface client wants to be notified of non-DMA irqs,
39 * e.g. LCDC/TV-out frame start */
40 uint32_t irq_mask;
41 struct msmfb_callback *irq_cb;
42};
43
Pavel Machekd480ace2009-09-22 16:47:03 -070044struct mdp_info {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070045 spinlock_t lock;
Pavel Machekd480ace2009-09-22 16:47:03 -070046 struct mdp_device mdp_dev;
47 char * __iomem base;
48 int irq;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070049 struct clk *clk;
50 struct clk *ebi1_clk;
51 struct mdp_out_interface out_if[MSM_MDP_NUM_INTERFACES];
52 int format;
53 int pack_pattern;
54 bool dma_config_dirty;
Pavel Machekd480ace2009-09-22 16:47:03 -070055};
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070056
57extern int mdp_out_if_register(struct mdp_device *mdp_dev, int interface,
58 void *private_data, uint32_t dma_mask,
59 mdp_dma_start_func_t dma_start);
60
61extern int mdp_out_if_req_irq(struct mdp_device *mdp_dev, int interface,
62 uint32_t mask, struct msmfb_callback *cb);
63
Pavel Machekd480ace2009-09-22 16:47:03 -070064struct mdp_blit_req;
65struct mdp_device;
66int mdp_ppp_blit(const struct mdp_info *mdp, struct mdp_blit_req *req,
67 struct file *src_file, unsigned long src_start,
68 unsigned long src_len, struct file *dst_file,
69 unsigned long dst_start, unsigned long dst_len);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070070
71void mdp_ppp_dump_debug(const struct mdp_info *mdp);
72
Pavel Machekd480ace2009-09-22 16:47:03 -070073#define mdp_writel(mdp, value, offset) writel(value, mdp->base + offset)
74#define mdp_readl(mdp, offset) readl(mdp->base + offset)
75
76#define MDP_SYNC_CONFIG_0 (0x00000)
77#define MDP_SYNC_CONFIG_1 (0x00004)
78#define MDP_SYNC_CONFIG_2 (0x00008)
79#define MDP_SYNC_STATUS_0 (0x0000c)
80#define MDP_SYNC_STATUS_1 (0x00010)
81#define MDP_SYNC_STATUS_2 (0x00014)
82#define MDP_SYNC_THRESH_0 (0x00018)
83#define MDP_SYNC_THRESH_1 (0x0001c)
84#define MDP_INTR_ENABLE (0x00020)
85#define MDP_INTR_STATUS (0x00024)
86#define MDP_INTR_CLEAR (0x00028)
87#define MDP_DISPLAY0_START (0x00030)
88#define MDP_DISPLAY1_START (0x00034)
89#define MDP_DISPLAY_STATUS (0x00038)
90#define MDP_EBI2_LCD0 (0x0003c)
91#define MDP_EBI2_LCD1 (0x00040)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070092#define MDP_EBI2_PORTMAP_MODE (0x0005c)
93
94#ifndef CONFIG_MSM_MDP31
Pavel Machekd480ace2009-09-22 16:47:03 -070095#define MDP_DISPLAY0_ADDR (0x00054)
96#define MDP_DISPLAY1_ADDR (0x00058)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070097#define MDP_PPP_CMD_MODE (0x00060)
98#else
99#define MDP_DISPLAY0_ADDR (0x10000)
100#define MDP_DISPLAY1_ADDR (0x10004)
101#define MDP_PPP_CMD_MODE (0x10060)
102#endif
103
Pavel Machekd480ace2009-09-22 16:47:03 -0700104#define MDP_TV_OUT_STATUS (0x00064)
105#define MDP_HW_VERSION (0x00070)
106#define MDP_SW_RESET (0x00074)
107#define MDP_AXI_ERROR_MASTER_STOP (0x00078)
108#define MDP_SEL_CLK_OR_HCLK_TEST_BUS (0x0007c)
109#define MDP_PRIMARY_VSYNC_OUT_CTRL (0x00080)
110#define MDP_SECONDARY_VSYNC_OUT_CTRL (0x00084)
111#define MDP_EXTERNAL_VSYNC_OUT_CTRL (0x00088)
112#define MDP_VSYNC_CTRL (0x0008c)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700113#define MDP_MDDI_PARAM_WR_SEL (0x00090)
114#define MDP_MDDI_PARAM (0x00094)
Pavel Machekd480ace2009-09-22 16:47:03 -0700115#define MDP_CGC_EN (0x00100)
116#define MDP_CMD_STATUS (0x10008)
117#define MDP_PROFILE_EN (0x10010)
118#define MDP_PROFILE_COUNT (0x10014)
119#define MDP_DMA_START (0x10044)
120#define MDP_FULL_BYPASS_WORD0 (0x10100)
121#define MDP_FULL_BYPASS_WORD1 (0x10104)
122#define MDP_COMMAND_CONFIG (0x10104)
123#define MDP_FULL_BYPASS_WORD2 (0x10108)
124#define MDP_FULL_BYPASS_WORD3 (0x1010c)
125#define MDP_FULL_BYPASS_WORD4 (0x10110)
126#define MDP_FULL_BYPASS_WORD6 (0x10118)
127#define MDP_FULL_BYPASS_WORD7 (0x1011c)
128#define MDP_FULL_BYPASS_WORD8 (0x10120)
129#define MDP_FULL_BYPASS_WORD9 (0x10124)
130#define MDP_PPP_SOURCE_CONFIG (0x10124)
131#define MDP_FULL_BYPASS_WORD10 (0x10128)
132#define MDP_FULL_BYPASS_WORD11 (0x1012c)
133#define MDP_FULL_BYPASS_WORD12 (0x10130)
134#define MDP_FULL_BYPASS_WORD13 (0x10134)
135#define MDP_FULL_BYPASS_WORD14 (0x10138)
136#define MDP_PPP_OPERATION_CONFIG (0x10138)
137#define MDP_FULL_BYPASS_WORD15 (0x1013c)
138#define MDP_FULL_BYPASS_WORD16 (0x10140)
139#define MDP_FULL_BYPASS_WORD17 (0x10144)
140#define MDP_FULL_BYPASS_WORD18 (0x10148)
141#define MDP_FULL_BYPASS_WORD19 (0x1014c)
142#define MDP_FULL_BYPASS_WORD20 (0x10150)
143#define MDP_PPP_DESTINATION_CONFIG (0x10150)
144#define MDP_FULL_BYPASS_WORD21 (0x10154)
145#define MDP_FULL_BYPASS_WORD22 (0x10158)
146#define MDP_FULL_BYPASS_WORD23 (0x1015c)
147#define MDP_FULL_BYPASS_WORD24 (0x10160)
148#define MDP_FULL_BYPASS_WORD25 (0x10164)
149#define MDP_FULL_BYPASS_WORD26 (0x10168)
150#define MDP_FULL_BYPASS_WORD27 (0x1016c)
151#define MDP_FULL_BYPASS_WORD29 (0x10174)
152#define MDP_FULL_BYPASS_WORD30 (0x10178)
153#define MDP_FULL_BYPASS_WORD31 (0x1017c)
154#define MDP_FULL_BYPASS_WORD32 (0x10180)
155#define MDP_DMA_CONFIG (0x10180)
156#define MDP_FULL_BYPASS_WORD33 (0x10184)
157#define MDP_FULL_BYPASS_WORD34 (0x10188)
158#define MDP_FULL_BYPASS_WORD35 (0x1018c)
159#define MDP_FULL_BYPASS_WORD37 (0x10194)
160#define MDP_FULL_BYPASS_WORD39 (0x1019c)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700161#define MDP_PPP_OUT_XY (0x1019c)
Pavel Machekd480ace2009-09-22 16:47:03 -0700162#define MDP_FULL_BYPASS_WORD40 (0x101a0)
163#define MDP_FULL_BYPASS_WORD41 (0x101a4)
164#define MDP_FULL_BYPASS_WORD43 (0x101ac)
165#define MDP_FULL_BYPASS_WORD46 (0x101b8)
166#define MDP_FULL_BYPASS_WORD47 (0x101bc)
167#define MDP_FULL_BYPASS_WORD48 (0x101c0)
168#define MDP_FULL_BYPASS_WORD49 (0x101c4)
169#define MDP_FULL_BYPASS_WORD50 (0x101c8)
170#define MDP_FULL_BYPASS_WORD51 (0x101cc)
171#define MDP_FULL_BYPASS_WORD52 (0x101d0)
172#define MDP_FULL_BYPASS_WORD53 (0x101d4)
173#define MDP_FULL_BYPASS_WORD54 (0x101d8)
174#define MDP_FULL_BYPASS_WORD55 (0x101dc)
175#define MDP_FULL_BYPASS_WORD56 (0x101e0)
176#define MDP_FULL_BYPASS_WORD57 (0x101e4)
177#define MDP_FULL_BYPASS_WORD58 (0x101e8)
178#define MDP_FULL_BYPASS_WORD59 (0x101ec)
179#define MDP_FULL_BYPASS_WORD60 (0x101f0)
180#define MDP_VSYNC_THRESHOLD (0x101f0)
181#define MDP_FULL_BYPASS_WORD61 (0x101f4)
182#define MDP_FULL_BYPASS_WORD62 (0x101f8)
183#define MDP_FULL_BYPASS_WORD63 (0x101fc)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700184
185#ifdef CONFIG_MSM_MDP31
186#define MDP_PPP_SRC_XY (0x10200)
187#define MDP_PPP_BG_XY (0x10204)
188#define MDP_PPP_SRC_IMAGE_SIZE (0x10208)
189#define MDP_PPP_BG_IMAGE_SIZE (0x1020c)
190#define MDP_PPP_SCALE_CONFIG (0x10230)
191#define MDP_PPP_CSC_CONFIG (0x10240)
192#define MDP_PPP_BLEND_BG_ALPHA_SEL (0x70010)
193#endif
194
Pavel Machekd480ace2009-09-22 16:47:03 -0700195#define MDP_TFETCH_TEST_MODE (0x20004)
196#define MDP_TFETCH_STATUS (0x20008)
197#define MDP_TFETCH_TILE_COUNT (0x20010)
198#define MDP_TFETCH_FETCH_COUNT (0x20014)
199#define MDP_TFETCH_CONSTANT_COLOR (0x20040)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700200#define MDP_BGTFETCH_TEST_MODE (0x28004)
201#define MDP_BGTFETCH_STATUS (0x28008)
202#define MDP_BGTFETCH_TILE_COUNT (0x28010)
203#define MDP_BGTFETCH_FETCH_COUNT (0x28014)
204#define MDP_BGTFETCH_CONSTANT_COLOR (0x28040)
Pavel Machekd480ace2009-09-22 16:47:03 -0700205#define MDP_CSC_BYPASS (0x40004)
206#define MDP_SCALE_COEFF_LSB (0x5fffc)
207#define MDP_TV_OUT_CTL (0xc0000)
208#define MDP_TV_OUT_FIR_COEFF (0xc0004)
209#define MDP_TV_OUT_BUF_ADDR (0xc0008)
210#define MDP_TV_OUT_CC_DATA (0xc000c)
211#define MDP_TV_OUT_SOBEL (0xc0010)
212#define MDP_TV_OUT_Y_CLAMP (0xc0018)
213#define MDP_TV_OUT_CB_CLAMP (0xc001c)
214#define MDP_TV_OUT_CR_CLAMP (0xc0020)
215#define MDP_TEST_MODE_CLK (0xd0000)
216#define MDP_TEST_MISR_RESET_CLK (0xd0004)
217#define MDP_TEST_EXPORT_MISR_CLK (0xd0008)
218#define MDP_TEST_MISR_CURR_VAL_CLK (0xd000c)
219#define MDP_TEST_MODE_HCLK (0xd0100)
220#define MDP_TEST_MISR_RESET_HCLK (0xd0104)
221#define MDP_TEST_EXPORT_MISR_HCLK (0xd0108)
222#define MDP_TEST_MISR_CURR_VAL_HCLK (0xd010c)
223#define MDP_TEST_MODE_DCLK (0xd0200)
224#define MDP_TEST_MISR_RESET_DCLK (0xd0204)
225#define MDP_TEST_EXPORT_MISR_DCLK (0xd0208)
226#define MDP_TEST_MISR_CURR_VAL_DCLK (0xd020c)
227#define MDP_TEST_CAPTURED_DCLK (0xd0210)
228#define MDP_TEST_MISR_CAPT_VAL_DCLK (0xd0214)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700229
230#define MDP_DMA_P_START (0x00044)
231#define MDP_DMA_P_CONFIG (0x90000)
232#define MDP_DMA_P_SIZE (0x90004)
233#define MDP_DMA_P_IBUF_ADDR (0x90008)
234#define MDP_DMA_P_IBUF_Y_STRIDE (0x9000c)
235#define MDP_DMA_P_OUT_XY (0x90010)
236#define MDP_DMA_P_COLOR_CORRECT_CONFIG (0x90070)
237
238#define MDP_LCDC_EN (0xe0000)
Pavel Machekd480ace2009-09-22 16:47:03 -0700239#define MDP_LCDC_HSYNC_CTL (0xe0004)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700240#define MDP_LCDC_VSYNC_PERIOD (0xe0008)
241#define MDP_LCDC_VSYNC_PULSE_WIDTH (0xe000c)
242#define MDP_LCDC_DISPLAY_HCTL (0xe0010)
243#define MDP_LCDC_DISPLAY_V_START (0xe0014)
244#define MDP_LCDC_DISPLAY_V_END (0xe0018)
245#define MDP_LCDC_ACTIVE_HCTL (0xe001c)
246#define MDP_LCDC_ACTIVE_V_START (0xe0020)
247#define MDP_LCDC_ACTIVE_V_END (0xe0024)
248#define MDP_LCDC_BORDER_CLR (0xe0028)
249#define MDP_LCDC_UNDERFLOW_CTL (0xe002c)
250#define MDP_LCDC_HSYNC_SKEW (0xe0030)
251#define MDP_LCDC_TEST_CTL (0xe0034)
252#define MDP_LCDC_CTL_POLARITY (0xe0038)
Pavel Machekd480ace2009-09-22 16:47:03 -0700253
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700254#define MDP_PPP_SCALE_STATUS (0x50000)
255#define MDP_PPP_BLEND_STATUS (0x70000)
Pavel Machekd480ace2009-09-22 16:47:03 -0700256
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700257/* MDP_SW_RESET */
258#define MDP_PPP_SW_RESET (1<<4)
Pavel Machekd480ace2009-09-22 16:47:03 -0700259
260/* MDP_INTR_ENABLE */
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700261#define DL0_ROI_DONE (1<<0)
262#define TV_OUT_DMA3_DONE (1<<6)
263#define TV_ENC_UNDERRUN (1<<7)
Pavel Machekd480ace2009-09-22 16:47:03 -0700264
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700265#ifdef CONFIG_MSM_MDP22
266#define MDP_DMA_P_DONE (1 << 2)
267#else /* CONFIG_MSM_MDP31 */
268#define MDP_DMA_P_DONE (1 << 14)
269#define MDP_LCDC_UNDERFLOW (1 << 16)
270#define MDP_LCDC_FRAME_START (1 << 15)
271#endif
Pavel Machekd480ace2009-09-22 16:47:03 -0700272
273#define MDP_TOP_LUMA 16
274#define MDP_TOP_CHROMA 0
275#define MDP_BOTTOM_LUMA 19
276#define MDP_BOTTOM_CHROMA 3
277#define MDP_LEFT_LUMA 22
278#define MDP_LEFT_CHROMA 6
279#define MDP_RIGHT_LUMA 25
280#define MDP_RIGHT_CHROMA 9
281
282#define CLR_G 0x0
283#define CLR_B 0x1
284#define CLR_R 0x2
285#define CLR_ALPHA 0x3
286
287#define CLR_Y CLR_G
288#define CLR_CB CLR_B
289#define CLR_CR CLR_R
290
291/* from lsb to msb */
292#define MDP_GET_PACK_PATTERN(a, x, y, z, bit) \
293 (((a)<<(bit*3))|((x)<<(bit*2))|((y)<<bit)|(z))
294
295/* MDP_SYNC_CONFIG_0/1/2 */
296#define MDP_SYNCFG_HGT_LOC 22
297#define MDP_SYNCFG_VSYNC_EXT_EN (1<<21)
298#define MDP_SYNCFG_VSYNC_INT_EN (1<<20)
299
300/* MDP_SYNC_THRESH_0 */
301#define MDP_PRIM_BELOW_LOC 0
302#define MDP_PRIM_ABOVE_LOC 8
303
304/* MDP_{PRIMARY,SECONDARY,EXTERNAL}_VSYNC_OUT_CRL */
305#define VSYNC_PULSE_EN (1<<31)
306#define VSYNC_PULSE_INV (1<<30)
307
308/* MDP_VSYNC_CTRL */
309#define DISP0_VSYNC_MAP_VSYNC0 0
310#define DISP0_VSYNC_MAP_VSYNC1 (1<<0)
311#define DISP0_VSYNC_MAP_VSYNC2 ((1<<0)|(1<<1))
312
313#define DISP1_VSYNC_MAP_VSYNC0 0
314#define DISP1_VSYNC_MAP_VSYNC1 (1<<2)
315#define DISP1_VSYNC_MAP_VSYNC2 ((1<<2)|(1<<3))
316
317#define PRIMARY_LCD_SYNC_EN (1<<4)
318#define PRIMARY_LCD_SYNC_DISABLE 0
319
320#define SECONDARY_LCD_SYNC_EN (1<<5)
321#define SECONDARY_LCD_SYNC_DISABLE 0
322
323#define EXTERNAL_LCD_SYNC_EN (1<<6)
324#define EXTERNAL_LCD_SYNC_DISABLE 0
325
326/* MDP_VSYNC_THRESHOLD / MDP_FULL_BYPASS_WORD60 */
327#define VSYNC_THRESHOLD_ABOVE_LOC 0
328#define VSYNC_THRESHOLD_BELOW_LOC 16
329#define VSYNC_ANTI_TEAR_EN (1<<31)
330
331/* MDP_COMMAND_CONFIG / MDP_FULL_BYPASS_WORD1 */
332#define MDP_CMD_DBGBUS_EN (1<<0)
333
334/* MDP_PPP_SOURCE_CONFIG / MDP_FULL_BYPASS_WORD9&53 */
335#define PPP_SRC_C0G_8BIT ((1<<1)|(1<<0))
336#define PPP_SRC_C1B_8BIT ((1<<3)|(1<<2))
337#define PPP_SRC_C2R_8BIT ((1<<5)|(1<<4))
338#define PPP_SRC_C3A_8BIT ((1<<7)|(1<<6))
339
340#define PPP_SRC_C0G_6BIT (1<<1)
341#define PPP_SRC_C1B_6BIT (1<<3)
342#define PPP_SRC_C2R_6BIT (1<<5)
343
344#define PPP_SRC_C0G_5BIT (1<<0)
345#define PPP_SRC_C1B_5BIT (1<<2)
346#define PPP_SRC_C2R_5BIT (1<<4)
347
348#define PPP_SRC_C3ALPHA_EN (1<<8)
349
350#define PPP_SRC_BPP_1BYTES 0
351#define PPP_SRC_BPP_2BYTES (1<<9)
352#define PPP_SRC_BPP_3BYTES (1<<10)
353#define PPP_SRC_BPP_4BYTES ((1<<10)|(1<<9))
354
355#define PPP_SRC_BPP_ROI_ODD_X (1<<11)
356#define PPP_SRC_BPP_ROI_ODD_Y (1<<12)
357#define PPP_SRC_INTERLVD_2COMPONENTS (1<<13)
358#define PPP_SRC_INTERLVD_3COMPONENTS (1<<14)
359#define PPP_SRC_INTERLVD_4COMPONENTS ((1<<14)|(1<<13))
360
361
362/* RGB666 unpack format
363** TIGHT means R6+G6+B6 together
364** LOOSE means R6+2 +G6+2+ B6+2 (with MSB)
365** or 2+R6 +2+G6 +2+B6 (with LSB)
366*/
367#define PPP_SRC_PACK_TIGHT (1<<17)
368#define PPP_SRC_PACK_LOOSE 0
369#define PPP_SRC_PACK_ALIGN_LSB 0
370#define PPP_SRC_PACK_ALIGN_MSB (1<<18)
371
372#define PPP_SRC_PLANE_INTERLVD 0
373#define PPP_SRC_PLANE_PSEUDOPLNR (1<<20)
374
375#define PPP_SRC_WMV9_MODE (1<<21)
376
377/* MDP_PPP_OPERATION_CONFIG / MDP_FULL_BYPASS_WORD14 */
378#define PPP_OP_SCALE_X_ON (1<<0)
379#define PPP_OP_SCALE_Y_ON (1<<1)
380
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700381#ifndef CONFIG_MSM_MDP31
Pavel Machekd480ace2009-09-22 16:47:03 -0700382#define PPP_OP_CONVERT_RGB2YCBCR 0
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700383#else
384#define PPP_OP_CONVERT_RGB2YCBCR (1<<30)
385#endif
386
Pavel Machekd480ace2009-09-22 16:47:03 -0700387#define PPP_OP_CONVERT_YCBCR2RGB (1<<2)
388#define PPP_OP_CONVERT_ON (1<<3)
389
390#define PPP_OP_CONVERT_MATRIX_PRIMARY 0
391#define PPP_OP_CONVERT_MATRIX_SECONDARY (1<<4)
392
393#define PPP_OP_LUT_C0_ON (1<<5)
394#define PPP_OP_LUT_C1_ON (1<<6)
395#define PPP_OP_LUT_C2_ON (1<<7)
396
397/* rotate or blend enable */
398#define PPP_OP_ROT_ON (1<<8)
399
400#define PPP_OP_ROT_90 (1<<9)
401#define PPP_OP_FLIP_LR (1<<10)
402#define PPP_OP_FLIP_UD (1<<11)
403
404#define PPP_OP_BLEND_ON (1<<12)
405
406#define PPP_OP_BLEND_SRCPIXEL_ALPHA 0
407#define PPP_OP_BLEND_DSTPIXEL_ALPHA (1<<13)
408#define PPP_OP_BLEND_CONSTANT_ALPHA (1<<14)
409#define PPP_OP_BLEND_SRCPIXEL_TRANSP ((1<<13)|(1<<14))
410
411#define PPP_OP_BLEND_ALPHA_BLEND_NORMAL 0
412#define PPP_OP_BLEND_ALPHA_BLEND_REVERSE (1<<15)
413
414#define PPP_OP_DITHER_EN (1<<16)
415
416#define PPP_OP_COLOR_SPACE_RGB 0
417#define PPP_OP_COLOR_SPACE_YCBCR (1<<17)
418
419#define PPP_OP_SRC_CHROMA_RGB 0
420#define PPP_OP_SRC_CHROMA_H2V1 (1<<18)
421#define PPP_OP_SRC_CHROMA_H1V2 (1<<19)
422#define PPP_OP_SRC_CHROMA_420 ((1<<18)|(1<<19))
423#define PPP_OP_SRC_CHROMA_COSITE 0
424#define PPP_OP_SRC_CHROMA_OFFSITE (1<<20)
425
426#define PPP_OP_DST_CHROMA_RGB 0
427#define PPP_OP_DST_CHROMA_H2V1 (1<<21)
428#define PPP_OP_DST_CHROMA_H1V2 (1<<22)
429#define PPP_OP_DST_CHROMA_420 ((1<<21)|(1<<22))
430#define PPP_OP_DST_CHROMA_COSITE 0
431#define PPP_OP_DST_CHROMA_OFFSITE (1<<23)
432
433#define PPP_BLEND_ALPHA_TRANSP (1<<24)
434
435#define PPP_OP_BG_CHROMA_RGB 0
436#define PPP_OP_BG_CHROMA_H2V1 (1<<25)
437#define PPP_OP_BG_CHROMA_H1V2 (1<<26)
438#define PPP_OP_BG_CHROMA_420 ((1<<25)|(1<<26))
439#define PPP_OP_BG_CHROMA_SITE_COSITE 0
440#define PPP_OP_BG_CHROMA_SITE_OFFSITE (1<<27)
441
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700442#define PPP_BLEND_BG_USE_ALPHA_SEL (1 << 0)
443#define PPP_BLEND_BG_ALPHA_REVERSE (1 << 3)
444#define PPP_BLEND_BG_SRCPIXEL_ALPHA (0 << 1)
445#define PPP_BLEND_BG_DSTPIXEL_ALPHA (1 << 1)
446#define PPP_BLEND_BG_CONSTANT_ALPHA (2 << 1)
447#define PPP_BLEND_BG_CONST_ALPHA_VAL(x) ((x) << 24)
448
Pavel Machekd480ace2009-09-22 16:47:03 -0700449/* MDP_PPP_DESTINATION_CONFIG / MDP_FULL_BYPASS_WORD20 */
450#define PPP_DST_C0G_8BIT ((1<<0)|(1<<1))
451#define PPP_DST_C1B_8BIT ((1<<3)|(1<<2))
452#define PPP_DST_C2R_8BIT ((1<<5)|(1<<4))
453#define PPP_DST_C3A_8BIT ((1<<7)|(1<<6))
454
455#define PPP_DST_C0G_6BIT (1<<1)
456#define PPP_DST_C1B_6BIT (1<<3)
457#define PPP_DST_C2R_6BIT (1<<5)
458
459#define PPP_DST_C0G_5BIT (1<<0)
460#define PPP_DST_C1B_5BIT (1<<2)
461#define PPP_DST_C2R_5BIT (1<<4)
462
463#define PPP_DST_C3A_8BIT ((1<<7)|(1<<6))
464#define PPP_DST_C3ALPHA_EN (1<<8)
465
466#define PPP_DST_INTERLVD_2COMPONENTS (1<<9)
467#define PPP_DST_INTERLVD_3COMPONENTS (1<<10)
468#define PPP_DST_INTERLVD_4COMPONENTS ((1<<10)|(1<<9))
469#define PPP_DST_INTERLVD_6COMPONENTS ((1<<11)|(1<<9))
470
471#define PPP_DST_PACK_LOOSE 0
472#define PPP_DST_PACK_TIGHT (1<<13)
473#define PPP_DST_PACK_ALIGN_LSB 0
474#define PPP_DST_PACK_ALIGN_MSB (1<<14)
475
476#define PPP_DST_OUT_SEL_AXI 0
477#define PPP_DST_OUT_SEL_MDDI (1<<15)
478
479#define PPP_DST_BPP_2BYTES (1<<16)
480#define PPP_DST_BPP_3BYTES (1<<17)
481#define PPP_DST_BPP_4BYTES ((1<<17)|(1<<16))
482
483#define PPP_DST_PLANE_INTERLVD 0
484#define PPP_DST_PLANE_PLANAR (1<<18)
485#define PPP_DST_PLANE_PSEUDOPLNR (1<<19)
486
487#define PPP_DST_TO_TV (1<<20)
488
489#define PPP_DST_MDDI_PRIMARY 0
490#define PPP_DST_MDDI_SECONDARY (1<<21)
491#define PPP_DST_MDDI_EXTERNAL (1<<22)
492
493/* image configurations by image type */
494#define PPP_CFG_MDP_RGB_565(dir) (PPP_##dir##_C2R_5BIT | \
495 PPP_##dir##_C0G_6BIT | \
496 PPP_##dir##_C1B_5BIT | \
497 PPP_##dir##_BPP_2BYTES | \
498 PPP_##dir##_INTERLVD_3COMPONENTS | \
499 PPP_##dir##_PACK_TIGHT | \
500 PPP_##dir##_PACK_ALIGN_LSB | \
501 PPP_##dir##_PLANE_INTERLVD)
502
503#define PPP_CFG_MDP_RGB_888(dir) (PPP_##dir##_C2R_8BIT | \
504 PPP_##dir##_C0G_8BIT | \
505 PPP_##dir##_C1B_8BIT | \
506 PPP_##dir##_BPP_3BYTES | \
507 PPP_##dir##_INTERLVD_3COMPONENTS | \
508 PPP_##dir##_PACK_TIGHT | \
509 PPP_##dir##_PACK_ALIGN_LSB | \
510 PPP_##dir##_PLANE_INTERLVD)
511
512#define PPP_CFG_MDP_ARGB_8888(dir) (PPP_##dir##_C2R_8BIT | \
513 PPP_##dir##_C0G_8BIT | \
514 PPP_##dir##_C1B_8BIT | \
515 PPP_##dir##_C3A_8BIT | \
516 PPP_##dir##_C3ALPHA_EN | \
517 PPP_##dir##_BPP_4BYTES | \
518 PPP_##dir##_INTERLVD_4COMPONENTS | \
519 PPP_##dir##_PACK_TIGHT | \
520 PPP_##dir##_PACK_ALIGN_LSB | \
521 PPP_##dir##_PLANE_INTERLVD)
522
523#define PPP_CFG_MDP_XRGB_8888(dir) PPP_CFG_MDP_ARGB_8888(dir)
524#define PPP_CFG_MDP_RGBA_8888(dir) PPP_CFG_MDP_ARGB_8888(dir)
525#define PPP_CFG_MDP_BGRA_8888(dir) PPP_CFG_MDP_ARGB_8888(dir)
Dima Zavina8d380f2011-03-02 13:17:08 -0800526#define PPP_CFG_MDP_RGBX_8888(dir) PPP_CFG_MDP_ARGB_8888(dir)
Pavel Machekd480ace2009-09-22 16:47:03 -0700527
528#define PPP_CFG_MDP_Y_CBCR_H2V2(dir) (PPP_##dir##_C2R_8BIT | \
529 PPP_##dir##_C0G_8BIT | \
530 PPP_##dir##_C1B_8BIT | \
531 PPP_##dir##_C3A_8BIT | \
532 PPP_##dir##_BPP_2BYTES | \
533 PPP_##dir##_INTERLVD_2COMPONENTS | \
534 PPP_##dir##_PACK_TIGHT | \
535 PPP_##dir##_PACK_ALIGN_LSB | \
536 PPP_##dir##_PLANE_PSEUDOPLNR)
537
538#define PPP_CFG_MDP_Y_CRCB_H2V2(dir) PPP_CFG_MDP_Y_CBCR_H2V2(dir)
539
540#define PPP_CFG_MDP_YCRYCB_H2V1(dir) (PPP_##dir##_C2R_8BIT | \
541 PPP_##dir##_C0G_8BIT | \
542 PPP_##dir##_C1B_8BIT | \
543 PPP_##dir##_C3A_8BIT | \
544 PPP_##dir##_BPP_2BYTES | \
545 PPP_##dir##_INTERLVD_4COMPONENTS | \
546 PPP_##dir##_PACK_TIGHT | \
547 PPP_##dir##_PACK_ALIGN_LSB |\
548 PPP_##dir##_PLANE_INTERLVD)
549
550#define PPP_CFG_MDP_Y_CBCR_H2V1(dir) (PPP_##dir##_C2R_8BIT | \
551 PPP_##dir##_C0G_8BIT | \
552 PPP_##dir##_C1B_8BIT | \
553 PPP_##dir##_C3A_8BIT | \
554 PPP_##dir##_BPP_2BYTES | \
555 PPP_##dir##_INTERLVD_2COMPONENTS | \
556 PPP_##dir##_PACK_TIGHT | \
557 PPP_##dir##_PACK_ALIGN_LSB | \
558 PPP_##dir##_PLANE_PSEUDOPLNR)
559
560#define PPP_CFG_MDP_Y_CRCB_H2V1(dir) PPP_CFG_MDP_Y_CBCR_H2V1(dir)
561
562#define PPP_PACK_PATTERN_MDP_RGB_565 \
563 MDP_GET_PACK_PATTERN(0, CLR_R, CLR_G, CLR_B, 8)
564#define PPP_PACK_PATTERN_MDP_RGB_888 PPP_PACK_PATTERN_MDP_RGB_565
565#define PPP_PACK_PATTERN_MDP_XRGB_8888 \
Dima Zavin8bec99b2011-03-02 13:18:19 -0800566 MDP_GET_PACK_PATTERN(CLR_B, CLR_G, CLR_R, CLR_ALPHA, 8)
Pavel Machekd480ace2009-09-22 16:47:03 -0700567#define PPP_PACK_PATTERN_MDP_ARGB_8888 PPP_PACK_PATTERN_MDP_XRGB_8888
568#define PPP_PACK_PATTERN_MDP_RGBA_8888 \
569 MDP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B, CLR_G, CLR_R, 8)
570#define PPP_PACK_PATTERN_MDP_BGRA_8888 \
571 MDP_GET_PACK_PATTERN(CLR_ALPHA, CLR_R, CLR_G, CLR_B, 8)
Dima Zavina8d380f2011-03-02 13:17:08 -0800572#define PPP_PACK_PATTERN_MDP_RGBX_8888 \
573 MDP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B, CLR_G, CLR_R, 8)
Pavel Machekd480ace2009-09-22 16:47:03 -0700574#define PPP_PACK_PATTERN_MDP_Y_CBCR_H2V1 \
575 MDP_GET_PACK_PATTERN(0, 0, CLR_CB, CLR_CR, 8)
576#define PPP_PACK_PATTERN_MDP_Y_CBCR_H2V2 PPP_PACK_PATTERN_MDP_Y_CBCR_H2V1
577#define PPP_PACK_PATTERN_MDP_Y_CRCB_H2V1 \
578 MDP_GET_PACK_PATTERN(0, 0, CLR_CR, CLR_CB, 8)
579#define PPP_PACK_PATTERN_MDP_Y_CRCB_H2V2 PPP_PACK_PATTERN_MDP_Y_CRCB_H2V1
580#define PPP_PACK_PATTERN_MDP_YCRYCB_H2V1 \
581 MDP_GET_PACK_PATTERN(CLR_Y, CLR_R, CLR_Y, CLR_B, 8)
582
583#define PPP_CHROMA_SAMP_MDP_RGB_565(dir) PPP_OP_##dir##_CHROMA_RGB
584#define PPP_CHROMA_SAMP_MDP_RGB_888(dir) PPP_OP_##dir##_CHROMA_RGB
585#define PPP_CHROMA_SAMP_MDP_XRGB_8888(dir) PPP_OP_##dir##_CHROMA_RGB
586#define PPP_CHROMA_SAMP_MDP_ARGB_8888(dir) PPP_OP_##dir##_CHROMA_RGB
587#define PPP_CHROMA_SAMP_MDP_RGBA_8888(dir) PPP_OP_##dir##_CHROMA_RGB
588#define PPP_CHROMA_SAMP_MDP_BGRA_8888(dir) PPP_OP_##dir##_CHROMA_RGB
Dima Zavina8d380f2011-03-02 13:17:08 -0800589#define PPP_CHROMA_SAMP_MDP_RGBX_8888(dir) PPP_OP_##dir##_CHROMA_RGB
Pavel Machekd480ace2009-09-22 16:47:03 -0700590#define PPP_CHROMA_SAMP_MDP_Y_CBCR_H2V1(dir) PPP_OP_##dir##_CHROMA_H2V1
591#define PPP_CHROMA_SAMP_MDP_Y_CBCR_H2V2(dir) PPP_OP_##dir##_CHROMA_420
592#define PPP_CHROMA_SAMP_MDP_Y_CRCB_H2V1(dir) PPP_OP_##dir##_CHROMA_H2V1
593#define PPP_CHROMA_SAMP_MDP_Y_CRCB_H2V2(dir) PPP_OP_##dir##_CHROMA_420
594#define PPP_CHROMA_SAMP_MDP_YCRYCB_H2V1(dir) PPP_OP_##dir##_CHROMA_H2V1
595
596/* Helpful array generation macros */
597#define PPP_ARRAY0(name) \
598 [MDP_RGB_565] = PPP_##name##_MDP_RGB_565,\
599 [MDP_RGB_888] = PPP_##name##_MDP_RGB_888,\
600 [MDP_XRGB_8888] = PPP_##name##_MDP_XRGB_8888,\
601 [MDP_ARGB_8888] = PPP_##name##_MDP_ARGB_8888,\
602 [MDP_RGBA_8888] = PPP_##name##_MDP_RGBA_8888,\
603 [MDP_BGRA_8888] = PPP_##name##_MDP_BGRA_8888,\
Dima Zavina8d380f2011-03-02 13:17:08 -0800604 [MDP_RGBX_8888] = PPP_##name##_MDP_RGBX_8888,\
Pavel Machekd480ace2009-09-22 16:47:03 -0700605 [MDP_Y_CBCR_H2V1] = PPP_##name##_MDP_Y_CBCR_H2V1,\
606 [MDP_Y_CBCR_H2V2] = PPP_##name##_MDP_Y_CBCR_H2V2,\
607 [MDP_Y_CRCB_H2V1] = PPP_##name##_MDP_Y_CRCB_H2V1,\
608 [MDP_Y_CRCB_H2V2] = PPP_##name##_MDP_Y_CRCB_H2V2,\
609 [MDP_YCRYCB_H2V1] = PPP_##name##_MDP_YCRYCB_H2V1
610
611#define PPP_ARRAY1(name, dir) \
612 [MDP_RGB_565] = PPP_##name##_MDP_RGB_565(dir),\
613 [MDP_RGB_888] = PPP_##name##_MDP_RGB_888(dir),\
614 [MDP_XRGB_8888] = PPP_##name##_MDP_XRGB_8888(dir),\
615 [MDP_ARGB_8888] = PPP_##name##_MDP_ARGB_8888(dir),\
616 [MDP_RGBA_8888] = PPP_##name##_MDP_RGBA_8888(dir),\
617 [MDP_BGRA_8888] = PPP_##name##_MDP_BGRA_8888(dir),\
Dima Zavina8d380f2011-03-02 13:17:08 -0800618 [MDP_RGBX_8888] = PPP_##name##_MDP_RGBX_8888(dir),\
Pavel Machekd480ace2009-09-22 16:47:03 -0700619 [MDP_Y_CBCR_H2V1] = PPP_##name##_MDP_Y_CBCR_H2V1(dir),\
620 [MDP_Y_CBCR_H2V2] = PPP_##name##_MDP_Y_CBCR_H2V2(dir),\
621 [MDP_Y_CRCB_H2V1] = PPP_##name##_MDP_Y_CRCB_H2V1(dir),\
622 [MDP_Y_CRCB_H2V2] = PPP_##name##_MDP_Y_CRCB_H2V2(dir),\
623 [MDP_YCRYCB_H2V1] = PPP_##name##_MDP_YCRYCB_H2V1(dir)
624
625#define IS_YCRCB(img) ((img == MDP_Y_CRCB_H2V2) | (img == MDP_Y_CBCR_H2V2) | \
626 (img == MDP_Y_CRCB_H2V1) | (img == MDP_Y_CBCR_H2V1) | \
627 (img == MDP_YCRYCB_H2V1))
628#define IS_RGB(img) ((img == MDP_RGB_565) | (img == MDP_RGB_888) | \
629 (img == MDP_ARGB_8888) | (img == MDP_RGBA_8888) | \
Dima Zavina8d380f2011-03-02 13:17:08 -0800630 (img == MDP_XRGB_8888) | (img == MDP_BGRA_8888) | \
631 (img == MDP_RGBX_8888))
Pavel Machekd480ace2009-09-22 16:47:03 -0700632#define HAS_ALPHA(img) ((img == MDP_ARGB_8888) | (img == MDP_RGBA_8888) | \
633 (img == MDP_BGRA_8888))
634
635#define IS_PSEUDOPLNR(img) ((img == MDP_Y_CRCB_H2V2) | \
636 (img == MDP_Y_CBCR_H2V2) | \
637 (img == MDP_Y_CRCB_H2V1) | \
638 (img == MDP_Y_CBCR_H2V1))
639
640/* Mappings from addr to purpose */
641#define PPP_ADDR_SRC_ROI MDP_FULL_BYPASS_WORD2
642#define PPP_ADDR_SRC0 MDP_FULL_BYPASS_WORD3
643#define PPP_ADDR_SRC1 MDP_FULL_BYPASS_WORD4
644#define PPP_ADDR_SRC_YSTRIDE MDP_FULL_BYPASS_WORD7
645#define PPP_ADDR_SRC_CFG MDP_FULL_BYPASS_WORD9
646#define PPP_ADDR_SRC_PACK_PATTERN MDP_FULL_BYPASS_WORD10
647#define PPP_ADDR_OPERATION MDP_FULL_BYPASS_WORD14
648#define PPP_ADDR_PHASEX_INIT MDP_FULL_BYPASS_WORD15
649#define PPP_ADDR_PHASEY_INIT MDP_FULL_BYPASS_WORD16
650#define PPP_ADDR_PHASEX_STEP MDP_FULL_BYPASS_WORD17
651#define PPP_ADDR_PHASEY_STEP MDP_FULL_BYPASS_WORD18
652#define PPP_ADDR_ALPHA_TRANSP MDP_FULL_BYPASS_WORD19
653#define PPP_ADDR_DST_CFG MDP_FULL_BYPASS_WORD20
654#define PPP_ADDR_DST_PACK_PATTERN MDP_FULL_BYPASS_WORD21
655#define PPP_ADDR_DST_ROI MDP_FULL_BYPASS_WORD25
656#define PPP_ADDR_DST0 MDP_FULL_BYPASS_WORD26
657#define PPP_ADDR_DST1 MDP_FULL_BYPASS_WORD27
658#define PPP_ADDR_DST_YSTRIDE MDP_FULL_BYPASS_WORD30
659#define PPP_ADDR_EDGE MDP_FULL_BYPASS_WORD46
660#define PPP_ADDR_BG0 MDP_FULL_BYPASS_WORD48
661#define PPP_ADDR_BG1 MDP_FULL_BYPASS_WORD49
662#define PPP_ADDR_BG_YSTRIDE MDP_FULL_BYPASS_WORD51
663#define PPP_ADDR_BG_CFG MDP_FULL_BYPASS_WORD53
664#define PPP_ADDR_BG_PACK_PATTERN MDP_FULL_BYPASS_WORD54
665
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700666/* color conversion matrix configuration registers */
667/* pfmv is mv1, prmv is mv2 */
668#define MDP_CSC_PFMVn(n) (0x40400 + (4 * (n)))
669#define MDP_CSC_PRMVn(n) (0x40440 + (4 * (n)))
670
671#ifdef CONFIG_MSM_MDP31
672#define MDP_PPP_CSC_PRE_BV1n(n) (0x40500 + (4 * (n)))
673#define MDP_PPP_CSC_PRE_BV2n(n) (0x40540 + (4 * (n)))
674#define MDP_PPP_CSC_POST_BV1n(n) (0x40580 + (4 * (n)))
675#define MDP_PPP_CSC_POST_BV2n(n) (0x405c0 + (4 * (n)))
676
677#define MDP_PPP_CSC_PRE_LV1n(n) (0x40600 + (4 * (n)))
678#define MDP_PPP_CSC_PRE_LV2n(n) (0x40640 + (4 * (n)))
679#define MDP_PPP_CSC_POST_LV1n(n) (0x40680 + (4 * (n)))
680#define MDP_PPP_CSC_POST_LV2n(n) (0x406c0 + (4 * (n)))
681
682#define MDP_PPP_SCALE_COEFF_D0_SET (0)
683#define MDP_PPP_SCALE_COEFF_D1_SET (1)
684#define MDP_PPP_SCALE_COEFF_D2_SET (2)
685#define MDP_PPP_SCALE_COEFF_U1_SET (3)
686#define MDP_PPP_SCALE_COEFF_LSBn(n) (0x50400 + (8 * (n)))
687#define MDP_PPP_SCALE_COEFF_MSBn(n) (0x50404 + (8 * (n)))
688
689#define MDP_PPP_DEINT_COEFFn(n) (0x30010 + (4 * (n)))
690
691#define MDP_PPP_SCALER_FIR (0)
692#define MDP_PPP_SCALER_MN (1)
693
694#else /* !defined(CONFIG_MSM_MDP31) */
695
696#define MDP_CSC_PBVn(n) (0x40500 + (4 * (n)))
697#define MDP_CSC_SBVn(n) (0x40540 + (4 * (n)))
698#define MDP_CSC_PLVn(n) (0x40580 + (4 * (n)))
699#define MDP_CSC_SLVn(n) (0x405c0 + (4 * (n)))
700
701#endif
702
703
Pavel Machekd480ace2009-09-22 16:47:03 -0700704/* MDP_DMA_CONFIG / MDP_FULL_BYPASS_WORD32 */
Pavel Machekd480ace2009-09-22 16:47:03 -0700705#define DMA_DSTC0G_5BITS (1<<0)
706#define DMA_DSTC1B_5BITS (1<<2)
707#define DMA_DSTC2R_5BITS (1<<4)
708
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700709#define DMA_DSTC0G_6BITS (2<<0)
710#define DMA_DSTC1B_6BITS (2<<2)
711#define DMA_DSTC2R_6BITS (2<<4)
712
713#define DMA_DSTC0G_8BITS (3<<0)
714#define DMA_DSTC1B_8BITS (3<<2)
715#define DMA_DSTC2R_8BITS (3<<4)
716
717#define DMA_DST_BITS_MASK 0x3F
718
Pavel Machekd480ace2009-09-22 16:47:03 -0700719#define DMA_PACK_TIGHT (1<<6)
720#define DMA_PACK_LOOSE 0
721#define DMA_PACK_ALIGN_LSB 0
722#define DMA_PACK_ALIGN_MSB (1<<7)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700723#define DMA_PACK_PATTERN_MASK (0x3f<<8)
Pavel Machekd480ace2009-09-22 16:47:03 -0700724#define DMA_PACK_PATTERN_RGB \
725 (MDP_GET_PACK_PATTERN(0, CLR_R, CLR_G, CLR_B, 2)<<8)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700726#define DMA_PACK_PATTERN_BGR \
727 (MDP_GET_PACK_PATTERN(0, CLR_B, CLR_G, CLR_R, 2)<<8)
728
729
730#ifdef CONFIG_MSM_MDP22
Pavel Machekd480ace2009-09-22 16:47:03 -0700731
732#define DMA_OUT_SEL_AHB 0
733#define DMA_OUT_SEL_MDDI (1<<14)
734#define DMA_AHBM_LCD_SEL_PRIMARY 0
735#define DMA_AHBM_LCD_SEL_SECONDARY (1<<15)
736#define DMA_IBUF_C3ALPHA_EN (1<<16)
737#define DMA_DITHER_EN (1<<17)
Pavel Machekd480ace2009-09-22 16:47:03 -0700738#define DMA_MDDI_DMAOUT_LCD_SEL_PRIMARY 0
739#define DMA_MDDI_DMAOUT_LCD_SEL_SECONDARY (1<<18)
740#define DMA_MDDI_DMAOUT_LCD_SEL_EXTERNAL (1<<19)
Pavel Machekd480ace2009-09-22 16:47:03 -0700741#define DMA_IBUF_FORMAT_RGB565 (1<<20)
742#define DMA_IBUF_FORMAT_RGB888_OR_ARGB8888 0
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700743#define DMA_IBUF_FORMAT_MASK (1 << 20)
Pavel Machekd480ace2009-09-22 16:47:03 -0700744#define DMA_IBUF_NONCONTIGUOUS (1<<21)
745
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700746#else /* CONFIG_MSM_MDP31 */
747
748#define DMA_OUT_SEL_AHB (0 << 19)
749#define DMA_OUT_SEL_MDDI (1 << 19)
750#define DMA_OUT_SEL_LCDC (2 << 19)
751#define DMA_OUT_SEL_LCDC_MDDI (3 << 19)
752#define DMA_DITHER_EN (1 << 24)
753#define DMA_IBUF_FORMAT_RGB888 (0 << 25)
754#define DMA_IBUF_FORMAT_RGB565 (1 << 25)
755#define DMA_IBUF_FORMAT_XRGB8888 (2 << 25)
756#define DMA_IBUF_FORMAT_MASK (3 << 25)
757#define DMA_IBUF_NONCONTIGUOUS (0)
758
759#define DMA_MDDI_DMAOUT_LCD_SEL_PRIMARY (0)
760#define DMA_MDDI_DMAOUT_LCD_SEL_SECONDARY (0)
761#define DMA_MDDI_DMAOUT_LCD_SEL_EXTERNAL (0)
762#endif
763
Pavel Machekd480ace2009-09-22 16:47:03 -0700764/* MDDI REGISTER ? */
765#define MDDI_VDO_PACKET_DESC 0x5666
766#define MDDI_VDO_PACKET_PRIM 0xC3
767#define MDDI_VDO_PACKET_SECD 0xC0
768
769#endif