// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * Copyright (c) 2019 Amlogic, Inc. All rights reserved.
 */

#include <linux/version.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/device.h>
#include <linux/mm.h>
#include <linux/major.h>
#include <linux/platform_device.h>
#include <linux/mutex.h>
#include <linux/cdev.h>
#include <linux/slab.h>
#include <linux/uaccess.h>
#include <linux/delay.h>
#include <linux/clk.h>
#include <linux/amlogic/media/vout/vinfo.h>
#include "common.h"
#include "mach_reg.h"

#define MREG_END_MARKER 0xFFFF

static const struct reg_s tvregs_720p[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},

	{P_VENC_DVI_SETTING, 0x2029},
	{P_ENCP_VIDEO_MODE, 0x4040},
	{P_ENCP_VIDEO_MODE_ADV, 0x0018},
	{P_ENCP_VIDEO_YFP1_HTIME, 648},
	{P_ENCP_VIDEO_YFP2_HTIME, 3207},
	{P_ENCP_VIDEO_MAX_PXCNT, 1649},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 80},
	{P_ENCP_VIDEO_HSPULS_END, 240},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 80},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 688},
	{P_ENCP_VIDEO_VSPULS_END, 3248},
	{P_ENCP_VIDEO_VSPULS_BLINE, 4},
	{P_ENCP_VIDEO_VSPULS_ELINE, 8},
	{P_ENCP_VIDEO_HAVON_BEGIN, 260},
	{P_ENCP_VIDEO_HAVON_END, 1539},
	{P_ENCP_VIDEO_VAVON_BLINE, 29},
	{P_ENCP_VIDEO_VAVON_ELINE, 749},
	{P_ENCP_VIDEO_HSO_BEGIN, 0},
	{P_ENCP_VIDEO_HSO_END, 168},
	{P_ENCP_VIDEO_VSO_BEGIN, 168},
	{P_ENCP_VIDEO_VSO_END, 256},
	{P_ENCP_VIDEO_VSO_BLINE, 0},
	{P_ENCP_VIDEO_VSO_ELINE, 5},
	{P_ENCP_VIDEO_MAX_LNCNT, 749},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_720p_50hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_VENC_DVI_SETTING, 0x202d},
	{P_ENCP_VIDEO_MAX_PXCNT, 1979},
	{P_ENCP_VIDEO_MAX_LNCNT, 749},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 80},
	{P_ENCP_VIDEO_HSPULS_END, 240},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 80},
	{P_ENCP_VIDEO_HAVON_BEGIN, 260},
	{P_ENCP_VIDEO_HAVON_END, 1539},
	{P_ENCP_VIDEO_HSO_BEGIN, 0},
	{P_ENCP_VIDEO_HSO_END, 40},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 688},
	{P_ENCP_VIDEO_VSPULS_END, 3248},
	{P_ENCP_VIDEO_VSPULS_BLINE, 4},
	{P_ENCP_VIDEO_VSPULS_ELINE, 8},
	{P_ENCP_VIDEO_VAVON_BLINE, 25},
	{P_ENCP_VIDEO_VAVON_ELINE, 744},
	{P_ENCP_VIDEO_VSO_BEGIN, 30},
	{P_ENCP_VIDEO_VSO_END, 50},
	{P_ENCP_VIDEO_VSO_BLINE, 0},
	{P_ENCP_VIDEO_VSO_ELINE, 5},
	{P_ENCP_VIDEO_YFP1_HTIME, 648},
	{P_ENCP_VIDEO_YFP2_HTIME, 3207},
	{P_VENC_VIDEO_PROG_MODE, 0x100},
	{P_ENCP_VIDEO_MODE, 0x4040},
	{P_ENCP_VIDEO_MODE_ADV, 0x0018},
	{P_ENCP_VIDEO_SYNC_MODE, 0x407},
	{P_ENCP_VIDEO_YC_DLY, 0},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_480i[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCI_CFILT_CTRL, 0x12},
	{P_ENCI_CFILT_CTRL2, 0x12},
	{P_VENC_DVI_SETTING, 0},
	{P_ENCI_VIDEO_MODE, 0},
	{P_ENCI_VIDEO_MODE_ADV, 0},
	{P_ENCI_SYNC_HSO_BEGIN, 5},
	{P_ENCI_SYNC_HSO_END, 129},
	{P_ENCI_SYNC_VSO_EVNLN, 0x0003},
	{P_ENCI_SYNC_VSO_ODDLN, 0x0104},
	{P_ENCI_MACV_MAX_AMP, 0x810b},
	{P_VENC_VIDEO_PROG_MODE, 0xf0},
	{P_ENCI_VIDEO_MODE, 0x08},
	{P_ENCI_VIDEO_MODE_ADV, 0x26},
	{P_ENCI_VIDEO_SCH, 0x20},
	{P_ENCI_SYNC_MODE, 0x07},
	{P_ENCI_DBG_PX_RST, 0},
	{P_ENCI_VFIFO2VD_CTL, 0x4e01},
	{P_ENCI_VFIFO2VD_PIXEL_START, 0xf3,},
	{P_ENCI_VFIFO2VD_PIXEL_END, 0x0693,},
	{P_ENCI_VFIFO2VD_LINE_TOP_START, 0x12,},
	{P_ENCI_VFIFO2VD_LINE_TOP_END, 0x102,},
	{P_ENCI_VFIFO2VD_LINE_BOT_START, 0x13,},
	{P_ENCI_VFIFO2VD_LINE_BOT_END, 0x103,},
	{P_ENCI_VIDEO_EN, 1},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_480p[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_FILT_CTRL, 0x2052},
	{P_VENC_DVI_SETTING, 0x21},
	{P_ENCP_VIDEO_MODE, 0x4000},
	{P_ENCP_VIDEO_MODE_ADV, 8},
	{P_ENCP_VIDEO_YFP1_HTIME, 244},
	{P_ENCP_VIDEO_YFP2_HTIME, 1630},
	{P_ENCP_VIDEO_MAX_PXCNT, 857},
	{P_ENCP_VIDEO_MAX_LNCNT, 524},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 0x22},
	{P_ENCP_VIDEO_HSPULS_END, 0xa0},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 88},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 0},
	{P_ENCP_VIDEO_VSPULS_END, 1589},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 5},
	{P_ENCP_VIDEO_HAVON_BEGIN, 122},
	{P_ENCP_VIDEO_HAVON_END, 841},
	{P_ENCP_VIDEO_VAVON_BLINE, 36},
	{P_ENCP_VIDEO_VAVON_ELINE, 515},
	{P_ENCP_VIDEO_SYNC_MODE, 0x07},
	{P_VENC_VIDEO_PROG_MODE, 0x0},
	{P_ENCP_VIDEO_HSO_BEGIN, 0},
	{P_ENCP_VIDEO_HSO_END, 62},
	{P_ENCP_VIDEO_VSO_BEGIN, 30},
	{P_ENCP_VIDEO_VSO_END, 50},
	{P_ENCP_VIDEO_VSO_BLINE, 0},
	{P_ENCP_VIDEO_VSO_ELINE, 6},
	{P_ENCP_VIDEO_SY_VAL, 8},
	{P_ENCP_VIDEO_SY2_VAL, 0x1d8},
	{P_ENCP_DACSEL_0, 0x3102},
	{P_ENCP_DACSEL_1, 0x0054},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_576i[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_VENC_DVI_SETTING, 0},
	{P_ENCI_VIDEO_MODE, 0},
	{P_ENCI_VIDEO_MODE_ADV, 0},
	{P_ENCI_SYNC_HSO_BEGIN, 3},
	{P_ENCI_SYNC_HSO_END, 129},
	{P_ENCI_SYNC_VSO_EVNLN, 0x0003},
	{P_ENCI_SYNC_VSO_ODDLN, 0x0104},
	{P_ENCI_MACV_MAX_AMP, 0x8107},
	{P_VENC_VIDEO_PROG_MODE, 0xff},
	{P_ENCI_VIDEO_MODE, 0x13},
	{P_ENCI_VIDEO_MODE_ADV, 0x26},
	{P_ENCI_VIDEO_SCH, 0x28},
	{P_ENCI_SYNC_MODE, 0x07},
	{P_ENCI_YC_DELAY, 0x333},
	{P_ENCI_VFIFO2VD_PIXEL_START, 0x010b},
	{P_ENCI_VFIFO2VD_PIXEL_END, 0x06ab},
	{P_ENCI_VFIFO2VD_LINE_TOP_START, 0x0016},
	{P_ENCI_VFIFO2VD_LINE_TOP_END, 0x0136},
	{P_ENCI_VFIFO2VD_LINE_BOT_START, 0x0017},
	{P_ENCI_VFIFO2VD_LINE_BOT_END, 0x0137},
	{P_ENCI_DBG_PX_RST, 0},
	{P_ENCI_VFIFO2VD_CTL, 0x4e01},
	{P_ENCI_VFIFO2VD_PIXEL_START, 0x010b},
	{P_ENCI_VFIFO2VD_PIXEL_END, 0x06ab},
	{P_ENCI_VFIFO2VD_LINE_TOP_START, 0x0016},
	{P_ENCI_VFIFO2VD_LINE_TOP_END, 0x0136},
	{P_ENCI_VFIFO2VD_LINE_BOT_START, 0x0017},
	{P_ENCI_VFIFO2VD_LINE_BOT_END, 0x0137},
	{P_ENCI_VIDEO_EN, 1},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_576p[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_FILT_CTRL, 0x52},
	{P_VENC_DVI_SETTING, 0x21},
	{P_ENCP_VIDEO_MODE, 0x4000},
	{P_ENCP_VIDEO_MODE_ADV, 8},
	{P_ENCP_VIDEO_YFP1_HTIME, 235},
	{P_ENCP_VIDEO_YFP2_HTIME, 1674},
	{P_ENCP_VIDEO_MAX_PXCNT, 863},
	{P_ENCP_VIDEO_MAX_LNCNT, 624},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 0},
	{P_ENCP_VIDEO_HSPULS_END, 0x80},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 88},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 0},
	{P_ENCP_VIDEO_VSPULS_END, 1599},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 4},
	{P_ENCP_VIDEO_HAVON_BEGIN, 132},
	{P_ENCP_VIDEO_HAVON_END, 851},
	{P_ENCP_VIDEO_VAVON_BLINE, 44},
	{P_ENCP_VIDEO_VAVON_ELINE, 619},
	{P_ENCP_VIDEO_SYNC_MODE, 0x07},
	{P_VENC_VIDEO_PROG_MODE, 0x0},
	{P_ENCP_VIDEO_HSO_BEGIN, 0},
	{P_ENCP_VIDEO_HSO_END, 64},
	{P_ENCP_VIDEO_VSO_BEGIN, 30},
	{P_ENCP_VIDEO_VSO_END, 50},
	{P_ENCP_VIDEO_VSO_BLINE, 0},
	{P_ENCP_VIDEO_VSO_BLINE, 5},
	{P_ENCP_VIDEO_SY_VAL, 8},
	{P_ENCP_VIDEO_SY2_VAL, 0x1d8},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_1080i[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_VENC_DVI_SETTING, 0x2029},
	{P_ENCP_VIDEO_MAX_PXCNT, 2199},
	{P_ENCP_VIDEO_MAX_LNCNT, 1124},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 88},
	{P_ENCP_VIDEO_HSPULS_END, 264},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 88},
	{P_ENCP_VIDEO_HAVON_BEGIN, 192},
	{P_ENCP_VIDEO_HAVON_END, 2111},
	{P_ENCP_VIDEO_HSO_BEGIN, 0},
	{P_ENCP_VIDEO_HSO_END, 44},
	{P_ENCP_VIDEO_EQPULS_BEGIN, 2288},
	{P_ENCP_VIDEO_EQPULS_END, 2464},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 440},
	{P_ENCP_VIDEO_VSPULS_END, 2200},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 4},
	{P_ENCP_VIDEO_EQPULS_BLINE, 0},
	{P_ENCP_VIDEO_EQPULS_ELINE, 4},
	{P_ENCP_VIDEO_VAVON_BLINE, 20},
	{P_ENCP_VIDEO_VAVON_ELINE, 559},
	{P_ENCP_VIDEO_VSO_BEGIN, 30},
	{P_ENCP_VIDEO_VSO_END, 50},
	{P_ENCP_VIDEO_VSO_BLINE, 0},
	{P_ENCP_VIDEO_VSO_ELINE, 5},
	{P_ENCP_VIDEO_YFP1_HTIME, 516},
	{P_ENCP_VIDEO_YFP2_HTIME, 4355},
	{P_VENC_VIDEO_PROG_MODE, 0x100},
	{P_ENCP_VIDEO_OFLD_VOAV_OFST, 0x11},
	{P_ENCP_VIDEO_MODE, 0x5ffc},
	{P_ENCP_VIDEO_MODE_ADV, 0x0018},
	{P_ENCP_VIDEO_SYNC_MODE, 0x207},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_1080i_50hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_VENC_DVI_SETTING, 0x202d},
	{P_ENCP_VIDEO_MAX_PXCNT, 2639},
	{P_ENCP_VIDEO_MAX_LNCNT, 1124},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 88},
	{P_ENCP_VIDEO_HSPULS_END, 264},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 88},
	{P_ENCP_VIDEO_HAVON_BEGIN, 192},
	{P_ENCP_VIDEO_HAVON_END, 2111},
	{P_ENCP_VIDEO_HSO_BEGIN, 0},
	{P_ENCP_VIDEO_HSO_END, 44},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 440},
	{P_ENCP_VIDEO_VSPULS_END, 2200},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 4},
	{P_ENCP_VIDEO_VAVON_BLINE, 20},
	{P_ENCP_VIDEO_VAVON_ELINE, 559},
	{P_ENCP_VIDEO_VSO_BEGIN, 30},
	{P_ENCP_VIDEO_VSO_END, 50},
	{P_ENCP_VIDEO_VSO_BLINE, 0},
	{P_ENCP_VIDEO_VSO_ELINE, 5},
	{P_ENCP_VIDEO_YFP1_HTIME, 526},
	{P_ENCP_VIDEO_YFP2_HTIME, 4365},
	{P_VENC_VIDEO_PROG_MODE, 0x100},
	{P_ENCP_VIDEO_OFLD_VOAV_OFST, 0x11},
	{P_ENCP_VIDEO_MODE, 0x5ffc},
	{P_ENCP_VIDEO_MODE_ADV, 0x0018},
	{P_ENCP_VIDEO_SYNC_MODE, 0x7},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_1080p[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_FILT_CTRL, 0x1052},
	{P_VENC_DVI_SETTING, 0x0001},
	{P_ENCP_VIDEO_MODE, 0x4040},
	{P_ENCP_VIDEO_MODE_ADV, 0x0018},
	{P_ENCP_VIDEO_YFP1_HTIME, 140},
	{P_ENCP_VIDEO_YFP2_HTIME, 2060},
	{P_ENCP_VIDEO_MAX_PXCNT, 2199},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 2156},
	{P_ENCP_VIDEO_HSPULS_END, 44},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 44},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 140},
	{P_ENCP_VIDEO_VSPULS_END, 2059},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 4},
	{P_ENCP_VIDEO_HAVON_BEGIN, 148},
	{P_ENCP_VIDEO_HAVON_END, 2067},
	{P_ENCP_VIDEO_VAVON_BLINE, 42},
	{P_ENCP_VIDEO_VAVON_ELINE, 1121},
	{P_ENCP_VIDEO_HSO_BEGIN, 44},
	{P_ENCP_VIDEO_HSO_END, 2156},
	{P_ENCP_VIDEO_VSO_BEGIN, 2100},
	{P_ENCP_VIDEO_VSO_END, 2164},
	{P_ENCP_VIDEO_VSO_BLINE, 0},
	{P_ENCP_VIDEO_VSO_ELINE, 5},
	{P_ENCP_VIDEO_MAX_LNCNT, 1124},
	{P_VENC_VIDEO_PROG_MODE, 0x100},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_1080p_50hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_VENC_DVI_SETTING, 0x000d},
	{P_ENCP_VIDEO_MAX_PXCNT, 2639},
	{P_ENCP_VIDEO_MAX_LNCNT, 1124},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 44},
	{P_ENCP_VIDEO_HSPULS_END, 132},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 44},
	{P_ENCP_VIDEO_HAVON_BEGIN, 271},
	{P_ENCP_VIDEO_HAVON_END, 2190},
	{P_ENCP_VIDEO_HSO_BEGIN, 79},
	{P_ENCP_VIDEO_HSO_END, 123},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 220},
	{P_ENCP_VIDEO_VSPULS_END, 2140},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 4},
	{P_ENCP_VIDEO_EQPULS_BLINE, 0},
	{P_ENCP_VIDEO_EQPULS_ELINE, 4},
	{P_ENCP_VIDEO_VAVON_BLINE, 41},
	{P_ENCP_VIDEO_VAVON_ELINE, 1120},
	{P_ENCP_VIDEO_VSO_BEGIN, 79},
	{P_ENCP_VIDEO_VSO_END, 79},
	{P_ENCP_VIDEO_VSO_BLINE, 0},
	{P_ENCP_VIDEO_VSO_ELINE, 5},
	{P_ENCP_VIDEO_YFP1_HTIME, 271},
	{P_ENCP_VIDEO_YFP2_HTIME, 2190},
	{P_VENC_VIDEO_PROG_MODE, 0x100},
	{P_ENCP_VIDEO_MODE, 0x4040},
	{P_ENCP_VIDEO_MODE_ADV, 0x0018},
	{P_ENCP_VIDEO_SYNC_MODE, 0x7},
	{P_ENCP_VIDEO_YC_DLY, 0},
	{P_ENCP_VIDEO_RGB_CTRL, 2},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_1080p_24hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_FILT_CTRL, 0x1052},
	{P_VENC_DVI_SETTING, 0x000d},
	{P_ENCP_VIDEO_MAX_PXCNT, 2749},
	{P_ENCP_VIDEO_MAX_LNCNT, 1124},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 44},
	{P_ENCP_VIDEO_HSPULS_END, 132},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 44},
	{P_ENCP_VIDEO_HAVON_BEGIN, 271},
	{P_ENCP_VIDEO_HAVON_END, 2190},
	{P_ENCP_VIDEO_HSO_BEGIN, 79},
	{P_ENCP_VIDEO_HSO_END, 123},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 220},
	{P_ENCP_VIDEO_VSPULS_END, 2140},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 4},
	{P_ENCP_VIDEO_EQPULS_BLINE, 0},
	{P_ENCP_VIDEO_EQPULS_ELINE, 4},
	{P_ENCP_VIDEO_VAVON_BLINE, 41},
	{P_ENCP_VIDEO_VAVON_ELINE, 1120},
	{P_ENCP_VIDEO_VSO_BEGIN, 79},
	{P_ENCP_VIDEO_VSO_END, 79},
	{P_ENCP_VIDEO_VSO_BLINE, 0},
	{P_ENCP_VIDEO_VSO_ELINE, 5},
	{P_ENCP_VIDEO_YFP1_HTIME, 271},
	{P_ENCP_VIDEO_YFP2_HTIME, 2190},
	{P_VENC_VIDEO_PROG_MODE, 0x100},
	{P_ENCP_VIDEO_MODE, 0x4040},
	{P_ENCP_VIDEO_MODE_ADV, 0x0018},
	{P_ENCP_VIDEO_SYNC_MODE, 0x7},
	{P_ENCP_VIDEO_YC_DLY, 0},
	{P_ENCP_VIDEO_RGB_CTRL, 2},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_4k2k_30hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_MODE, 0x4040},
	{P_ENCP_VIDEO_MODE_ADV, 0x0008},
	{P_ENCP_VIDEO_YFP1_HTIME, 140},
	{P_ENCP_VIDEO_YFP2_HTIME, 140 + 3840},
	{P_ENCP_VIDEO_MAX_PXCNT, 3840 + 560 - 1},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 2156 + 1920},
	{P_ENCP_VIDEO_HSPULS_END, 44},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 44},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 140},
	{P_ENCP_VIDEO_VSPULS_END, 2059 + 1920},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 4},
	{P_ENCP_VIDEO_HAVON_BEGIN, 148},
	{P_ENCP_VIDEO_HAVON_END, 3987},
	{P_ENCP_VIDEO_VAVON_BLINE, 89},
	{P_ENCP_VIDEO_VAVON_ELINE, 2248},
	{P_ENCP_VIDEO_HSO_BEGIN, 44},
	{P_ENCP_VIDEO_HSO_END, 2156 + 1920},
	{P_ENCP_VIDEO_VSO_BEGIN, 2100 + 1920},
	{P_ENCP_VIDEO_VSO_END, 2164 + 1920},
	{P_ENCP_VIDEO_VSO_BLINE, 51},
	{P_ENCP_VIDEO_VSO_ELINE, 53},
	{P_ENCP_VIDEO_MAX_LNCNT, 2249},
	{P_ENCP_VIDEO_FILT_CTRL, 0x1000},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_4k2k_25hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_MODE, 0x4040},
	{P_ENCP_VIDEO_MODE_ADV, 0x0008},
	{P_ENCP_VIDEO_YFP1_HTIME, 140},
	{P_ENCP_VIDEO_YFP2_HTIME, 140 + 3840},
	{P_ENCP_VIDEO_MAX_PXCNT, 3840 + 1440 - 1},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 2156 + 1920},
	{P_ENCP_VIDEO_HSPULS_END, 44},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 44},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 140},
	{P_ENCP_VIDEO_VSPULS_END, 2059 + 1920},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 4},
	{P_ENCP_VIDEO_HAVON_BEGIN, 148},
	{P_ENCP_VIDEO_HAVON_END, 3987},
	{P_ENCP_VIDEO_VAVON_BLINE, 89},
	{P_ENCP_VIDEO_VAVON_ELINE, 2248},
	{P_ENCP_VIDEO_HSO_BEGIN, 44},
	{P_ENCP_VIDEO_HSO_END, 2156 + 1920},
	{P_ENCP_VIDEO_VSO_BEGIN, 2100 + 1920},
	{P_ENCP_VIDEO_VSO_END, 2164 + 1920},
	{P_ENCP_VIDEO_VSO_BLINE, 51},
	{P_ENCP_VIDEO_VSO_ELINE, 53},
	{P_ENCP_VIDEO_MAX_LNCNT, 2249},
	{P_ENCP_VIDEO_FILT_CTRL, 0x1000},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_4k2k_24hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_MODE, 0x4040},
	{P_ENCP_VIDEO_MODE_ADV, 0x0008},
	{P_ENCP_VIDEO_YFP1_HTIME, 140},
	{P_ENCP_VIDEO_YFP2_HTIME, 140 + 3840},
	{P_ENCP_VIDEO_MAX_PXCNT, 3840 + 1660 - 1},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 2156 + 1920},
	{P_ENCP_VIDEO_HSPULS_END, 44},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 44},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 140},
	{P_ENCP_VIDEO_VSPULS_END, 2059 + 1920},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 4},
	{P_ENCP_VIDEO_HAVON_BEGIN, 148},
	{P_ENCP_VIDEO_HAVON_END, 3987},
	{P_ENCP_VIDEO_VAVON_BLINE, 89},
	{P_ENCP_VIDEO_VAVON_ELINE, 2248},
	{P_ENCP_VIDEO_HSO_BEGIN, 44},
	{P_ENCP_VIDEO_HSO_END, 2156 + 1920},
	{P_ENCP_VIDEO_VSO_BEGIN, 2100 + 1920},
	{P_ENCP_VIDEO_VSO_END, 2164 + 1920},
	{P_ENCP_VIDEO_VSO_BLINE, 51},
	{P_ENCP_VIDEO_VSO_ELINE, 53},
	{P_ENCP_VIDEO_MAX_LNCNT, 2249},
	{P_ENCP_VIDEO_FILT_CTRL, 0x1000},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_4k2k_smpte[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_MODE, 0x4040},
	{P_ENCP_VIDEO_MODE_ADV, 0x0008},
	{P_ENCP_VIDEO_YFP1_HTIME, 140},
	{P_ENCP_VIDEO_YFP2_HTIME, 140 + 3840 + 256},
	{P_ENCP_VIDEO_MAX_PXCNT, 4096 + 1404 - 1},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 2156 + 1920},
	{P_ENCP_VIDEO_HSPULS_END, 44},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 44},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 140},
	{P_ENCP_VIDEO_VSPULS_END, 2059 + 1920},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 4},
	{P_ENCP_VIDEO_HAVON_BEGIN, 148},
	{P_ENCP_VIDEO_HAVON_END, 3987 + 256},
	{P_ENCP_VIDEO_VAVON_BLINE, 89},
	{P_ENCP_VIDEO_VAVON_ELINE, 2248},
	{P_ENCP_VIDEO_HSO_BEGIN, 44},
	{P_ENCP_VIDEO_HSO_END, 2156 + 1920 + 256},
	{P_ENCP_VIDEO_VSO_BEGIN, 2100 + 1920 + 256},
	{P_ENCP_VIDEO_VSO_END, 2164 + 1920 + 256},
	{P_ENCP_VIDEO_VSO_BLINE, 51},
	{P_ENCP_VIDEO_VSO_ELINE, 53},
	{P_ENCP_VIDEO_MAX_LNCNT, 2249},
	{P_ENCP_VIDEO_FILT_CTRL, 0x1000},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_4k2k_smpte_25hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x149F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x8C9,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0xD8,},
	{P_ENCP_VIDEO_HAVON_END, 0x10D7,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x52,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x8C1,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x58,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0xA,},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_4k2k_smpte_30hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x112F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x8C9,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0xD8,},
	{P_ENCP_VIDEO_HAVON_END, 0x10D7,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x52,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x8C1,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x58,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0xA,},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_4k2k_smpte_50hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x149F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x8C9,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0xD8,},
	{P_ENCP_VIDEO_HAVON_END, 0x10D7,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x52,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x8C1,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x58,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0xA,},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_4k2k_smpte_60hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x112F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x8C9,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0xD8,},
	{P_ENCP_VIDEO_HAVON_END, 0x10D7,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x52,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x8C1,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x58,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0xA,},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_2560x1080p50hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_VENC_DVI_SETTING, 0x000d},
	{P_ENCP_VIDEO_MAX_PXCNT, 3299},
	{P_ENCP_VIDEO_MAX_LNCNT, 1124},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 44},
	{P_ENCP_VIDEO_HSPULS_END, 132},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 44},
	{P_ENCP_VIDEO_HAVON_BEGIN, 192},
	{P_ENCP_VIDEO_HAVON_END, 2751},
	{P_ENCP_VIDEO_HSO_BEGIN, 0},
	{P_ENCP_VIDEO_HSO_END, 44},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 220},
	{P_ENCP_VIDEO_VSPULS_END, 2140},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 4},
	{P_ENCP_VIDEO_EQPULS_BLINE, 0},
	{P_ENCP_VIDEO_EQPULS_ELINE, 4},
	{P_ENCP_VIDEO_VAVON_BLINE, 41},
	{P_ENCP_VIDEO_VAVON_ELINE, 1120},
	{P_ENCP_VIDEO_VSO_BEGIN, 79},
	{P_ENCP_VIDEO_VSO_END, 79},
	{P_ENCP_VIDEO_VSO_BLINE, 0},
	{P_ENCP_VIDEO_VSO_ELINE, 5},
	{P_ENCP_VIDEO_YFP1_HTIME, 271},
	{P_ENCP_VIDEO_YFP2_HTIME, 2190},
	{P_VENC_VIDEO_PROG_MODE, 0x100},
	{P_ENCP_VIDEO_MODE, 0x4040},
	{P_ENCP_VIDEO_MODE_ADV, 0x0018},
	{P_ENCP_VIDEO_SYNC_MODE, 0x7},
	{P_ENCP_VIDEO_YC_DLY, 0},
	{P_ENCP_VIDEO_RGB_CTRL, 2},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_2560x1080p60hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_VENC_DVI_SETTING, 0x000d},
	{P_ENCP_VIDEO_MAX_PXCNT, 2999},
	{P_ENCP_VIDEO_MAX_LNCNT, 1099},
	{P_ENCP_VIDEO_HSPULS_BEGIN, 44},
	{P_ENCP_VIDEO_HSPULS_END, 132},
	{P_ENCP_VIDEO_HSPULS_SWITCH, 44},
	{P_ENCP_VIDEO_HAVON_BEGIN, 192},
	{P_ENCP_VIDEO_HAVON_END, 2751},
	{P_ENCP_VIDEO_HSO_BEGIN, 0},
	{P_ENCP_VIDEO_HSO_END, 44},
	{P_ENCP_VIDEO_VSPULS_BEGIN, 220},
	{P_ENCP_VIDEO_VSPULS_END, 2140},
	{P_ENCP_VIDEO_VSPULS_BLINE, 0},
	{P_ENCP_VIDEO_VSPULS_ELINE, 4},
	{P_ENCP_VIDEO_EQPULS_BLINE, 0},
	{P_ENCP_VIDEO_EQPULS_ELINE, 4},
	{P_ENCP_VIDEO_VAVON_BLINE, 16},
	{P_ENCP_VIDEO_VAVON_ELINE, 1095},
	{P_ENCP_VIDEO_VSO_BEGIN, 79},
	{P_ENCP_VIDEO_VSO_END, 79},
	{P_ENCP_VIDEO_VSO_BLINE, 0},
	{P_ENCP_VIDEO_VSO_ELINE, 5},
	{P_ENCP_VIDEO_YFP1_HTIME, 271},
	{P_ENCP_VIDEO_YFP2_HTIME, 2190},
	{P_VENC_VIDEO_PROG_MODE, 0x100},
	{P_ENCP_VIDEO_MODE, 0x4040},
	{P_ENCP_VIDEO_MODE_ADV, 0x0018},
	{P_ENCP_VIDEO_SYNC_MODE, 0x7},
	{P_ENCP_VIDEO_YC_DLY, 0},
	{P_ENCP_VIDEO_RGB_CTRL, 2},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_vesa_640x480p60hz[] = {
	{P_VENC_VDAC_SETTING, 0xff,},
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},
	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x31F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x20C,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x90,},
	{P_ENCP_VIDEO_HAVON_END, 0x30F,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x23,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x202,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x60,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x2,},
	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_800x600p60hz[] = {
	{P_VENC_VDAC_SETTING, 0xff,},
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},
	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x41F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x273,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0xD8,},
	{P_ENCP_VIDEO_HAVON_END, 0x3F7,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x1B,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x272,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x80,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x4,},
	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_800x480p60hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},
	{P_VENC_VDAC_SETTING, 0xff},
	{P_ENCP_VIDEO_MODE, 0x4040},
	{P_ENCP_VIDEO_MODE_ADV, 0x18},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x3DF},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x1F3},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0xA8},
	{P_ENCP_VIDEO_HAVON_END, 0x3C7},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x11},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x1F0},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0},
	{P_ENCP_VIDEO_HSO_END, 0x48},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E},
	{P_ENCP_VIDEO_VSO_END, 0x32},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0},
	{P_ENCP_VIDEO_VSO_ELINE, 0x7},
	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_vesa_852x480p60hz[] = {
	{P_VENC_VDAC_SETTING, 0xff,},
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},
	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x3B3,},/*947//htotal-1*/
	{P_ENCP_VIDEO_MAX_LNCNT, 0x213,},/*531//vtotal-1*/
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x38,},/*56//hblank-hfront*/
	{P_ENCP_VIDEO_HAVON_END, 0x38B,},/*907//htotal-hfront-1*/
	{P_ENCP_VIDEO_VAVON_BLINE, 0x2A,},/*42//vblank-vfront*/
	{P_ENCP_VIDEO_VAVON_ELINE, 0x209,},/*521//vtotal-vfront-1*/
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x10,},/*16/hor sync time*/
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x2,},/*2//ver sync time*/
	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_854x480p60hz[] = {
	{P_VENC_VDAC_SETTING, 0xff,},
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},
	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x3B5,},/*949//htotal-1*/
	{P_ENCP_VIDEO_MAX_LNCNT, 0x212,},/*530//vtotal-1*/
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x38,},/*56//hblank-hfront*/
	{P_ENCP_VIDEO_HAVON_END, 0x38D,},/*909//htotal-hfront-1*/
	{P_ENCP_VIDEO_VAVON_BLINE, 0x29,},/*41//vblank-vfront*/
	{P_ENCP_VIDEO_VAVON_ELINE, 0x208,},/*520//vtotal-vfront-1*/
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x10,},/*16//hor sync time*/
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x2,},/*2//ver sync time*/
	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_1024x600p60hz[] = {
	{P_VENC_VDAC_SETTING, 0xff,},
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x53F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x27D,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x128,},
	{P_ENCP_VIDEO_HAVON_END, 0x527,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x23,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x27A,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x88,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x6,},

	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_1024x768p60hz[] = {
	{P_VENC_VDAC_SETTING, 0xff,},
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x53F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x325,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x128,},
	{P_ENCP_VIDEO_HAVON_END, 0x527,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x23,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x322,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x88,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x6,},

	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_1152x864p75hz[] = {
	{P_VENC_VDAC_SETTING, 0xff,},
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x63F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x383,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x180,},
	{P_ENCP_VIDEO_HAVON_END, 0x5FF,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x23,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x382,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x80,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x3,},

	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_1280x600p60hz[] = {
};

static const struct reg_s tvregs_vesa_1280x768p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},
	{P_VENC_VDAC_SETTING, 0xff,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x67F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x31D,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x140,},
	{P_ENCP_VIDEO_HAVON_END, 0x63F,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x1B,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x31A,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x80,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x7,},

	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_1280x800p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},
	{P_VENC_VDAC_SETTING, 0xff,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x59F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x336,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x70,},
	{P_ENCP_VIDEO_HAVON_END, 0x56F,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x14,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x333,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x20,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x6,},

	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_1280x960p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},
	{P_VENC_VDAC_SETTING, 0xff,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x707,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x3E7,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x1A8,},
	{P_ENCP_VIDEO_HAVON_END, 0x6A7,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x27,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x3E6,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x70,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x3,},

	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_1280x1024p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},
	{P_VENC_VDAC_SETTING, 0xff,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x697,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x429,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x168,},
	{P_ENCP_VIDEO_HAVON_END, 0x667,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x29,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x428,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x70,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x3,},

	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_1360x768p60hz[] = {
	{P_VENC_VDAC_SETTING, 0xff,},

	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x6FF,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x31A,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x170,},
	{P_ENCP_VIDEO_HAVON_END, 0x6BF,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x18,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x317,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x70,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x6,},

	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_1366x768p60hz[] = {
	{P_VENC_VDAC_SETTING, 0xff,},

	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x6FF,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x31D,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x164,},
	{P_ENCP_VIDEO_HAVON_END, 0x6B9,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x1B,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x31A,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x8F,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x3,},

	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_1400x1050p60hz[] = {
	{P_VENC_VDAC_SETTING, 0xff,},

	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x747,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x440,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x178,},
	{P_ENCP_VIDEO_HAVON_END, 0x6EF,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x24,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x43D,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x90,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x4,},

	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_1440x900p60hz[] = {
	{P_VENC_VDAC_SETTING, 0xff,},

	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x76F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x3A5,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x180,},
	{P_ENCP_VIDEO_HAVON_END, 0x71F,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x1F,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x3A2,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x98,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x6,},

	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_1440x2560p60hz[] = {
	{P_VENC_VDAC_SETTING, 0xff,},

	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x623,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0xA23,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x44,},
	{P_ENCP_VIDEO_HAVON_END, 0x5E3,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x14,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0xA13,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x4,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x4,},

	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_1600x900p60hz[] = {
	{P_VENC_VDAC_SETTING, 0xff,},

	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x707,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x3E7,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0xB0,},
	{P_ENCP_VIDEO_HAVON_END, 0x6EF,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x63,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x3E6,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x50,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x3,},

	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_1600x1200p60hz[] = {
	{P_VENC_VDAC_SETTING, 0xff,},

	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x86F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x4E1,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x1F0,},
	{P_ENCP_VIDEO_HAVON_END, 0x82F,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x31,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x4E0,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0xC0,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x3,},

	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_1680x1050p60hz[] = {
	{P_VENC_VDAC_SETTING, 0xff,},
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x8BF,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x440,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x1C8,},
	{P_ENCP_VIDEO_HAVON_END, 0x857,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x24,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x43D,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0xB0,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x6,},

	{P_ENCI_VIDEO_EN, 0,},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_1920x1200p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},
	{P_VENC_VDAC_SETTING, 0xff,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0xA1F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x4DC,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x218,},
	{P_ENCP_VIDEO_HAVON_END, 0x997,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x2A,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x4D9,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0xC8,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x6,},

	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_2048x1080p24hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},
	{P_VENC_VDAC_SETTING, 0xff,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0xABD,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x464,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x22A,},
	{P_ENCP_VIDEO_HAVON_END, 0xA29,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x29,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x460,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x2C,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x5,},

	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_2160x1200p90hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x99D,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x4BB,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x70,},
	{P_ENCP_VIDEO_HAVON_END, 0x8DF,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x6,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x4B5,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x20,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x3,},

	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_vesa_2560x1440p60hz[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0xA9F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x5C8,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x70,},
	{P_ENCP_VIDEO_HAVON_END, 0xA6F,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x26,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x5C5,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x20,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x5,},

	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_vesa_2560x1600p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},
	{P_VENC_VDAC_SETTING, 0xff,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0xDAF,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x679,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x2F0,},
	{P_ENCP_VIDEO_HAVON_END, 0xCEF,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x37,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x676,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x118,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x6,},

	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_3440x1440p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},
	{P_VENC_VDAC_SETTING, 0xff,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0xE0F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x5C8,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x70,},
	{P_ENCP_VIDEO_HAVON_END, 0xDDF,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x26,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x5C5,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x20,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0xA,},

	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_2400x1200p90hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},
	{P_VENC_VDAC_SETTING, 0xff,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x9B1,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x4E3,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x3E,},
	{P_ENCP_VIDEO_HAVON_END, 0x99D,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x23,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x4D2,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x1E,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x5,},

	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_3840x1080p60hz[] = {
	{P_ENCP_VIDEO_EN, 0,},
	{P_ENCI_VIDEO_EN, 0,},
	{P_VENC_VDAC_SETTING, 0xff,},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x112F,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x464,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x180,},
	{P_ENCP_VIDEO_HAVON_END, 0x107F,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x29,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x460,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x58,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x5,},

	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0}
};

static const struct reg_s tvregs_vesa_2560x1080p60hz[] = {
};

struct vic_tvregs_set {
	enum hdmi_vic vic;
	const struct reg_s *reg_setting;
};

/* Using HDMI VIC as index */
static struct vic_tvregs_set tvregstab[] = {
	{HDMI_6_720x480i60_4x3, tvregs_480i},
	{HDMI_7_720x480i60_16x9, tvregs_480i},
	{HDMI_11_2880x480i60_16x9, tvregs_480i},
	{HDMI_2_720x480p60_4x3, tvregs_480p},
	{HDMI_3_720x480p60_16x9, tvregs_480p},
	{HDMI_13_2880x240p60_16x9, tvregs_480p},
	{HDMI_21_720x576i50_4x3, tvregs_576i},
	{HDMI_22_720x576i50_16x9, tvregs_576i},
	{HDMI_26_2880x576i50_16x9, tvregs_576i},
	{HDMI_17_720x576p50_4x3, tvregs_576p},
	{HDMI_18_720x576p50_16x9, tvregs_576p},
	{HDMI_38_2880x576p50_16x9, tvregs_576p},
	{HDMI_4_1280x720p60_16x9, tvregs_720p},
	{HDMI_5_1920x1080i60_16x9, tvregs_1080i},
	{HDMI_16_1920x1080p60_16x9, tvregs_1080p},
	{HDMI_19_1280x720p50_16x9, tvregs_720p_50hz},
	{HDMI_20_1920x1080i50_16x9, tvregs_1080i_50hz},
	{HDMI_31_1920x1080p50_16x9, tvregs_1080p_50hz},
	{HDMI_33_1920x1080p25_16x9, tvregs_1080p_50hz},
	{HDMI_34_1920x1080p30_16x9, tvregs_1080p},
	{HDMI_63_1920x1080p120_16x9, tvregs_1080p},
	{HDMI_32_1920x1080p24_16x9, tvregs_1080p_24hz},
	{HDMI_95_3840x2160p30_16x9, tvregs_4k2k_30hz},
	{HDMI_94_3840x2160p25_16x9, tvregs_4k2k_25hz},
	{HDMI_93_3840x2160p24_16x9, tvregs_4k2k_24hz},
	{HDMI_98_4096x2160p24_256x135, tvregs_4k2k_smpte},
	{HDMI_99_4096x2160p25_256x135, tvregs_4k2k_smpte_25hz},
	{HDMI_100_4096x2160p30_256x135, tvregs_4k2k_smpte_30hz},
	{HDMI_101_4096x2160p50_256x135, tvregs_4k2k_smpte_50hz},
	{HDMI_102_4096x2160p60_256x135, tvregs_4k2k_smpte_60hz},
	{HDMI_97_3840x2160p60_16x9, tvregs_4k2k_30hz},
	{HDMI_96_3840x2160p50_16x9, tvregs_4k2k_25hz},
	{HDMI_89_2560x1080p50_64x27, tvregs_2560x1080p50hz},
	{HDMI_90_2560x1080p60_64x27, tvregs_2560x1080p60hz},
	{HDMIV_640x480p60hz, tvregs_vesa_640x480p60hz},
	{HDMIV_800x480p60hz, tvregs_vesa_800x480p60hz},
	{HDMIV_800x600p60hz, tvregs_vesa_800x600p60hz},
	{HDMIV_852x480p60hz, tvregs_vesa_852x480p60hz},
	{HDMIV_854x480p60hz, tvregs_vesa_854x480p60hz},
	{HDMIV_1024x600p60hz, tvregs_vesa_1024x600p60hz},
	{HDMIV_1024x768p60hz, tvregs_vesa_1024x768p60hz},
	{HDMIV_1152x864p75hz, tvregs_vesa_1152x864p75hz},
	{HDMIV_1280x600p60hz, tvregs_vesa_1280x600p60hz},
	{HDMIV_1280x768p60hz, tvregs_vesa_1280x768p60hz},
	{HDMIV_1280x800p60hz, tvregs_vesa_1280x800p60hz},
	{HDMIV_1280x960p60hz, tvregs_vesa_1280x960p60hz},
	{HDMIV_1280x1024p60hz, tvregs_vesa_1280x1024p60hz},
	{HDMIV_1360x768p60hz, tvregs_vesa_1360x768p60hz},
	{HDMIV_1366x768p60hz, tvregs_vesa_1366x768p60hz},
	{HDMIV_1400x1050p60hz, tvregs_vesa_1400x1050p60hz},
	{HDMIV_1440x900p60hz, tvregs_vesa_1440x900p60hz},
	{HDMIV_1440x2560p60hz, tvregs_vesa_1440x2560p60hz},
	{HDMIV_1600x900p60hz, tvregs_vesa_1600x900p60hz},
	{HDMIV_1600x1200p60hz, tvregs_vesa_1600x1200p60hz},
	{HDMIV_1680x1050p60hz, tvregs_vesa_1680x1050p60hz},
	{HDMIV_1920x1200p60hz, tvregs_vesa_1920x1200p60hz},
	{HDMIV_2048x1080p24hz, tvregs_vesa_2048x1080p24hz},
	{HDMIV_2160x1200p90hz, tvregs_vesa_2160x1200p90hz},
	{HDMIV_2560x1440p60hz, tvregs_vesa_2560x1440p60hz},
	{HDMIV_2560x1600p60hz, tvregs_vesa_2560x1600p60hz},
	{HDMIV_3440x1440p60hz, tvregs_vesa_3440x1440p60hz},
	{HDMIV_2400x1200p90hz, tvregs_vesa_2400x1200p90hz},
	{HDMIV_3840x1080p60hz, tvregs_vesa_3840x1080p60hz},
};

/*
 * For 3D FramePacket Setting
 */
static const struct reg_s tvregs_3dfp_1080p60[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0xABD,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x8C9,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0xC0,},
	{P_ENCP_VIDEO_HAVON_END, 0x83F,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x29,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x8C5,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x2C,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x5,},
	{P_ENCP_DVI_HSO_BEGIN, 0x2,},
	{P_ENCP_DVI_HSO_END, 0x2E,},
	{P_ENCP_DVI_VSO_BLINE_EVN, 0x0,},
	{P_ENCP_DVI_VSO_BLINE_ODD, 0x0,},
	{P_ENCP_DVI_VSO_ELINE_EVN, 0x5,},
	{P_ENCP_DVI_VSO_ELINE_ODD, 0x0,},
	{P_ENCP_DVI_VSO_BEGIN_EVN, 0x2,},
	{P_ENCP_DVI_VSO_BEGIN_ODD, 0x0,},
	{P_ENCP_DVI_VSO_END_EVN, 0x2,},
	{P_ENCP_DVI_VSO_END_ODD, 0x0,},
	{P_ENCP_DE_H_BEGIN, 0xC2,},
	{P_ENCP_DE_H_END, 0x842,},
	{P_ENCP_DE_V_BEGIN_EVEN, 0x29,},
	{P_ENCP_DE_V_END_EVEN, 0x8C6,},
	{P_ENCP_DE_V_BEGIN_ODD, 0x0,},
	{P_ENCP_DE_V_END_ODD, 0x0,},

	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_3dfp_1080p24[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0xABD,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x8C9,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0xC0,},
	{P_ENCP_VIDEO_HAVON_END, 0x83F,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x29,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x8C5,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x2C,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x5,},
	{P_ENCP_DVI_HSO_BEGIN, 0x2,},
	{P_ENCP_DVI_HSO_END, 0x2E,},
	{P_ENCP_DVI_VSO_BLINE_EVN, 0x0,},
	{P_ENCP_DVI_VSO_BLINE_ODD, 0x0,},
	{P_ENCP_DVI_VSO_ELINE_EVN, 0x5,},
	{P_ENCP_DVI_VSO_ELINE_ODD, 0x0,},
	{P_ENCP_DVI_VSO_BEGIN_EVN, 0x2,},
	{P_ENCP_DVI_VSO_BEGIN_ODD, 0x0,},
	{P_ENCP_DVI_VSO_END_EVN, 0x2,},
	{P_ENCP_DVI_VSO_END_ODD, 0x0,},
	{P_ENCP_DE_H_BEGIN, 0xC2,},
	{P_ENCP_DE_H_END, 0x842,},
	{P_ENCP_DE_V_BEGIN_EVEN, 0x29,},
	{P_ENCP_DE_V_END_EVEN, 0x8C6,},
	{P_ENCP_DE_V_BEGIN_ODD, 0x0,},
	{P_ENCP_DE_V_END_ODD, 0x0,},

	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_3dfp_1080p50[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0xABD,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x8C9,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0xC0,},
	{P_ENCP_VIDEO_HAVON_END, 0x83F,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x29,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x8C5,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x2C,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x5,},
	{P_ENCP_DVI_HSO_BEGIN, 0x2,},
	{P_ENCP_DVI_HSO_END, 0x2E,},
	{P_ENCP_DVI_VSO_BLINE_EVN, 0x0,},
	{P_ENCP_DVI_VSO_BLINE_ODD, 0x0,},
	{P_ENCP_DVI_VSO_ELINE_EVN, 0x5,},
	{P_ENCP_DVI_VSO_ELINE_ODD, 0x0,},
	{P_ENCP_DVI_VSO_BEGIN_EVN, 0x2,},
	{P_ENCP_DVI_VSO_BEGIN_ODD, 0x0,},
	{P_ENCP_DVI_VSO_END_EVN, 0x2,},
	{P_ENCP_DVI_VSO_END_ODD, 0x0,},
	{P_ENCP_DE_H_BEGIN, 0xC2,},
	{P_ENCP_DE_H_END, 0x842,},
	{P_ENCP_DE_V_BEGIN_EVEN, 0x29,},
	{P_ENCP_DE_V_END_EVEN, 0x8C6,},
	{P_ENCP_DE_V_BEGIN_ODD, 0x0,},
	{P_ENCP_DE_V_END_ODD, 0x0,},

	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_3dfp_720p50[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x7BB,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x5DB,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x104,},
	{P_ENCP_VIDEO_HAVON_END, 0x603,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x19,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x5D6,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x28,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x5,},
	{P_ENCP_DVI_HSO_BEGIN, 0x2,},
	{P_ENCP_DVI_HSO_END, 0x2A,},
	{P_ENCP_DVI_VSO_BLINE_EVN, 0x0,},
	{P_ENCP_DVI_VSO_BLINE_ODD, 0x0,},
	{P_ENCP_DVI_VSO_ELINE_EVN, 0x5,},
	{P_ENCP_DVI_VSO_ELINE_ODD, 0x0,},
	{P_ENCP_DVI_VSO_BEGIN_EVN, 0x2,},
	{P_ENCP_DVI_VSO_BEGIN_ODD, 0x0,},
	{P_ENCP_DVI_VSO_END_EVN, 0x2,},
	{P_ENCP_DVI_VSO_END_ODD, 0x0,},
	{P_ENCP_DE_H_BEGIN, 0x106,},
	{P_ENCP_DE_H_END, 0x606,},
	{P_ENCP_DE_V_BEGIN_EVEN, 0x19,},
	{P_ENCP_DE_V_END_EVEN, 0x5D7,},
	{P_ENCP_DE_V_BEGIN_ODD, 0x0,},
	{P_ENCP_DE_V_END_ODD, 0x0,},

	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

static const struct reg_s tvregs_3dfp_720p60[] = {
	{P_ENCP_VIDEO_EN, 0},
	{P_ENCI_VIDEO_EN, 0},

	{P_ENCP_VIDEO_MODE, 0x4040,},
	{P_ENCP_VIDEO_MODE_ADV, 0x18,},
	{P_ENCP_VIDEO_MAX_PXCNT, 0x671,},
	{P_ENCP_VIDEO_MAX_LNCNT, 0x5DB,},
	{P_ENCP_VIDEO_HAVON_BEGIN, 0x104,},
	{P_ENCP_VIDEO_HAVON_END, 0x603,},
	{P_ENCP_VIDEO_VAVON_BLINE, 0x19,},
	{P_ENCP_VIDEO_VAVON_ELINE, 0x5D6,},
	{P_ENCP_VIDEO_HSO_BEGIN, 0x0,},
	{P_ENCP_VIDEO_HSO_END, 0x28,},
	{P_ENCP_VIDEO_VSO_BEGIN, 0x1E,},
	{P_ENCP_VIDEO_VSO_END, 0x32,},
	{P_ENCP_VIDEO_VSO_BLINE, 0x0,},
	{P_ENCP_VIDEO_VSO_ELINE, 0x5,},
	{P_ENCP_DVI_HSO_BEGIN, 0x2,},
	{P_ENCP_DVI_HSO_END, 0x2A,},
	{P_ENCP_DVI_VSO_BLINE_EVN, 0x0,},
	{P_ENCP_DVI_VSO_BLINE_ODD, 0x0,},
	{P_ENCP_DVI_VSO_ELINE_EVN, 0x5,},
	{P_ENCP_DVI_VSO_ELINE_ODD, 0x0,},
	{P_ENCP_DVI_VSO_BEGIN_EVN, 0x2,},
	{P_ENCP_DVI_VSO_BEGIN_ODD, 0x0,},
	{P_ENCP_DVI_VSO_END_EVN, 0x2,},
	{P_ENCP_DVI_VSO_END_ODD, 0x0,},
	{P_ENCP_DE_H_BEGIN, 0x106,},
	{P_ENCP_DE_H_END, 0x606,},
	{P_ENCP_DE_V_BEGIN_EVEN, 0x19,},
	{P_ENCP_DE_V_END_EVEN, 0x5D7,},
	{P_ENCP_DE_V_BEGIN_ODD, 0x0,},
	{P_ENCP_DE_V_END_ODD, 0x0,},

	{P_ENCI_VIDEO_EN, 0},
	{MREG_END_MARKER, 0},
};

/* Using HDMI VIC as index */
static struct vic_tvregs_set tvregstab_3dfp[] = {
	{HDMI_16_1920x1080p60_16x9, tvregs_3dfp_1080p60},
	{HDMI_34_1920x1080p30_16x9, tvregs_3dfp_1080p60},
	{HDMI_31_1920x1080p50_16x9, tvregs_3dfp_1080p50},
	{HDMI_33_1920x1080p25_16x9, tvregs_3dfp_1080p50},
	{HDMI_32_1920x1080p24_16x9, tvregs_3dfp_1080p24},
	{HDMI_4_1280x720p60_16x9, tvregs_3dfp_720p60},
	{HDMI_19_1280x720p50_16x9, tvregs_3dfp_720p50},
};

static inline void setreg(const struct reg_s *r)
{
	hd_write_reg(r->reg, r->val);
}

static const struct reg_s *tvregs_setting_mode(struct hdmitx_dev *hdev)
{
	int i = 0;
	enum hdmi_vic vic = hdev->tx_comm.fmt_para.vic;

	if (hdev->flag_3dfp) {
		for (i = 0; i < ARRAY_SIZE(tvregstab_3dfp); i++) {
			if (vic == tvregstab_3dfp[i].vic)
				return tvregstab_3dfp[i].reg_setting;
		}
	} else {
		for (i = 0; i < ARRAY_SIZE(tvregstab); i++) {
			if (vic == tvregstab[i].vic)
				return tvregstab[i].reg_setting;
		}
	}

	return NULL;
}

void set_vmode_enc_hw(struct hdmitx_dev *hdev)
{
	const struct reg_s *s = tvregs_setting_mode(hdev);
	/* Turn off VDAC, no need any more for HDMITX */

	/*hd_set_reg_bits(P_VENC_VDAC_SETTING, 0x1f, 0, 5);*/
	if (s) {
		HDMITX_INFO("set enc for VIC: %d\n", hdev->tx_comm.fmt_para.vic);
		while (s->reg != MREG_END_MARKER)
			setreg(s++);
	} else {
		HDMITX_ERROR("set enc not find VIC: %d\n", hdev->tx_comm.fmt_para.vic);
	}
	if (hdev->bist_lock)
		hd_set_reg_bits(P_ENCP_VIDEO_MODE_ADV, 0, 3, 1);
}

