1ffaa1c66SDamon Ding /* 2ffaa1c66SDamon Ding * SPDX-License-Identifier: GPL-2.0+ 3ffaa1c66SDamon Ding * (C) Copyright 2008-2015 Fuzhou Rockchip Electronics Co., Ltd 4ffaa1c66SDamon Ding */ 5ffaa1c66SDamon Ding #ifndef __ROCKCHIP_TVE_H__ 6ffaa1c66SDamon Ding #define __ROCKCHIP_TVE_H__ 7ffaa1c66SDamon Ding 8ffaa1c66SDamon Ding #define RK3036_GRF_SOC_CON3 0x0154 9ffaa1c66SDamon Ding #define RK312X_GRF_TVE_CON 0x0170 10ffaa1c66SDamon Ding #define m_EXTREF_EN BIT(0) 11ffaa1c66SDamon Ding #define m_VBG_EN BIT(1) 12ffaa1c66SDamon Ding #define m_DAC_EN BIT(2) 13ffaa1c66SDamon Ding #define m_SENSE_EN BIT(3) 14ffaa1c66SDamon Ding #define m_BIAS_EN (7 << 4) 15ffaa1c66SDamon Ding #define m_DAC_GAIN (0x3f << 7) 16ffaa1c66SDamon Ding #define v_DAC_GAIN(x) (((x) & 0x3f) << 7) 17ffaa1c66SDamon Ding 18ffaa1c66SDamon Ding #define TV_CTRL (0x00) 19ffaa1c66SDamon Ding #define m_CVBS_MODE BIT(24) 20ffaa1c66SDamon Ding #define m_CLK_UPSTREAM_EN (3 << 18) 21ffaa1c66SDamon Ding #define m_TIMING_EN (3 << 16) 22ffaa1c66SDamon Ding #define m_LUMA_FILTER_GAIN (3 << 9) 23ffaa1c66SDamon Ding #define m_LUMA_FILTER_BW BIT(8) 24ffaa1c66SDamon Ding #define m_CSC_PATH (3 << 1) 25ffaa1c66SDamon Ding 26ffaa1c66SDamon Ding #define v_CVBS_MODE(x) (((x) & 1) << 24) 27ffaa1c66SDamon Ding #define v_CLK_UPSTREAM_EN(x) (((x) & 3) << 18) 28ffaa1c66SDamon Ding #define v_TIMING_EN(x) (((x) & 3) << 16) 29ffaa1c66SDamon Ding #define v_LUMA_FILTER_GAIN(x) (((x) & 3) << 9) 30ffaa1c66SDamon Ding #define v_LUMA_FILTER_UPSAMPLE(x) (((x) & 1) << 8) 31ffaa1c66SDamon Ding #define v_CSC_PATH(x) (((x) & 3) << 1) 32ffaa1c66SDamon Ding 33ffaa1c66SDamon Ding #define TV_SYNC_TIMING (0x04) 34ffaa1c66SDamon Ding #define TV_ACT_TIMING (0x08) 35ffaa1c66SDamon Ding #define TV_ADJ_TIMING (0x0c) 36ffaa1c66SDamon Ding #define TV_FREQ_SC (0x10) 37ffaa1c66SDamon Ding #define TV_LUMA_FILTER0 (0x14) 38ffaa1c66SDamon Ding #define TV_LUMA_FILTER1 (0x18) 39ffaa1c66SDamon Ding #define TV_LUMA_FILTER2 (0x1C) 40ffaa1c66SDamon Ding #define TV_ACT_ST (0x34) 41ffaa1c66SDamon Ding #define TV_ROUTING (0x38) 42ffaa1c66SDamon Ding #define m_DAC_SENSE_EN BIT(27) 43ffaa1c66SDamon Ding #define m_Y_IRE_7_5 BIT(19) 44ffaa1c66SDamon Ding #define m_Y_AGC_PULSE_ON BIT(15) 45ffaa1c66SDamon Ding #define m_Y_VIDEO_ON BIT(11) 46ffaa1c66SDamon Ding #define m_Y_SYNC_ON BIT(7) 47ffaa1c66SDamon Ding #define m_YPP_MODE BIT(3) 48ffaa1c66SDamon Ding #define m_MONO_EN BIT(2) 49ffaa1c66SDamon Ding #define m_PIC_MODE BIT(1) 50ffaa1c66SDamon Ding 51ffaa1c66SDamon Ding #define v_DAC_SENSE_EN(x) (((x) & 1) << 27) 52ffaa1c66SDamon Ding #define v_Y_IRE_7_5(x) (((x) & 1) << 19) 53ffaa1c66SDamon Ding #define v_Y_AGC_PULSE_ON(x) (((x) & 1) << 15) 54ffaa1c66SDamon Ding #define v_Y_VIDEO_ON(x) (((x) & 1) << 11) 55ffaa1c66SDamon Ding #define v_Y_SYNC_ON(x) (((x) & 1) << 7) 56ffaa1c66SDamon Ding #define v_YPP_MODE(x) (((x) & 1) << 3) 57ffaa1c66SDamon Ding #define v_MONO_EN(x) (((x) & 1) << 2) 58ffaa1c66SDamon Ding #define v_PIC_MODE(x) (((x) & 1) << 1) 59ffaa1c66SDamon Ding 60ffaa1c66SDamon Ding #define TV_SYNC_ADJUST (0x50) 61ffaa1c66SDamon Ding #define TV_STATUS (0x54) 62ffaa1c66SDamon Ding #define TV_RESET (0x68) 63ffaa1c66SDamon Ding #define m_RESET BIT(1) 64ffaa1c66SDamon Ding #define v_RESET(x) (((x) & 1) << 1) 65ffaa1c66SDamon Ding #define TV_SATURATION (0x78) 66ffaa1c66SDamon Ding #define TV_BW_CTRL (0x8C) 67ffaa1c66SDamon Ding #define m_CHROMA_BW (3 << 4) 68ffaa1c66SDamon Ding #define m_COLOR_DIFF_BW (0xf) 69ffaa1c66SDamon Ding 70ffaa1c66SDamon Ding enum { 71ffaa1c66SDamon Ding BP_FILTER_PASS = 0, 72ffaa1c66SDamon Ding BP_FILTER_NTSC, 73ffaa1c66SDamon Ding BP_FILTER_PAL, 74ffaa1c66SDamon Ding }; 75ffaa1c66SDamon Ding enum { 76ffaa1c66SDamon Ding COLOR_DIFF_FILTER_OFF = 0, 77ffaa1c66SDamon Ding COLOR_DIFF_FILTER_BW_0_6, 78ffaa1c66SDamon Ding COLOR_DIFF_FILTER_BW_1_3, 79ffaa1c66SDamon Ding COLOR_DIFF_FILTER_BW_2_0 80ffaa1c66SDamon Ding }; 81ffaa1c66SDamon Ding 82ffaa1c66SDamon Ding #define v_CHROMA_BW(x) ((3 & (x)) << 4) 83ffaa1c66SDamon Ding #define v_COLOR_DIFF_BW(x) (0xF & (x)) 84ffaa1c66SDamon Ding 85ffaa1c66SDamon Ding #define TV_BRIGHTNESS_CONTRAST (0x90) 86ffaa1c66SDamon Ding 87ffaa1c66SDamon Ding #define VDAC_VDAC0 (0x00) 88ffaa1c66SDamon Ding #define m_RST_ANA BIT(7) 89ffaa1c66SDamon Ding #define m_RST_DIG BIT(6) 90ffaa1c66SDamon Ding 91ffaa1c66SDamon Ding #define v_RST_ANA(x) (((x) & 1) << 7) 92ffaa1c66SDamon Ding #define v_RST_DIG(x) (((x) & 1) << 6) 93ffaa1c66SDamon Ding #define VDAC_VDAC1 (0x280) 94ffaa1c66SDamon Ding #define m_CUR_REG (0xf << 4) 95ffaa1c66SDamon Ding #define m_DR_PWR_DOWN BIT(1) 96ffaa1c66SDamon Ding #define m_BG_PWR_DOWN BIT(0) 97ffaa1c66SDamon Ding 98ffaa1c66SDamon Ding #define v_CUR_REG(x) (((x) & 0xf) << 4) 99ffaa1c66SDamon Ding #define v_DR_PWR_DOWN(x) (((x) & 1) << 1) 100ffaa1c66SDamon Ding #define v_BG_PWR_DOWN(x) (((x) & 1) << 0) 101ffaa1c66SDamon Ding #define VDAC_VDAC2 (0x284) 102ffaa1c66SDamon Ding #define m_CUR_CTR (0X3f) 103ffaa1c66SDamon Ding 104ffaa1c66SDamon Ding #define v_CUR_CTR(x) (((x) & 0x3f)) 105ffaa1c66SDamon Ding #define VDAC_VDAC3 (0x288) 106ffaa1c66SDamon Ding #define m_CAB_EN BIT(5) 107ffaa1c66SDamon Ding #define m_CAB_REF BIT(4) 108ffaa1c66SDamon Ding #define m_CAB_FLAG BIT(0) 109ffaa1c66SDamon Ding 110ffaa1c66SDamon Ding #define v_CAB_EN(x) (((x) & 1) << 5) 111ffaa1c66SDamon Ding #define v_CAB_REF(x) (((x) & 1) << 4) 112ffaa1c66SDamon Ding #define v_CAB_FLAG(x) (((x) & 1) << 0) 113ffaa1c66SDamon Ding 114ffaa1c66SDamon Ding // RK3528 CVBS GRF 115ffaa1c66SDamon Ding #define RK3528_VO_GRF_VDAC_DIS 0x60000 116ffaa1c66SDamon Ding #define m_VDAC_DIS_NEGE_ST BIT(2) 117ffaa1c66SDamon Ding #define m_VDAC_DIS_POSE_ST BIT(1) 118ffaa1c66SDamon Ding #define m_STAT_VDAC_DISDET BIT(0) 119ffaa1c66SDamon Ding 120ffaa1c66SDamon Ding #define v_VDAC_DIS_NEGE_ST(x) (((x) & 1) << 2) 121ffaa1c66SDamon Ding #define v_VDAC_DIS_POSE_ST(x) (((x) & 1) << 1) 122ffaa1c66SDamon Ding #define v_STAT_VDAC_DISDET(x) (((x) & 1) << 0) 123ffaa1c66SDamon Ding 124ffaa1c66SDamon Ding #define RK3528_VO_GRF_CVBS_CON 0x60010 125ffaa1c66SDamon Ding #define m_VDAC_DIS_INT_EN BIT(8) 126ffaa1c66SDamon Ding #define m_VDAC_DIS_NEGE_MASK BIT(7) 127ffaa1c66SDamon Ding #define m_VDAC_DIS_POSE_MASK BIT(6) 128ffaa1c66SDamon Ding #define m_TVE_DCLK_POL BIT(5) 129ffaa1c66SDamon Ding #define m_TVE_DCLK_EN BIT(4) 130ffaa1c66SDamon Ding #define m_DCLK_UPSAMPLE_2X4X BIT(3) 131ffaa1c66SDamon Ding #define m_DCLK_UPSAMPLE_EN BIT(2) 132ffaa1c66SDamon Ding #define m_TVE_MODE BIT(1) 133ffaa1c66SDamon Ding #define m_TVE_EN BIT(0) 134ffaa1c66SDamon Ding 135ffaa1c66SDamon Ding #define v_VDAC_DIS_INT_EN(x) (((x) & 1) << 8) 136ffaa1c66SDamon Ding #define v_VDAC_DIS_NEGE_MASK(x) (((x) & 1) << 7) 137ffaa1c66SDamon Ding #define v_VDAC_DIS_POSE_MASK(x) (((x) & 1) << 6) 138ffaa1c66SDamon Ding #define v_TVE_DCLK_POL(x) (((x) & 1) << 5) 139ffaa1c66SDamon Ding #define v_TVE_DCLK_EN(x) (((x) & 1) << 4) 140ffaa1c66SDamon Ding #define v_DCLK_UPSAMPLE_2X4X(x) (((x) & 1) << 3) 141ffaa1c66SDamon Ding #define v_DCLK_UPSAMPLE_EN(x) (((x) & 1) << 2) 142ffaa1c66SDamon Ding #define v_TVE_MODE(x) (((x) & 1) << 1) 143ffaa1c66SDamon Ding #define v_TVE_EN(x) (((x) & 1) << 0) 144ffaa1c66SDamon Ding 145ffaa1c66SDamon Ding // RK3528 CVBS TVE 146ffaa1c66SDamon Ding #define BT656_DECODER_CTRL (0x3D00) 147ffaa1c66SDamon Ding #define BT656_DECODER_CROP (0x3D04) 148ffaa1c66SDamon Ding #define BT656_DECODER_SIZE (0x3D08) 149ffaa1c66SDamon Ding #define BT656_DECODER_HTOTAL_HS_END (0x3D0C) 150ffaa1c66SDamon Ding #define BT656_DECODER_VACT_ST_HACT_ST (0x3D10) 151ffaa1c66SDamon Ding #define BT656_DECODER_VTOTAL_VS_END (0x3D14) 152ffaa1c66SDamon Ding #define BT656_DECODER_VS_ST_END_F1 (0x3D18) 153ffaa1c66SDamon Ding #define BT656_DECODER_DBG_REG (0x3D1C) 154ffaa1c66SDamon Ding #define TVE_MODE_CTRL (0x3E00) 155ffaa1c66SDamon Ding #define TVE_HOR_TIMING1 (0x3E04) 156ffaa1c66SDamon Ding #define TVE_HOR_TIMING2 (0x3E08) 157ffaa1c66SDamon Ding #define TVE_HOR_TIMING3 (0x3E0C) 158ffaa1c66SDamon Ding #define TVE_SUB_CAR_FRQ (0x3E10) 159ffaa1c66SDamon Ding #define TVE_LUMA_FILTER1 (0x3E14) 160ffaa1c66SDamon Ding #define TVE_LUMA_FILTER2 (0x3E18) 161ffaa1c66SDamon Ding #define TVE_LUMA_FILTER3 (0x3E1C) 162ffaa1c66SDamon Ding #define TVE_LUMA_FILTER4 (0x3E20) 163ffaa1c66SDamon Ding #define TVE_LUMA_FILTER5 (0x3E24) 164ffaa1c66SDamon Ding #define TVE_LUMA_FILTER6 (0x3E28) 165ffaa1c66SDamon Ding #define TVE_LUMA_FILTER7 (0x3E2C) 166ffaa1c66SDamon Ding #define TVE_LUMA_FILTER8 (0x3E30) 167ffaa1c66SDamon Ding #define TVE_IMAGE_POSITION (0x3E34) 168ffaa1c66SDamon Ding #define TVE_ROUTING (0x3E38) 169ffaa1c66SDamon Ding #define TVE_SYNC_ADJUST (0x3E50) 170ffaa1c66SDamon Ding #define TVE_STATUS (0x3E54) 171ffaa1c66SDamon Ding #define TVE_CTRL (0x3E68) 172ffaa1c66SDamon Ding #define TVE_INTR_STATUS (0x3E6C) 173ffaa1c66SDamon Ding #define TVE_INTR_EN (0x3E70) 174ffaa1c66SDamon Ding #define TVE_INTR_CLR (0x3E74) 175ffaa1c66SDamon Ding #define TVE_COLOR_BUSRT_SAT (0x3E78) 176ffaa1c66SDamon Ding #define TVE_CHROMA_BANDWIDTH (0x3E8C) 177ffaa1c66SDamon Ding #define TVE_BRIGHTNESS_CONTRAST (0x3E90) 178ffaa1c66SDamon Ding #define TVE_ID (0x3E98) 179ffaa1c66SDamon Ding #define TVE_REVISION (0x3E9C) 180ffaa1c66SDamon Ding #define TVE_CLAMP (0x3EA0) 181ffaa1c66SDamon Ding 182ffaa1c66SDamon Ding // RK3528 CVBS VDAC 183ffaa1c66SDamon Ding #define VDAC_CLK_RST (0x0000) 184ffaa1c66SDamon Ding #define m_ANALOG_RST BIT(7) 185ffaa1c66SDamon Ding #define m_DIGITAL_RST BIT(6) 186ffaa1c66SDamon Ding #define m_INPUT_CLK_INV BIT(0) 187ffaa1c66SDamon Ding 188ffaa1c66SDamon Ding #define v_ANALOG_RST(x) (((x) & 1) << 7) 189ffaa1c66SDamon Ding #define v_DIGITAL_RST(x) (((x) & 1) << 6) 190ffaa1c66SDamon Ding #define v_INPUT_CLK_INV(x) (((x) & 1) << 0) 191ffaa1c66SDamon Ding #define VDAC_SINE_CTRL (0x0004) 192ffaa1c66SDamon Ding #define VDAC_SQUARE_CTRL (0x0008) 193ffaa1c66SDamon Ding #define VDAC_LEVEL_CTRL0 (0x0018) 194ffaa1c66SDamon Ding #define VDAC_LEVEL_CTRL1 (0x001C) 195ffaa1c66SDamon Ding #define VDAC_PWM_REF_CTRL (0x0280) 196ffaa1c66SDamon Ding #define m_REF_VOLTAGE (0xf << 4) 197ffaa1c66SDamon Ding #define m_REF_RESISTOR BIT(3) 198ffaa1c66SDamon Ding #define m_SMP_CLK_INV BIT(2) 199ffaa1c66SDamon Ding #define m_DAC_PWN BIT(1) 200ffaa1c66SDamon Ding #define m_BIAS_PWN BIT(0) 201ffaa1c66SDamon Ding 202ffaa1c66SDamon Ding #define v_REF_VOLTAGE(x) (((x) & 0xf) << 4) 203ffaa1c66SDamon Ding #define v_SMP_CLK_INV(x) (((x) & 1) << 2) 204ffaa1c66SDamon Ding #define v_REF_RESISTOR(x) (((x) & 1) << 3) 205ffaa1c66SDamon Ding #define v_DAC_PWN(x) (((x) & 1) << 1) 206ffaa1c66SDamon Ding #define v_BIAS_PWN(x) (((x) & 1) << 0) 207ffaa1c66SDamon Ding #define VDAC_CURRENT_CTRL (0x0284) 208*38729a08SDamon Ding #define m_OUT_CURRENT (0xff << 0) 209*38729a08SDamon Ding 210*38729a08SDamon Ding #define v_OUT_CURRENT(x) (((x) & 0xff) << 0) 211ffaa1c66SDamon Ding #define VDAC_CABLE_CTRL (0x0288) 212ffaa1c66SDamon Ding #define VDAC_VOLTAGE_CTRL (0x028C) 213ffaa1c66SDamon Ding #define VDAC_BIAS_CLK_CTRL0 (0x0290) 214ffaa1c66SDamon Ding #define VDAC_BIAS_CLK_CTRL1 (0x0294) 215ffaa1c66SDamon Ding #define VDAC_AUTO_CLK_CTRL0 (0x0298) 216ffaa1c66SDamon Ding #define VDAC_AUTO_CLK_CTRL1 (0x029C) 217ffaa1c66SDamon Ding 218ffaa1c66SDamon Ding enum { 219ffaa1c66SDamon Ding TVOUT_CVBS_NTSC = 0, 220ffaa1c66SDamon Ding TVOUT_CVBS_PAL, 221ffaa1c66SDamon Ding }; 222ffaa1c66SDamon Ding 223ffaa1c66SDamon Ding enum { 224ffaa1c66SDamon Ding INPUT_FORMAT_RGB = 0, 225ffaa1c66SDamon Ding INPUT_FORMAT_YUV 226ffaa1c66SDamon Ding }; 227ffaa1c66SDamon Ding 228ffaa1c66SDamon Ding enum { 229ffaa1c66SDamon Ding SOC_RK3036 = 0, 230ffaa1c66SDamon Ding SOC_RK312X, 231ffaa1c66SDamon Ding SOC_RK322X, 232ffaa1c66SDamon Ding SOC_RK3328, 233ffaa1c66SDamon Ding SOC_RK3528 234ffaa1c66SDamon Ding }; 235ffaa1c66SDamon Ding 236ffaa1c66SDamon Ding 237ffaa1c66SDamon Ding enum { 238ffaa1c66SDamon Ding DCLK_UPSAMPLEx1 = 0, 239ffaa1c66SDamon Ding DCLK_UPSAMPLEx2, 240ffaa1c66SDamon Ding DCLK_UPSAMPLEx4 241ffaa1c66SDamon Ding }; 242ffaa1c66SDamon Ding 243ffaa1c66SDamon Ding #define RK30_TVE_REGBASE 0x10118000 + 0x200 244ffaa1c66SDamon Ding #define MAX_TVE_COUNT 2 245ffaa1c66SDamon Ding 246ffaa1c66SDamon Ding #ifdef TVEDEBUG 247ffaa1c66SDamon Ding #define TVEDBG(format, ...) \ 248ffaa1c66SDamon Ding printf("TVE: " format, ## __VA_ARGS__) 249ffaa1c66SDamon Ding #else 250ffaa1c66SDamon Ding #define TVEDBG(format, ...) 251ffaa1c66SDamon Ding #endif 252ffaa1c66SDamon Ding 253ffaa1c66SDamon Ding #endif /* __ROCKCHIP_TVE_H__ */ 254