summaryrefslogtreecommitdiff
path: root/arch/arm/plat-mxc/include/mach/mvf-dcu-fb.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/plat-mxc/include/mach/mvf-dcu-fb.h')
-rw-r--r--arch/arm/plat-mxc/include/mach/mvf-dcu-fb.h289
1 files changed, 289 insertions, 0 deletions
diff --git a/arch/arm/plat-mxc/include/mach/mvf-dcu-fb.h b/arch/arm/plat-mxc/include/mach/mvf-dcu-fb.h
new file mode 100644
index 000000000000..b9d8dd3b93bb
--- /dev/null
+++ b/arch/arm/plat-mxc/include/mach/mvf-dcu-fb.h
@@ -0,0 +1,289 @@
+/*
+ * Copyright 2012 Freescale Semiconductor, Inc.
+ *
+ * Freescale DCU Frame Buffer device driver
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ */
+
+#ifndef __MVF_DCU_FB_H__
+#define __MVF_DCU_FB_H__
+
+#include <linux/types.h>
+
+struct mvf_dcu_platform_data {
+ char *mode_str;
+ int default_bpp;
+ int (*init) (int);
+};
+
+struct mfb_alpha {
+ int enable;
+ int alpha;
+};
+
+struct dfb_chroma_key {
+ int enable;
+ __u8 red_max;
+ __u8 green_max;
+ __u8 blue_max;
+ __u8 red_min;
+ __u8 green_min;
+ __u8 blue_min;
+};
+
+struct layer_display_offset {
+ int x_layer_d;
+ int y_layer_d;
+};
+
+#define DCU_LCD_ENABLE_PIN 30
+
+#define MFB_SET_CHROMA_KEY _IOW('M', 1, struct mfb_chroma_key)
+#define MFB_SET_BRIGHTNESS _IOW('M', 3, __u8)
+
+#define MFB_SET_ALPHA 0x80014d00
+#define MFB_GET_ALPHA 0x40014d00
+#define MFB_SET_LAYER 0x80084d04
+#define MFB_GET_LAYER 0x40084d04
+
+#define FBIOGET_GWINFO 0x46E0
+#define FBIOPUT_GWINFO 0x46E1
+
+#ifdef __KERNEL__
+#include <linux/spinlock.h>
+
+/*
+ * These are the fields of control descriptor for every layer
+ */
+struct dcu_layer_desc {
+ u32 layer_num;
+ u32 width;
+ u32 height;
+ u32 posx;
+ u32 posy;
+ u32 addr;
+ u32 blend;
+ u32 chroma_key_en;
+ u32 lut_offset;
+ u32 rle_en;
+ u32 bpp;
+ u32 trans;
+ u32 safety_en;
+ u32 data_sel_clut;
+ u32 tile_en;
+ u32 en;
+ u32 ck_r_min;
+ u32 ck_r_max;
+ u32 ck_g_min;
+ u32 ck_g_max;
+ u32 ck_b_min;
+ u32 ck_b_max;
+ u32 tile_width;
+ u32 tile_height;
+ u32 trans_fgcolor;
+ u32 trans_bgcolor;
+} __packed;
+
+
+/* DCU registers */
+#define DCU_CTRLDESCCURSOR1 0x0000
+#define DCU_CTRLDESCCURSOR1_HEIGHT(x) (x << 16)
+#define DCU_CTRLDESCCURSOR1_WIDTH(x) (x)
+
+#define DCU_CTRLDESCCURSOR2 0x0004
+#define DCU_CTRLDESCCURSOR2_POSY(x) (x << 16)
+#define DCU_CTRLDESCCURSOR2_POSX(x) (x)
+
+#define DCU_CTRLDESCCURSOR3 0x0008
+#define DCU_CTRLDESCCURSOR3_CUR_EN(x) (x << 31)
+
+#define DCU_CTRLDESCCURSOR4 0x000c
+
+#define DCU_DCU_MODE 0x0010
+#define DCU_MODE_BLEND_ITER(x) (x << 20)
+#define DCU_MODE_RASTER_EN(x) (x << 14)
+#define DCU_MODE_DCU_MODE(x) (x)
+#define DCU_MODE_DCU_MODE_MASK 0x03
+
+#define DCU_BGND 0x0014
+#define DCU_BGND_R(x) (x << 16)
+#define DCU_BGND_G(x) (x << 8)
+#define DCU_BGND_B(x) (x)
+
+#define DCU_DISP_SIZE 0x0018
+#define DCU_DISP_SIZE_DELTA_Y(x) (x << 16)
+#define DCU_DISP_SIZE_DELTA_X(x) (x)
+
+#define DCU_HSYN_PARA 0x001c
+#define DCU_HSYN_PARA_BP(x) (x << 22)
+#define DCU_HSYN_PARA_PW(x) (x << 11)
+#define DCU_HSYN_PARA_FP(x) (x)
+
+#define DCU_VSYN_PARA 0x0020
+#define DCU_VSYN_PARA_BP(x) (x << 22)
+#define DCU_VSYN_PARA_PW(x) (x << 11)
+#define DCU_VSYN_PARA_FP(x) (x)
+
+#define DCU_SYN_POL 0x0024
+#define DCU_SYN_POL_INV_PXCK(x) (x << 6)
+#define DCU_SYN_POL_NEG(x) (x << 5)
+#define DCU_SYN_POL_INV_VS(x) (x << 1)
+#define DCU_SYN_POL_INV_HS(x) (x)
+
+#define DCU_THRESHOLD 0x0028
+#define DCU_THRESHOLD_LS_BF_VS(x) (x << 16)
+#define DCU_THRESHOLD_OUT_BUF_HIGH(x) (x << 8)
+#define DCU_THRESHOLD_OUT_BUF_LOW(x) (x)
+
+#define DCU_INT_STATUS 0x002C
+#define DCU_INT_STATUS_UNDRUN (1 << 2)
+#define DCU_INT_STATUS_LYR_TRANS_FINISH (1 << 12)
+
+#define DCU_INT_MASK 0x0030
+#define DCU_INT_MASK_ALL 0xffffffff
+
+#define DCU_COLBAR_1 0x0034
+#define DCU_COLBAR_2 0x0038
+#define DCU_COLBAR_3 0x003c
+#define DCU_COLBAR_4 0x0040
+#define DCU_COLBAR_5 0x0044
+#define DCU_COLBAR_6 0x0048
+#define DCU_COLBAR_7 0x004c
+#define DCU_COLBAR_8 0x0050
+#define DCU_DIV_RATIO 0x0054
+#define DCU_SIGN_CALC_1 0x0058
+#define DCU_SIGN_CALC_2 0x005c
+#define DCU_CRC_VAL 0x0060
+
+#define DCU_PARR_ERR_STA_1 0x006c
+
+#define DCU_PARR_ERR_STA_2 0x0070
+
+#define DCU_PARR_ERR_STA_3 0x007c
+
+#define DCU_MSK_PARR_ERR_STA_1 0x0080
+#define DCU_MSK_PARR_ERR_ALL 0xffffffff
+
+#define DCU_MSK_PARR_ERR_STA_2 0x0084
+
+#define DCU_MSK_PARR_ERR_STA_3 0x0090
+
+#define DCU_THRSHLD_INP_1 0x0094
+#define DCU_THRSHLD_INP_2 0x0098
+#define DCU_THRSHLD_INP_3 0x009c
+#define DCU_LUMA_COMP 0x00a0
+#define DCU_RED_CHRM_COMP 0x00a4
+#define DCU_GRN_CHRM_COMP 0x00a8
+#define DCU_BLUE_CHRM_COMP 0x00ac
+#define DCU_CRC_POS 0x00b0
+#define DCU_LYR_INTPOL_EN 0x00b4
+#define DCU_LYR_LUMA_COMP 0x00b8
+#define DCU_LYR_CHRM_RED 0x00bc
+#define DCU_LYR_CHRM_GRN 0x00c0
+#define DCU_LYR_CHRM_BLUE 0x00c4
+#define DCU_COMP_IMSIZE 0x00c8
+
+#define DCU_UPDATE_MODE 0x00cc
+#define DCU_UPDATE_MODE_MODE(x) (x << 31)
+#define DCU_UPDATE_MODE_READREG(x) (x << 30)
+
+#define DCU_UNDERRUN 0x00d0
+
+#define DCU_CTRLDESCLN_0(x) (0x200 + (x) * 0x40)
+#define DCU_CTRLDESCLN_0_HEIGHT(x) (x << 16)
+#define DCU_CTRLDESCLN_0_WIDTH(x) (x)
+
+#define DCU_CTRLDESCLN_1(x) (0x204 + (x) * 0x40)
+#define DCU_CTRLDESCLN_1_POSY(x) (x << 16)
+#define DCU_CTRLDESCLN_1_POSX(x) (x)
+
+#define DCU_CTRLDESCLN_2(x) (0x208 + (x) * 0x40)
+
+#define DCU_CTRLDESCLN_3(x) (0x20c + (x) * 0x40)
+#define DCU_CTRLDESCLN_3_EN(x) (x << 31)
+#define DCU_CTRLDESCLN_3_TILE_EN(x) (x << 30)
+#define DCU_CTRLDESCLN_3_DATA_SEL(x) (x << 29)
+#define DCU_CTRLDESCLN_3_SAFETY_EN(x) (x << 28)
+#define DCU_CTRLDESCLN_3_TRANS(x) (x << 20)
+#define DCU_CTRLDESCLN_3_BPP(x) (x << 16)
+#define DCU_CTRLDESCLN_3_RLE_EN(x) (x << 15)
+#define DCU_CTRLDESCLN_3_LUOFFS(x) (x << 4)
+#define DCU_CTRLDESCLN_3_BB(x) (x << 2)
+#define DCU_CTRLDESCLN_3_AB(x) (x)
+
+#define DCU_CTRLDESCLN_4(x) (0x210 + (x) * 0x40)
+#define DCU_CTRLDESCLN_4_CKMAX_R(x) (x << 16)
+#define DCU_CTRLDESCLN_4_CKMAX_G(x) (x << 8)
+#define DCU_CTRLDESCLN_4_CKMAX_B(x) (x)
+
+#define DCU_CTRLDESCLN_5(x) (0x214 + (x) * 0x40)
+#define DCU_CTRLDESCLN_5_CKMIN_R(x) (x << 16)
+#define DCU_CTRLDESCLN_5_CKMIN_G(x) (x << 8)
+#define DCU_CTRLDESCLN_5_CKMIN_B(x) (x)
+
+#define DCU_CTRLDESCLN_6(x) (0x218 + (x) * 0x40)
+#define DCU_CTRLDESCLN_6_TILE_VER(x) (x << 16)
+#define DCU_CTRLDESCLN_6_TILE_HOR(x) (x)
+
+#define DCU_CTRLDESCLN_7(x) (0x21c + (x) * 0x40)
+#define DCU_CTRLDESCLN_7_FG_FCOLOR(x) (x)
+
+#define DCU_CTRLDESCLN_8(x) (0x220 + (x) * 0x40)
+#define DCU_CTRLDESCLN_8_BG_BCOLOR(x) (x)
+
+
+struct dcu_addr {
+ __u8 __iomem *vaddr; /* Virtual address */
+ dma_addr_t paddr; /* Physical address */
+ __u32 offset;
+};
+
+struct dcu_pool {
+ struct dcu_addr ad;
+ struct dcu_addr pallete;
+ struct dcu_addr gamma;
+ struct dcu_addr cursor;
+};
+
+#define DCU_LAYER_NUM_MAX 6
+#define DCU_LAYER_NUM 5
+
+/* Minimum X and Y resolutions */
+#define MIN_XRES 64
+#define MIN_YRES 64
+
+/* HW cursor parameters */
+#define MAX_CURS 32
+
+#define PALLETE_TABLE_SIZE 8192
+#define GAMMA_TABLE_SIZE (1024 * 3)
+
+/* Panels'operation modes */
+#define DCU_TYPE_OUTPUT 0 /* Panel output to display */
+#define DCU_TYPE_OFF 1 /* Panel off */
+#define DCU_TYPE_WB 2 /* Panel written back to memory */
+#define DCU_TYPE_TEST 3 /* Panel generate color bar */
+
+#define BPP_1 0
+#define BPP_2 1
+#define BPP_4 2
+#define BPP_8 3
+#define BPP_16_RGB565 4
+#define BPP_24 5
+#define BPP_32_ARGB8888 6
+#define BPP_TRANS_4 7
+#define BPP_TRANS_8 8
+#define BPP_LUM_4 9
+#define BPP_LUM_8 0x0a
+#define BPP_16_ARGB1555 0x0b
+#define BPP_16_ARGB4444 0x0c
+#define BPP_16_APAL8 0x0d
+#define BPP_YUV422 0x0e
+
+#endif /* __KERNEL__ */
+#endif /* __MVF_DCU_FB_H__ */