| /* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */ |
| /* |
| * arch/arm/cpu/armv8/axg/hdmitx20/hdmitx_tvenc.c |
| * |
| * Copyright (C) 2020 Amlogic, Inc. All rights reserved. |
| * |
| */ |
| |
| #include "mach_reg.h" |
| #include "hdmitx_tvenc.h" |
| |
| #define MREG_END_MARKER 0xFFFF |
| |
| static const struct reg_t 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, 0x0019}, |
| {P_ENCP_VIDEO_YFP1_HTIME, 648}, |
| {P_ENCP_VIDEO_YFP2_HTIME, 3207}, |
| {P_ENCP_VIDEO_MAX_PXCNT, 3299}, |
| {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, 648}, |
| {P_ENCP_VIDEO_HAVON_END, 3207}, |
| {P_ENCP_VIDEO_VAVON_BLINE, 29}, |
| {P_ENCP_VIDEO_VAVON_ELINE, 748}, |
| {P_ENCP_VIDEO_HSO_BEGIN, 256}, |
| {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_ENCP_VIDEO_EN, 1}, |
| {P_ENCI_VIDEO_EN, 0}, |
| {MREG_END_MARKER, 0}, |
| }; |
| |
| static const struct reg_t tvregs_720p_50hz[] = { |
| {P_ENCP_VIDEO_EN, 0}, |
| {P_ENCI_VIDEO_EN, 0}, |
| {P_VENC_DVI_SETTING, 0x202d}, |
| {P_ENCP_VIDEO_MAX_PXCNT, 3959}, |
| {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, 648}, |
| {P_ENCP_VIDEO_HAVON_END, 3207}, |
| {P_ENCP_VIDEO_HSO_BEGIN, 128}, |
| {P_ENCP_VIDEO_HSO_END, 208}, |
| {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, 29}, |
| {P_ENCP_VIDEO_VAVON_ELINE, 748}, |
| {P_ENCP_VIDEO_VSO_BEGIN, 128}, |
| {P_ENCP_VIDEO_VSO_END, 128}, |
| {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, 0x0019}, |
| {P_ENCP_VIDEO_SYNC_MODE, 0x407}, |
| {P_ENCP_VIDEO_YC_DLY, 0}, |
| {P_ENCP_VIDEO_EN, 1}, |
| {P_ENCI_VIDEO_EN, 0}, |
| {MREG_END_MARKER, 0}, |
| }; |
| |
| static const struct reg_t 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_ENCP_VIDEO_EN, 0}, |
| {P_ENCI_VIDEO_EN, 1}, |
| {MREG_END_MARKER, 0}, |
| }; |
| |
| static const struct reg_t 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, 9}, |
| {P_ENCP_VIDEO_YFP1_HTIME, 244}, |
| {P_ENCP_VIDEO_YFP2_HTIME, 1630}, |
| {P_ENCP_VIDEO_MAX_PXCNT, 1715}, |
| {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, 249}, |
| {P_ENCP_VIDEO_HAVON_END, 1689}, |
| {P_ENCP_VIDEO_VAVON_BLINE, 42}, |
| {P_ENCP_VIDEO_VAVON_ELINE, 521}, |
| {P_ENCP_VIDEO_SYNC_MODE, 0x07}, |
| {P_VENC_VIDEO_PROG_MODE, 0x0}, |
| {P_ENCP_VIDEO_HSO_BEGIN, 0x3}, |
| {P_ENCP_VIDEO_HSO_END, 0x5}, |
| {P_ENCP_VIDEO_VSO_BEGIN, 0x3}, |
| {P_ENCP_VIDEO_VSO_END, 0x5}, |
| {P_ENCP_VIDEO_VSO_BLINE, 0}, |
| {P_ENCP_VIDEO_SY_VAL, 8}, |
| {P_ENCP_VIDEO_SY2_VAL, 0x1d8}, |
| {P_ENCI_VIDEO_EN, 0}, |
| {P_ENCP_VIDEO_EN, 1}, |
| {MREG_END_MARKER, 0}, |
| }; |
| |
| static const struct reg_t 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_ENCP_VIDEO_EN, 0}, |
| {P_ENCI_VIDEO_EN, 1}, |
| {MREG_END_MARKER, 0}, |
| }; |
| |
| static const struct reg_t 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, 9}, |
| {P_ENCP_VIDEO_YFP1_HTIME, 235}, |
| {P_ENCP_VIDEO_YFP2_HTIME, 1674}, |
| {P_ENCP_VIDEO_MAX_PXCNT, 1727}, |
| {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, 235}, |
| {P_ENCP_VIDEO_HAVON_END, 1674}, |
| {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, 0x80}, |
| {P_ENCP_VIDEO_HSO_END, 0x0}, |
| {P_ENCP_VIDEO_VSO_BEGIN, 0x0}, |
| {P_ENCP_VIDEO_VSO_END, 0x5}, |
| {P_ENCP_VIDEO_VSO_BLINE, 0}, |
| {P_ENCP_VIDEO_SY_VAL, 8}, |
| {P_ENCP_VIDEO_SY2_VAL, 0x1d8}, |
| {P_ENCI_VIDEO_EN, 0}, |
| {P_ENCP_VIDEO_EN, 1}, |
| {MREG_END_MARKER, 0}, |
| }; |
| |
| static const struct reg_t tvregs_1080i[] = { |
| {P_ENCP_VIDEO_EN, 0}, |
| {P_ENCI_VIDEO_EN, 0}, |
| {P_VENC_DVI_SETTING, 0x2029}, |
| {P_ENCP_VIDEO_MAX_PXCNT, 4399}, |
| {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, 516}, |
| {P_ENCP_VIDEO_HAVON_END, 4355}, |
| {P_ENCP_VIDEO_HSO_BEGIN, 264}, |
| {P_ENCP_VIDEO_HSO_END, 176}, |
| {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, 88}, |
| {P_ENCP_VIDEO_VSO_END, 88}, |
| {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, 0x0019}, |
| {P_ENCP_VIDEO_SYNC_MODE, 0x207}, |
| {P_ENCI_VIDEO_EN, 0}, |
| {P_ENCP_VIDEO_EN, 1}, |
| {MREG_END_MARKER, 0}, |
| }; |
| |
| static const struct reg_t tvregs_1080i_50hz[] = { |
| {P_ENCP_VIDEO_EN, 0}, |
| {P_ENCI_VIDEO_EN, 0}, |
| {P_VENC_DVI_SETTING, 0x202d}, |
| {P_ENCP_VIDEO_MAX_PXCNT, 5279}, |
| {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, 526}, |
| {P_ENCP_VIDEO_HAVON_END, 4365}, |
| {P_ENCP_VIDEO_HSO_BEGIN, 142}, |
| {P_ENCP_VIDEO_HSO_END, 230}, |
| {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, 142}, |
| {P_ENCP_VIDEO_VSO_END, 142}, |
| {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, 0x0019}, |
| {P_ENCP_VIDEO_SYNC_MODE, 0x7}, |
| {P_ENCI_VIDEO_EN, 0}, |
| {P_ENCP_VIDEO_EN, 1}, |
| {MREG_END_MARKER, 0}, |
| }; |
| |
| static const struct reg_t 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, 41}, |
| {P_ENCP_VIDEO_VAVON_ELINE, 1120}, |
| {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}, |
| {P_ENCP_VIDEO_EN, 1}, |
| {MREG_END_MARKER, 0}, |
| }; |
| |
| static const struct reg_t 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}, |
| {P_ENCP_VIDEO_EN, 1}, |
| {MREG_END_MARKER, 0}, |
| }; |
| |
| static const struct reg_t 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}, |
| {P_ENCP_VIDEO_EN, 1}, |
| {MREG_END_MARKER, 0}, |
| }; |
| |
| static const struct reg_t 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_ENCP_VIDEO_EN, 1}, |
| {P_ENCI_VIDEO_EN, 0}, |
| {MREG_END_MARKER, 0}, |
| }; |
| |
| static const struct reg_t 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_ENCP_VIDEO_EN, 1}, |
| {P_ENCI_VIDEO_EN, 0}, |
| {MREG_END_MARKER, 0}, |
| }; |
| |
| static const struct reg_t 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_ENCP_VIDEO_EN, 1}, |
| {P_ENCI_VIDEO_EN, 0}, |
| {MREG_END_MARKER, 0}, |
| }; |
| |
| static const struct reg_t 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_ENCP_VIDEO_EN, 1}, |
| {P_ENCI_VIDEO_EN, 0}, |
| {MREG_END_MARKER, 0}, |
| }; |
| |
| static const struct reg_t 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_ENCP_VIDEO_EN, 1}, |
| {P_ENCI_VIDEO_EN, 0}, |
| {MREG_END_MARKER, 0}, |
| }; |
| |
| static const struct reg_t 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_ENCP_VIDEO_EN, 1}, |
| {P_ENCI_VIDEO_EN, 0}, |
| {MREG_END_MARKER, 0}, |
| }; |
| |
| struct vic_tvregs_set { |
| enum hdmi_vic vic; |
| const struct reg_t *reg_setting; |
| }; |
| |
| /* Using HDMI vic as index */ |
| static struct vic_tvregs_set tvregsTab[] = { |
| {HDMI_720x480i60_16x9, tvregs_480i}, |
| {HDMI_2880x480i60_16x9, tvregs_480i}, |
| {HDMI_720x480p60_16x9, tvregs_480p}, |
| {HDMI_2880x240p60_16x9, tvregs_480p}, |
| {HDMI_720x576i50_16x9, tvregs_576i}, |
| {HDMI_2880x576i50_16x9, tvregs_576i}, |
| {HDMI_720x576p50_16x9, tvregs_576p}, |
| {HDMI_2880x576p50_16x9, tvregs_576p}, |
| {HDMI_1280x720p60_16x9, tvregs_720p}, |
| {HDMI_1920x1080i60_16x9, tvregs_1080i}, |
| {HDMI_1920x1080p60_16x9, tvregs_1080p}, |
| {HDMI_1920x1080p30_16x9, tvregs_1080p}, |
| {HDMI_1280x720p50_16x9, tvregs_720p_50hz}, |
| {HDMI_1920x1080i50_16x9, tvregs_1080i_50hz}, |
| {HDMI_1920x1080p50_16x9, tvregs_1080p_50hz}, |
| {HDMI_1920x1080p25_16x9, tvregs_1080p_50hz}, |
| {HDMI_1920x1080p24_16x9, tvregs_1080p_24hz}, |
| {HDMI_3840x2160p30_16x9, tvregs_4k2k_30hz}, |
| {HDMI_3840x2160p25_16x9, tvregs_4k2k_25hz}, |
| {HDMI_3840x2160p24_16x9, tvregs_4k2k_24hz}, |
| {HDMI_4096x2160p24_256x135, tvregs_4k2k_smpte}, |
| {HDMI_4096x2160p25_256x135, tvregs_4k2k_smpte_25hz}, |
| {HDMI_4096x2160p30_256x135, tvregs_4k2k_smpte_30hz}, |
| {HDMI_4096x2160p50_256x135, tvregs_4k2k_smpte_25hz}, |
| {HDMI_4096x2160p60_256x135, tvregs_4k2k_smpte_30hz}, |
| {HDMI_3840x2160p60_16x9, tvregs_4k2k_30hz}, |
| {HDMI_3840x2160p50_16x9, tvregs_4k2k_25hz}, |
| }; |
| |
| static inline void setreg(const struct reg_t *r) |
| { |
| hd_write_reg(r->reg, r->val); |
| /* printk("[0x%x] = 0x%x\n", r->reg, r->val); */ |
| } |
| |
| static const struct reg_t *tvregs_setting_mode(enum hdmi_vic vic) |
| { |
| int i = 0; |
| 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(enum hdmi_vic vic) |
| { |
| const struct reg_t *s = tvregs_setting_mode(vic); |
| |
| if (s) { |
| pr_info("hdmitx: set enc for VIC: %d\n", vic); |
| while (MREG_END_MARKER != s->reg) |
| setreg(s++); |
| } else |
| pr_info("hdmitx: not find VIC: %d\n", vic); |
| } |