/*
 * Copyright (c) 2013 Texas Instruments Inc.
 *
 * David Griego, <dagriego@biglakesoftware.com>
 * Dale Farnsworth, <dale@farnsworth.org>
 * Archit Taneja, <archit@ti.com>
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 as published by
 * the Free Software Foundation.
 */

#ifndef __TI_VPE_REGS_H
#define __TI_VPE_REGS_H

/* VPE register offsets and field selectors */

/* VPE top level regs */
#define VPE_PID				0x0000
#define VPE_PID_MINOR_MASK		0x3f
#define VPE_PID_MINOR_SHIFT		0
#define VPE_PID_CUSTOM_MASK		0x03
#define VPE_PID_CUSTOM_SHIFT		6
#define VPE_PID_MAJOR_MASK		0x07
#define VPE_PID_MAJOR_SHIFT		8
#define VPE_PID_RTL_MASK		0x1f
#define VPE_PID_RTL_SHIFT		11
#define VPE_PID_FUNC_MASK		0xfff
#define VPE_PID_FUNC_SHIFT		16
#define VPE_PID_SCHEME_MASK		0x03
#define VPE_PID_SCHEME_SHIFT		30

#define VPE_SYSCONFIG			0x0010
#define VPE_SYSCONFIG_IDLE_MASK		0x03
#define VPE_SYSCONFIG_IDLE_SHIFT	2
#define VPE_SYSCONFIG_STANDBY_MASK	0x03
#define VPE_SYSCONFIG_STANDBY_SHIFT	4
#define VPE_FORCE_IDLE_MODE		0
#define VPE_NO_IDLE_MODE		1
#define VPE_SMART_IDLE_MODE		2
#define VPE_SMART_IDLE_WAKEUP_MODE	3
#define VPE_FORCE_STANDBY_MODE		0
#define VPE_NO_STANDBY_MODE		1
#define VPE_SMART_STANDBY_MODE		2
#define VPE_SMART_STANDBY_WAKEUP_MODE	3

#define VPE_INT0_STATUS0_RAW_SET	0x0020
#define VPE_INT0_STATUS0_RAW		VPE_INT0_STATUS0_RAW_SET
#define VPE_INT0_STATUS0_CLR		0x0028
#define VPE_INT0_STATUS0		VPE_INT0_STATUS0_CLR
#define VPE_INT0_ENABLE0_SET		0x0030
#define VPE_INT0_ENABLE0		VPE_INT0_ENABLE0_SET
#define VPE_INT0_ENABLE0_CLR		0x0038
#define VPE_INT0_LIST0_COMPLETE		(1 << 0)
#define VPE_INT0_LIST0_NOTIFY		(1 << 1)
#define VPE_INT0_LIST1_COMPLETE		(1 << 2)
#define VPE_INT0_LIST1_NOTIFY		(1 << 3)
#define VPE_INT0_LIST2_COMPLETE		(1 << 4)
#define VPE_INT0_LIST2_NOTIFY		(1 << 5)
#define VPE_INT0_LIST3_COMPLETE		(1 << 6)
#define VPE_INT0_LIST3_NOTIFY		(1 << 7)
#define VPE_INT0_LIST4_COMPLETE		(1 << 8)
#define VPE_INT0_LIST4_NOTIFY		(1 << 9)
#define VPE_INT0_LIST5_COMPLETE		(1 << 10)
#define VPE_INT0_LIST5_NOTIFY		(1 << 11)
#define VPE_INT0_LIST6_COMPLETE		(1 << 12)
#define VPE_INT0_LIST6_NOTIFY		(1 << 13)
#define VPE_INT0_LIST7_COMPLETE		(1 << 14)
#define VPE_INT0_LIST7_NOTIFY		(1 << 15)
#define VPE_INT0_DESCRIPTOR		(1 << 16)
#define VPE_DEI_FMD_INT			(1 << 18)

#define VPE_INT0_STATUS1_RAW_SET	0x0024
#define VPE_INT0_STATUS1_RAW		VPE_INT0_STATUS1_RAW_SET
#define VPE_INT0_STATUS1_CLR		0x002c
#define VPE_INT0_STATUS1		VPE_INT0_STATUS1_CLR
#define VPE_INT0_ENABLE1_SET		0x0034
#define VPE_INT0_ENABLE1		VPE_INT0_ENABLE1_SET
#define VPE_INT0_ENABLE1_CLR		0x003c
#define VPE_INT0_CHANNEL_GROUP0		(1 << 0)
#define VPE_INT0_CHANNEL_GROUP1		(1 << 1)
#define VPE_INT0_CHANNEL_GROUP2		(1 << 2)
#define VPE_INT0_CHANNEL_GROUP3		(1 << 3)
#define VPE_INT0_CHANNEL_GROUP4		(1 << 4)
#define VPE_INT0_CHANNEL_GROUP5		(1 << 5)
#define VPE_INT0_CLIENT			(1 << 7)
#define VPE_DEI_ERROR_INT		(1 << 16)
#define VPE_DS1_UV_ERROR_INT		(1 << 22)

#define VPE_INTC_EOI			0x00a0

#define VPE_CLK_ENABLE			0x0100
#define VPE_VPEDMA_CLK_ENABLE		(1 << 0)
#define VPE_DATA_PATH_CLK_ENABLE	(1 << 1)

#define VPE_CLK_RESET			0x0104
#define VPE_VPDMA_CLK_RESET_MASK	0x1
#define VPE_VPDMA_CLK_RESET_SHIFT	0
#define VPE_DATA_PATH_CLK_RESET_MASK	0x1
#define VPE_DATA_PATH_CLK_RESET_SHIFT	1
#define VPE_MAIN_RESET_MASK		0x1
#define VPE_MAIN_RESET_SHIFT		31

#define VPE_CLK_FORMAT_SELECT		0x010c
#define VPE_CSC_SRC_SELECT_MASK		0x03
#define VPE_CSC_SRC_SELECT_SHIFT	0
#define VPE_RGB_OUT_SELECT		(1 << 8)
#define VPE_DS_SRC_SELECT_MASK		0x07
#define VPE_DS_SRC_SELECT_SHIFT		9
#define VPE_DS_BYPASS			(1 << 16)
#define VPE_COLOR_SEPARATE_422		(1 << 18)

#define VPE_DS_SRC_DEI_SCALER		(5 << VPE_DS_SRC_SELECT_SHIFT)
#define VPE_CSC_SRC_DEI_SCALER		(3 << VPE_CSC_SRC_SELECT_SHIFT)

#define VPE_CLK_RANGE_MAP		0x011c
#define VPE_RANGE_RANGE_MAP_Y_MASK	0x07
#define VPE_RANGE_RANGE_MAP_Y_SHIFT	0
#define VPE_RANGE_RANGE_MAP_UV_MASK	0x07
#define VPE_RANGE_RANGE_MAP_UV_SHIFT	3
#define VPE_RANGE_MAP_ON		(1 << 6)
#define VPE_RANGE_REDUCTION_ON		(1 << 28)

/* VPE chrominance upsampler regs */
#define VPE_US1_R0			0x0304
#define VPE_US2_R0			0x0404
#define VPE_US3_R0			0x0504
#define VPE_US_C1_MASK			0x3fff
#define VPE_US_C1_SHIFT			2
#define VPE_US_C0_MASK			0x3fff
#define VPE_US_C0_SHIFT			18
#define VPE_US_MODE_MASK		0x03
#define VPE_US_MODE_SHIFT		16
#define VPE_ANCHOR_FID0_C1_MASK		0x3fff
#define VPE_ANCHOR_FID0_C1_SHIFT	2
#define VPE_ANCHOR_FID0_C0_MASK		0x3fff
#define VPE_ANCHOR_FID0_C0_SHIFT	18

#define VPE_US1_R1			0x0308
#define VPE_US2_R1			0x0408
#define VPE_US3_R1			0x0508
#define VPE_ANCHOR_FID0_C3_MASK		0x3fff
#define VPE_ANCHOR_FID0_C3_SHIFT	2
#define VPE_ANCHOR_FID0_C2_MASK		0x3fff
#define VPE_ANCHOR_FID0_C2_SHIFT	18

#define VPE_US1_R2			0x030c
#define VPE_US2_R2			0x040c
#define VPE_US3_R2			0x050c
#define VPE_INTERP_FID0_C1_MASK		0x3fff
#define VPE_INTERP_FID0_C1_SHIFT	2
#define VPE_INTERP_FID0_C0_MASK		0x3fff
#define VPE_INTERP_FID0_C0_SHIFT	18

#define VPE_US1_R3			0x0310
#define VPE_US2_R3			0x0410
#define VPE_US3_R3			0x0510
#define VPE_INTERP_FID0_C3_MASK		0x3fff
#define VPE_INTERP_FID0_C3_SHIFT	2
#define VPE_INTERP_FID0_C2_MASK		0x3fff
#define VPE_INTERP_FID0_C2_SHIFT	18

#define VPE_US1_R4			0x0314
#define VPE_US2_R4			0x0414
#define VPE_US3_R4			0x0514
#define VPE_ANCHOR_FID1_C1_MASK		0x3fff
#define VPE_ANCHOR_FID1_C1_SHIFT	2
#define VPE_ANCHOR_FID1_C0_MASK		0x3fff
#define VPE_ANCHOR_FID1_C0_SHIFT	18

#define VPE_US1_R5			0x0318
#define VPE_US2_R5			0x0418
#define VPE_US3_R5			0x0518
#define VPE_ANCHOR_FID1_C3_MASK		0x3fff
#define VPE_ANCHOR_FID1_C3_SHIFT	2
#define VPE_ANCHOR_FID1_C2_MASK		0x3fff
#define VPE_ANCHOR_FID1_C2_SHIFT	18

#define VPE_US1_R6			0x031c
#define VPE_US2_R6			0x041c
#define VPE_US3_R6			0x051c
#define VPE_INTERP_FID1_C1_MASK		0x3fff
#define VPE_INTERP_FID1_C1_SHIFT	2
#define VPE_INTERP_FID1_C0_MASK		0x3fff
#define VPE_INTERP_FID1_C0_SHIFT	18

#define VPE_US1_R7			0x0320
#define VPE_US2_R7			0x0420
#define VPE_US3_R7			0x0520
#define VPE_INTERP_FID0_C3_MASK		0x3fff
#define VPE_INTERP_FID0_C3_SHIFT	2
#define VPE_INTERP_FID0_C2_MASK		0x3fff
#define VPE_INTERP_FID0_C2_SHIFT	18

/* VPE de-interlacer regs */
#define VPE_DEI_FRAME_SIZE		0x0600
#define VPE_DEI_WIDTH_MASK		0x07ff
#define VPE_DEI_WIDTH_SHIFT		0
#define VPE_DEI_HEIGHT_MASK		0x07ff
#define VPE_DEI_HEIGHT_SHIFT		16
#define VPE_DEI_INTERLACE_BYPASS	(1 << 29)
#define VPE_DEI_FIELD_FLUSH		(1 << 30)
#define VPE_DEI_PROGRESSIVE		(1 << 31)

#define VPE_MDT_BYPASS			0x0604
#define VPE_MDT_TEMPMAX_BYPASS		(1 << 0)
#define VPE_MDT_SPATMAX_BYPASS		(1 << 1)

#define VPE_MDT_SF_THRESHOLD		0x0608
#define VPE_MDT_SF_SC_THR1_MASK		0xff
#define VPE_MDT_SF_SC_THR1_SHIFT	0
#define VPE_MDT_SF_SC_THR2_MASK		0xff
#define VPE_MDT_SF_SC_THR2_SHIFT	0
#define VPE_MDT_SF_SC_THR3_MASK		0xff
#define VPE_MDT_SF_SC_THR3_SHIFT	0

#define VPE_EDI_CONFIG			0x060c
#define VPE_EDI_INP_MODE_MASK		0x03
#define VPE_EDI_INP_MODE_SHIFT		0
#define VPE_EDI_ENABLE_3D		(1 << 2)
#define VPE_EDI_ENABLE_CHROMA_3D	(1 << 3)
#define VPE_EDI_CHROMA3D_COR_THR_MASK	0xff
#define VPE_EDI_CHROMA3D_COR_THR_SHIFT	8
#define VPE_EDI_DIR_COR_LOWER_THR_MASK	0xff
#define VPE_EDI_DIR_COR_LOWER_THR_SHIFT	16
#define VPE_EDI_COR_SCALE_FACTOR_MASK	0xff
#define VPE_EDI_COR_SCALE_FACTOR_SHIFT	23

#define VPE_DEI_EDI_LUT_R0		0x0610
#define VPE_EDI_LUT0_MASK		0x1f
#define VPE_EDI_LUT0_SHIFT		0
#define VPE_EDI_LUT1_MASK		0x1f
#define VPE_EDI_LUT1_SHIFT		8
#define VPE_EDI_LUT2_MASK		0x1f
#define VPE_EDI_LUT2_SHIFT		16
#define VPE_EDI_LUT3_MASK		0x1f
#define VPE_EDI_LUT3_SHIFT		24

#define VPE_DEI_EDI_LUT_R1		0x0614
#define VPE_EDI_LUT0_MASK		0x1f
#define VPE_EDI_LUT0_SHIFT		0
#define VPE_EDI_LUT1_MASK		0x1f
#define VPE_EDI_LUT1_SHIFT		8
#define VPE_EDI_LUT2_MASK		0x1f
#define VPE_EDI_LUT2_SHIFT		16
#define VPE_EDI_LUT3_MASK		0x1f
#define VPE_EDI_LUT3_SHIFT		24

#define VPE_DEI_EDI_LUT_R2		0x0618
#define VPE_EDI_LUT4_MASK		0x1f
#define VPE_EDI_LUT4_SHIFT		0
#define VPE_EDI_LUT5_MASK		0x1f
#define VPE_EDI_LUT5_SHIFT		8
#define VPE_EDI_LUT6_MASK		0x1f
#define VPE_EDI_LUT6_SHIFT		16
#define VPE_EDI_LUT7_MASK		0x1f
#define VPE_EDI_LUT7_SHIFT		24

#define VPE_DEI_EDI_LUT_R3		0x061c
#define VPE_EDI_LUT8_MASK		0x1f
#define VPE_EDI_LUT8_SHIFT		0
#define VPE_EDI_LUT9_MASK		0x1f
#define VPE_EDI_LUT9_SHIFT		8
#define VPE_EDI_LUT10_MASK		0x1f
#define VPE_EDI_LUT10_SHIFT		16
#define VPE_EDI_LUT11_MASK		0x1f
#define VPE_EDI_LUT11_SHIFT		24

#define VPE_DEI_FMD_WINDOW_R0		0x0620
#define VPE_FMD_WINDOW_MINX_MASK	0x07ff
#define VPE_FMD_WINDOW_MINX_SHIFT	0
#define VPE_FMD_WINDOW_MAXX_MASK	0x07ff
#define VPE_FMD_WINDOW_MAXX_SHIFT	16
#define VPE_FMD_WINDOW_ENABLE		(1 << 31)

#define VPE_DEI_FMD_WINDOW_R1		0x0624
#define VPE_FMD_WINDOW_MINY_MASK	0x07ff
#define VPE_FMD_WINDOW_MINY_SHIFT	0
#define VPE_FMD_WINDOW_MAXY_MASK	0x07ff
#define VPE_FMD_WINDOW_MAXY_SHIFT	16

#define VPE_DEI_FMD_CONTROL_R0		0x0628
#define VPE_FMD_ENABLE			(1 << 0)
#define VPE_FMD_LOCK			(1 << 1)
#define VPE_FMD_JAM_DIR			(1 << 2)
#define VPE_FMD_BED_ENABLE		(1 << 3)
#define VPE_FMD_CAF_FIELD_THR_MASK	0xff
#define VPE_FMD_CAF_FIELD_THR_SHIFT	16
#define VPE_FMD_CAF_LINE_THR_MASK	0xff
#define VPE_FMD_CAF_LINE_THR_SHIFT	24

#define VPE_DEI_FMD_CONTROL_R1		0x062c
#define VPE_FMD_CAF_THR_MASK		0x000fffff
#define VPE_FMD_CAF_THR_SHIFT		0

#define VPE_DEI_FMD_STATUS_R0		0x0630
#define VPE_FMD_CAF_MASK		0x000fffff
#define VPE_FMD_CAF_SHIFT		0
#define VPE_FMD_RESET			(1 << 24)

#define VPE_DEI_FMD_STATUS_R1		0x0634
#define VPE_FMD_FIELD_DIFF_MASK		0x0fffffff
#define VPE_FMD_FIELD_DIFF_SHIFT	0

#define VPE_DEI_FMD_STATUS_R2		0x0638
#define VPE_FMD_FRAME_DIFF_MASK		0x000fffff
#define VPE_FMD_FRAME_DIFF_SHIFT	0

#endif