1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (c) 2022 Rockchip Electronics Co. Ltd. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * it66353 HDMI 3 in 1 out driver. 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Author: Kenneth.Hung@ite.com.tw 8*4882a593Smuzhiyun * Wangqiang Guo <kay.guo@rock-chips.com> 9*4882a593Smuzhiyun * Version: IT66353_SAMPLE_1.08 10*4882a593Smuzhiyun * 11*4882a593Smuzhiyun */ 12*4882a593Smuzhiyun #ifndef _IT66353_DRV_H_ 13*4882a593Smuzhiyun #define _IT66353_DRV_H_ 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #include "platform.h" 16*4882a593Smuzhiyun #include "it66353.h" 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #define RX_PORT_0 0 19*4882a593Smuzhiyun #define RX_PORT_1 1 20*4882a593Smuzhiyun #define RX_PORT_2 2 21*4882a593Smuzhiyun #define RX_PORT_3 3 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun #define TRUE 1 24*4882a593Smuzhiyun #define FALSE 0 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun #define DDCWAITTIME 5 27*4882a593Smuzhiyun #define DDCWAITNUM 10 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun #define RX_PORT_COUNT 4 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun // for it66353_rx_term_power_down 32*4882a593Smuzhiyun #define CH0_OFF (0x10) 33*4882a593Smuzhiyun #define CH1_OFF (0x20) 34*4882a593Smuzhiyun #define CH2_OFF (0x40) 35*4882a593Smuzhiyun #define CLK_OFF (0x80) 36*4882a593Smuzhiyun #define ALLCH_OFF (0xF0) 37*4882a593Smuzhiyun #define ALLCH_ON (0x00) 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun /* =================================================== 40*4882a593Smuzhiyun * config: 41*4882a593Smuzhiyun * =================================================== 42*4882a593Smuzhiyun * 43*4882a593Smuzhiyun * RCLKFreqSel => 0: 20MHz, 1: 10MHz, 2: 5MHz, 3: 2.5MHz 44*4882a593Smuzhiyun */ 45*4882a593Smuzhiyun #define RCLKFreqSel 0 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun typedef enum { 48*4882a593Smuzhiyun RX_TOGGLE_HPD, 49*4882a593Smuzhiyun RX_PORT_CHANGE, 50*4882a593Smuzhiyun TX_OUTPUT, 51*4882a593Smuzhiyun TX_OUTPUT_PREPARE, 52*4882a593Smuzhiyun RX_CHECK_EQ, 53*4882a593Smuzhiyun SETUP_AFE, 54*4882a593Smuzhiyun RX_WAIT_CLOCK, 55*4882a593Smuzhiyun RX_HPD, 56*4882a593Smuzhiyun TX_GOT_HPD, 57*4882a593Smuzhiyun TX_WAIT_HPD, 58*4882a593Smuzhiyun TX_UNPLUG, 59*4882a593Smuzhiyun RX_UNPLUG, 60*4882a593Smuzhiyun IDLE, 61*4882a593Smuzhiyun } _SYS_FSM_STATE; 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun enum { 64*4882a593Smuzhiyun HDMI_MODE_AUTO, 65*4882a593Smuzhiyun HDMI_MODE_14, 66*4882a593Smuzhiyun HDMI_MODE_20, 67*4882a593Smuzhiyun }; 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun enum { 70*4882a593Smuzhiyun EQ_MODE_H14, 71*4882a593Smuzhiyun EQ_MODE_H20, 72*4882a593Smuzhiyun }; 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun typedef enum { 76*4882a593Smuzhiyun DEV_DEVICE_LOOP, 77*4882a593Smuzhiyun DEV_DEVICE_INIT, 78*4882a593Smuzhiyun DEV_WAIT_DEVICE_READY, 79*4882a593Smuzhiyun DEV_FW_VAR_INIT, 80*4882a593Smuzhiyun DEV_WAIT_RESET, 81*4882a593Smuzhiyun } _DEV_FSM_STATE; 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun typedef enum { 84*4882a593Smuzhiyun AEQ_OFF, 85*4882a593Smuzhiyun AEQ_START, 86*4882a593Smuzhiyun AEQ_CHECK_SAREQ_RESULT, 87*4882a593Smuzhiyun AEQ_APPLY_SAREQ, 88*4882a593Smuzhiyun AEQ_DONE, 89*4882a593Smuzhiyun AEQ_FAIL, 90*4882a593Smuzhiyun AEQ_MAX, 91*4882a593Smuzhiyun } _AEQ_FSM_STATE; 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun typedef enum { 94*4882a593Smuzhiyun EQRES_UNKNOWN, 95*4882a593Smuzhiyun EQRES_BUSY, 96*4882a593Smuzhiyun EQRES_SAREQ_DONE, 97*4882a593Smuzhiyun EQRES_SAREQ_FAIL, 98*4882a593Smuzhiyun EQRES_SAREQ_TIMEOUT, 99*4882a593Smuzhiyun EQRES_H14EQ_DONE, 100*4882a593Smuzhiyun EQRES_H14EQ_FAIL, 101*4882a593Smuzhiyun EQRES_H14EQ_TIMEOUT, 102*4882a593Smuzhiyun EQRES_DONE, 103*4882a593Smuzhiyun } _EQ_RESULT_TYPE; 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun typedef enum { 106*4882a593Smuzhiyun SysAEQ_OFF, 107*4882a593Smuzhiyun SysAEQ_RUN, 108*4882a593Smuzhiyun SysAEQ_DONE, 109*4882a593Smuzhiyun } _SYS_AEQ_TYPE; 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun enum { 112*4882a593Smuzhiyun EDID_SRC_EXT_SINK, 113*4882a593Smuzhiyun EDID_SRC_INTERNAL, 114*4882a593Smuzhiyun }; 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun enum { 117*4882a593Smuzhiyun TERM_LOW, 118*4882a593Smuzhiyun TERM_HIGH, 119*4882a593Smuzhiyun TERM_FOLLOW_TX, 120*4882a593Smuzhiyun TERM_FOLLOW_HPD, 121*4882a593Smuzhiyun }; 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun #define EDID_PORT_0 0x01 124*4882a593Smuzhiyun #define EDID_PORT_1 0x02 125*4882a593Smuzhiyun #define EDID_PORT_2 0x04 126*4882a593Smuzhiyun #define EDID_PORT_3 0x08 127*4882a593Smuzhiyun #define EDID_PORT_ALL (EDID_PORT_0 | EDID_PORT_1 | EDID_PORT_2 | EDID_PORT_3) 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun /* 130*4882a593Smuzhiyun * for it66353_get_port_info0() 131*4882a593Smuzhiyun */ 132*4882a593Smuzhiyun #define PI_5V (BIT(0)) 133*4882a593Smuzhiyun #define PI_HDMI_MODE (BIT(1)) 134*4882a593Smuzhiyun #define PI_CLK_DET (BIT(2)) 135*4882a593Smuzhiyun #define PI_CLK_VALID (BIT(3)) 136*4882a593Smuzhiyun #define PI_CLK_STABLE (BIT(4)) 137*4882a593Smuzhiyun #define PI_PLL_LOCK (BIT(5)) 138*4882a593Smuzhiyun // #define PI_XX (BIT(6)) 139*4882a593Smuzhiyun #define PI_SYM_LOCK (BIT(7)) 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun /* 142*4882a593Smuzhiyun * for it66353_get_port_info1() 143*4882a593Smuzhiyun */ 144*4882a593Smuzhiyun #define PI_PLL_HS1G 0x01 145*4882a593Smuzhiyun // #define PI_PLL_HS1G (BIT0) 146*4882a593Smuzhiyun 147*4882a593Smuzhiyun typedef struct { 148*4882a593Smuzhiyun // TxSwap 149*4882a593Smuzhiyun u8 EnTxPNSwap; 150*4882a593Smuzhiyun u8 EnTxChSwap; 151*4882a593Smuzhiyun u8 EnTxVCLKInv; 152*4882a593Smuzhiyun u8 EnTxOutD1t; 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun u8 EnRxDDCBypass; 155*4882a593Smuzhiyun u8 EnRxPWR5VBypass; 156*4882a593Smuzhiyun u8 EnRxHPDBypass; 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun u8 EnCEC; 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun u8 EnableAutoEQ; 161*4882a593Smuzhiyun u8 ParseEDIDFromSink; 162*4882a593Smuzhiyun u8 NonActivePortReplyHPD; 163*4882a593Smuzhiyun u8 DisableEdidRam; 164*4882a593Smuzhiyun u8 TryFixedEQFirst; 165*4882a593Smuzhiyun u8 TurnOffTx5VWhenSwitchPort; 166*4882a593Smuzhiyun u8 FixIncorrectHdmiEnc; 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun } IT6635_DEVICE_OPTION_INT; 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun typedef struct { 171*4882a593Smuzhiyun u8 tag1; 172*4882a593Smuzhiyun u8 EnRxDDCBypass; 173*4882a593Smuzhiyun u8 EnRxPWR5VBypass; 174*4882a593Smuzhiyun u8 EnRxHPDBypass; 175*4882a593Smuzhiyun u8 TryFixedEQFirst; 176*4882a593Smuzhiyun u8 EnableAutoEQ; 177*4882a593Smuzhiyun u8 NonActivePortReplyHPD; 178*4882a593Smuzhiyun u8 DisableEdidRam; 179*4882a593Smuzhiyun u8 DefaultEQ[3]; 180*4882a593Smuzhiyun u8 FixIncorrectHdmiEnc; 181*4882a593Smuzhiyun u8 HPDOutputInverse; 182*4882a593Smuzhiyun u8 HPDTogglePeriod; 183*4882a593Smuzhiyun u8 TxOEAlignment; 184*4882a593Smuzhiyun u8 str_size; 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun } IT6635_RX_OPTIONS; 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun typedef struct { 189*4882a593Smuzhiyun u8 tag1; 190*4882a593Smuzhiyun // TxSwap 191*4882a593Smuzhiyun u8 EnTxPNSwap; 192*4882a593Smuzhiyun u8 EnTxChSwap; 193*4882a593Smuzhiyun u8 EnTxVCLKInv; 194*4882a593Smuzhiyun u8 EnTxOutD1t; 195*4882a593Smuzhiyun u8 CopyEDIDFromSink; 196*4882a593Smuzhiyun u8 ParsePhysicalAddr; 197*4882a593Smuzhiyun u8 TurnOffTx5VWhenSwitchPort; 198*4882a593Smuzhiyun u8 str_size; 199*4882a593Smuzhiyun 200*4882a593Smuzhiyun } IT6635_TX_OPTIONS; 201*4882a593Smuzhiyun 202*4882a593Smuzhiyun typedef struct { 203*4882a593Smuzhiyun u8 tag1; 204*4882a593Smuzhiyun u8 SwAddr; 205*4882a593Smuzhiyun u8 RxAddr; 206*4882a593Smuzhiyun u8 CecAddr; 207*4882a593Smuzhiyun u8 EdidAddr; 208*4882a593Smuzhiyun u8 ForceRxOn; 209*4882a593Smuzhiyun u8 RxAutoPowerDown; 210*4882a593Smuzhiyun u8 DoTxPowerDown; 211*4882a593Smuzhiyun u8 TxPowerDownWhileWaitingClock; 212*4882a593Smuzhiyun u8 str_size; 213*4882a593Smuzhiyun 214*4882a593Smuzhiyun } IT6635_DEV_OPTION; 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun typedef struct { 217*4882a593Smuzhiyun IT6635_RX_OPTIONS *active_rx_opt; 218*4882a593Smuzhiyun IT6635_RX_OPTIONS *rx_opt[4]; 219*4882a593Smuzhiyun IT6635_TX_OPTIONS *tx_opt; 220*4882a593Smuzhiyun IT6635_DEV_OPTION *dev_opt; 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun } IT6635_DEV_OPTION_INTERNAL; 223*4882a593Smuzhiyun 224*4882a593Smuzhiyun typedef struct { 225*4882a593Smuzhiyun struct { 226*4882a593Smuzhiyun u8 Rev; 227*4882a593Smuzhiyun u32 RCLK; 228*4882a593Smuzhiyun u8 RxHPDFlag[4]; 229*4882a593Smuzhiyun 230*4882a593Smuzhiyun u8 VSDBOffset; // 0xFF; 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun u8 PhyAdr[4]; 233*4882a593Smuzhiyun u8 EdidChkSum[2]; 234*4882a593Smuzhiyun 235*4882a593Smuzhiyun _SYS_FSM_STATE state_sys_fsm; 236*4882a593Smuzhiyun u8 state_dev_init; 237*4882a593Smuzhiyun u8 state_dev; 238*4882a593Smuzhiyun u8 fsm_return; 239*4882a593Smuzhiyun u8 Rx_active_port; 240*4882a593Smuzhiyun u8 Rx_new_port; 241*4882a593Smuzhiyun u8 Tx_current_5v; 242*4882a593Smuzhiyun u32 vclk; 243*4882a593Smuzhiyun u32 vclk_prev; 244*4882a593Smuzhiyun 245*4882a593Smuzhiyun u16 RxCEDErr[3]; 246*4882a593Smuzhiyun u8 RxCEDErrValid; 247*4882a593Smuzhiyun u16 RxCEDErrRec[3][3]; 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun u8 count_unlock; 250*4882a593Smuzhiyun u8 count_symlock; 251*4882a593Smuzhiyun u8 count_symlock_lost; 252*4882a593Smuzhiyun u8 count_symlock_fail; 253*4882a593Smuzhiyun u8 count_symlock_unstable; 254*4882a593Smuzhiyun u8 count_fsm_err; 255*4882a593Smuzhiyun u8 count_eq_check; 256*4882a593Smuzhiyun u8 count_try_force_hdmi_mode; 257*4882a593Smuzhiyun u8 count_auto_eq_fail; 258*4882a593Smuzhiyun u8 count_wait_clock; 259*4882a593Smuzhiyun u8 clock_ratio; 260*4882a593Smuzhiyun u8 h2_scramble; 261*4882a593Smuzhiyun u8 edid_ready; 262*4882a593Smuzhiyun u8 prev_hpd_state; 263*4882a593Smuzhiyun 264*4882a593Smuzhiyun u8 try_fixed_EQ; 265*4882a593Smuzhiyun u8 current_hdmi_mode; 266*4882a593Smuzhiyun u8 current_txoe; 267*4882a593Smuzhiyun u8 check_for_hpd_toggle; 268*4882a593Smuzhiyun u8 sdi_stable_count; 269*4882a593Smuzhiyun u8 check_for_sdi; 270*4882a593Smuzhiyun u8 force_hpd_state; 271*4882a593Smuzhiyun // u8 txoe_alignment; 272*4882a593Smuzhiyun u8 hpd_toggle_timeout; 273*4882a593Smuzhiyun u8 spmon; 274*4882a593Smuzhiyun 275*4882a593Smuzhiyun __tick tick_set_afe; 276*4882a593Smuzhiyun __tick tick_hdcp; 277*4882a593Smuzhiyun // u8 en_count_hdcp; 278*4882a593Smuzhiyun u8 *default_edid[4]; 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun // tx 281*4882a593Smuzhiyun u8 hpd_wait_count; 282*4882a593Smuzhiyun u8 is_hdmi20_sink; 283*4882a593Smuzhiyun u8 rx_deskew_err; 284*4882a593Smuzhiyun } vars; 285*4882a593Smuzhiyun 286*4882a593Smuzhiyun struct { 287*4882a593Smuzhiyun _SYS_AEQ_TYPE sys_aEQ; 288*4882a593Smuzhiyun u8 AutoEQ_state; 289*4882a593Smuzhiyun u8 AutoEQ_WaitTime; 290*4882a593Smuzhiyun u8 AutoEQ_Result; 291*4882a593Smuzhiyun u8 DFE_Valid; 292*4882a593Smuzhiyun u8 RS_Valid; 293*4882a593Smuzhiyun u16 RS_ValidMap[3]; 294*4882a593Smuzhiyun u8 EqHDMIMode; 295*4882a593Smuzhiyun u8 ManuEQ_state; 296*4882a593Smuzhiyun u8 DFE[14][3][3]; // [RS_value][channel012][NumABC] -> 0x34B...0x353 297*4882a593Smuzhiyun u8 CalcRS[3]; 298*4882a593Smuzhiyun 299*4882a593Smuzhiyun u8 EQ_flag_14; 300*4882a593Smuzhiyun u8 EQ_flag_20; 301*4882a593Smuzhiyun u8 txoe_ready14; 302*4882a593Smuzhiyun u8 txoe_ready20; 303*4882a593Smuzhiyun u8 stored_RS_14[3]; 304*4882a593Smuzhiyun u8 stored_RS_20[3]; 305*4882a593Smuzhiyun u8 current_eq_mode; 306*4882a593Smuzhiyun 307*4882a593Smuzhiyun // u8 FixedRsIndex[4]; 308*4882a593Smuzhiyun 309*4882a593Smuzhiyun u8 meq_cur_idx; 310*4882a593Smuzhiyun 311*4882a593Smuzhiyun u8 meq_adj_idx[3]; 312*4882a593Smuzhiyun u32 ced_err_avg[3]; 313*4882a593Smuzhiyun u32 ced_err_avg_prev[3]; 314*4882a593Smuzhiyun u8 ced_acc_count; 315*4882a593Smuzhiyun u8 manu_eq_fine_tune_count[3]; 316*4882a593Smuzhiyun u8 manu_eq_fine_tune_best_rs[3]; 317*4882a593Smuzhiyun 318*4882a593Smuzhiyun } EQ; 319*4882a593Smuzhiyun 320*4882a593Smuzhiyun // u8 edid_buf[128]; 321*4882a593Smuzhiyun 322*4882a593Smuzhiyun IT6635_DEV_OPTION_INTERNAL opts; 323*4882a593Smuzhiyun 324*4882a593Smuzhiyun } IT6635_DEVICE_DATA; 325*4882a593Smuzhiyun 326*4882a593Smuzhiyun extern IT6635_DEVICE_DATA it66353_gdev; 327*4882a593Smuzhiyun extern const u8 it66353_rs_value[]; 328*4882a593Smuzhiyun extern IT6635_RX_OPTIONS it66353_s_RxOpts; 329*4882a593Smuzhiyun extern IT6635_TX_OPTIONS it66353_s_TxOpts; 330*4882a593Smuzhiyun extern IT6635_DEV_OPTION it66353_s_DevOpts; 331*4882a593Smuzhiyun extern u8 it66353_s_default_edid_port0[]; 332*4882a593Smuzhiyun 333*4882a593Smuzhiyun 334*4882a593Smuzhiyun #ifdef __cplusplus 335*4882a593Smuzhiyun extern "C" { 336*4882a593Smuzhiyun #endif 337*4882a593Smuzhiyun 338*4882a593Smuzhiyun // -------------------------------- 339*4882a593Smuzhiyun extern u8 it66353_h2swwr(u8 offset, u8 wdata); 340*4882a593Smuzhiyun extern u8 it66353_h2swrd(u8 offset); 341*4882a593Smuzhiyun extern u8 it66353_h2swset(u8 offset, u8 mask, u8 wdata); 342*4882a593Smuzhiyun extern void it66353_h2swbrd(u8 offset, u8 length, u8 *rddata); 343*4882a593Smuzhiyun extern void it66353_h2swbwr(u8 offset, u8 length, u8 *rddata); 344*4882a593Smuzhiyun 345*4882a593Smuzhiyun extern u8 it66353_h2rxwr(u8 offset, u8 wdata); 346*4882a593Smuzhiyun extern u8 it66353_h2rxrd(u8 offset); 347*4882a593Smuzhiyun extern u8 it66353_h2rxset(u8 offset, u8 mask, u8 dwata); 348*4882a593Smuzhiyun extern void it66353_h2rxbrd(u8 offset, u8 length, u8 *rddata); 349*4882a593Smuzhiyun extern void it66353_h2rxbwr(u8 offset, u8 length, u8 *rddata); 350*4882a593Smuzhiyun 351*4882a593Smuzhiyun extern u8 it66353_cecwr(u8 offset, u8 wdata); 352*4882a593Smuzhiyun extern u8 it66353_cecrd(u8 offset); 353*4882a593Smuzhiyun extern u8 it66353_cecset(u8 offset, u8 mask, u8 wdata); 354*4882a593Smuzhiyun extern void it66353_cecbrd(u8 offset, u8 length, u8 *rddata); 355*4882a593Smuzhiyun extern void it66353_cecbwr(u8 offset, u8 length, u8 *rddata); 356*4882a593Smuzhiyun 357*4882a593Smuzhiyun extern u8 it66353_h2rxedidwr(u8 offset, u8 *wrdata, u8 length); 358*4882a593Smuzhiyun 359*4882a593Smuzhiyun extern void it66353_chgrxbank(u8 bankno); 360*4882a593Smuzhiyun extern void it66353_chgswbank(u8 bankno); 361*4882a593Smuzhiyun 362*4882a593Smuzhiyun extern void it66353_rx_update_ced_err_from_hw(void); 363*4882a593Smuzhiyun extern void it66353_rx_get_ced_err(void); 364*4882a593Smuzhiyun extern void it66353_rx_clear_ced_err(void); 365*4882a593Smuzhiyun extern u8 it66353_rx_monitor_ced_err(void); 366*4882a593Smuzhiyun extern void it66353_rx_DFE_enable(u8 enable); 367*4882a593Smuzhiyun extern void it66353_rx_set_rs_3ch(u8 *rs_value); 368*4882a593Smuzhiyun extern void it66353_rx_set_rs(u8 ch, u8 rs_value); 369*4882a593Smuzhiyun 370*4882a593Smuzhiyun extern u8 it66353_rx_is_all_ch_symlock(void); 371*4882a593Smuzhiyun extern u8 it66353_rx_is_ch_symlock(u8 ch); 372*4882a593Smuzhiyun extern u8 it66353_rx_is_clock_stable(void); 373*4882a593Smuzhiyun 374*4882a593Smuzhiyun extern void it66353_rx_ovwr_hdmi_clk(u8 port, u8 ratio); 375*4882a593Smuzhiyun extern void it66353_rx_ovwr_h20_scrb(u8 port, u8 scrb); 376*4882a593Smuzhiyun 377*4882a593Smuzhiyun extern void it66353_rx_auto_power_down_enable(u8 port, u8 enable); 378*4882a593Smuzhiyun extern void it66353_rx_term_power_down(u8 port, u8 channel); 379*4882a593Smuzhiyun extern void it66353_rx_handle_output_err(void); 380*4882a593Smuzhiyun 381*4882a593Smuzhiyun extern void it66353_sw_enable_timer0(void); 382*4882a593Smuzhiyun extern void it66353_sw_disable_timer0(void); 383*4882a593Smuzhiyun extern u8 it66353_sw_get_timer0_interrupt(void); 384*4882a593Smuzhiyun 385*4882a593Smuzhiyun extern void it66353_sw_clear_hdcp_status(void); 386*4882a593Smuzhiyun // -------------------------------- 387*4882a593Smuzhiyun extern void it66353_txoe(u8 enable); 388*4882a593Smuzhiyun extern void it66353_auto_detect_hdmi_encoding(void); 389*4882a593Smuzhiyun extern void it66353_fix_incorrect_hdmi_encoding(void); 390*4882a593Smuzhiyun 391*4882a593Smuzhiyun extern u8 it66353_get_port_info1(u8 port, u8 info); 392*4882a593Smuzhiyun extern u8 it66353_get_port_info0(u8 port, u8 info); 393*4882a593Smuzhiyun 394*4882a593Smuzhiyun extern void it66353_init_rclk(void); 395*4882a593Smuzhiyun extern void it66353_enable_tx_port(u8 enable); 396*4882a593Smuzhiyun // -------------- 397*4882a593Smuzhiyun extern void it66353_sys_state(u8 new_state); 398*4882a593Smuzhiyun extern void it66353_rx_reset(void); 399*4882a593Smuzhiyun extern void it66353_rx_caof_init(u8 port); 400*4882a593Smuzhiyun 401*4882a593Smuzhiyun extern void it66353_eq_save_h20(void); 402*4882a593Smuzhiyun extern void it66353_eq_load_h20(void); 403*4882a593Smuzhiyun extern void it66353_eq_save_h14(void); 404*4882a593Smuzhiyun extern void it66353_eq_load_h14(void); 405*4882a593Smuzhiyun extern void it66353_eq_load_previous(void); 406*4882a593Smuzhiyun extern void it66353_eq_load_default(void); 407*4882a593Smuzhiyun 408*4882a593Smuzhiyun extern void it66353_eq_reset_state(void); 409*4882a593Smuzhiyun extern void it66353_eq_set_state(u8 state); 410*4882a593Smuzhiyun extern u8 it66353_eq_get_state(void); 411*4882a593Smuzhiyun extern void it66353_eq_reset_txoe_ready(void); 412*4882a593Smuzhiyun extern void it66353_eq_set_txoe_ready(u8 ready); 413*4882a593Smuzhiyun extern u8 it66353_eq_get_txoe_ready(void); 414*4882a593Smuzhiyun 415*4882a593Smuzhiyun extern void it66353_aeq_set_DFE2(u8 EQ0, u8 EQ1, u8 EQ2); 416*4882a593Smuzhiyun extern u8 it66353_rx_is_hdmi20(void); 417*4882a593Smuzhiyun extern void it66353_aeq_diable_eq_trigger(void); 418*4882a593Smuzhiyun extern u8 it66353_aeq_check_sareq_result(void); 419*4882a593Smuzhiyun 420*4882a593Smuzhiyun #if DEBUG_FSM_CHANGE 421*4882a593Smuzhiyun #define it66353_fsm_chg(new_state) __it66353_fsm_chg(new_state, __LINE__) 422*4882a593Smuzhiyun #define it66353_fsm_chg_delayed(new_state) __it66353_fsm_chg2(new_state, __LINE__) 423*4882a593Smuzhiyun #else 424*4882a593Smuzhiyun extern void it66353_fsm_chg(u8 new_state); 425*4882a593Smuzhiyun extern void it66353_fsm_chg_delayed(u8 new_state); 426*4882a593Smuzhiyun #endif 427*4882a593Smuzhiyun 428*4882a593Smuzhiyun extern void __it66353_fsm_chg(u8 new_state, int caller); 429*4882a593Smuzhiyun extern void __it66353_fsm_chg2(u8 new_state, int caller); 430*4882a593Smuzhiyun // void it66353_vars_init(void); 431*4882a593Smuzhiyun extern bool it66353_device_init(void); 432*4882a593Smuzhiyun extern bool it66353_device_init2(void); 433*4882a593Smuzhiyun 434*4882a593Smuzhiyun extern bool it66353_read_edid(u8 block, u8 offset, int length, u8 *edid_buffer); 435*4882a593Smuzhiyun extern bool it66353_write_one_block_edid(u8 block, u8 *edid_buffer); 436*4882a593Smuzhiyun extern bool it66353_setup_edid_ram(u8 flag); 437*4882a593Smuzhiyun 438*4882a593Smuzhiyun extern void it66353_force_hdmi20(void); 439*4882a593Smuzhiyun 440*4882a593Smuzhiyun #ifdef __cplusplus 441*4882a593Smuzhiyun } 442*4882a593Smuzhiyun #endif 443*4882a593Smuzhiyun 444*4882a593Smuzhiyun extern void it66353_rx_skew_adj(u8 ch); 445*4882a593Smuzhiyun #define _rx_edid_address_enable(port)\ 446*4882a593Smuzhiyun {it66353_h2swset(0x55 + port, 0x24, 0x20); } 447*4882a593Smuzhiyun #define _rx_edid_address_disable(port)\ 448*4882a593Smuzhiyun {it66353_h2swset(0x55 + port, 0x24, 0x04); } 449*4882a593Smuzhiyun #define _rx_edid_ram_enable(port)\ 450*4882a593Smuzhiyun {if (it66353_gdev.opts.rx_opt[port]->EnRxDDCBypass == 0) { it66353_h2swset(0x55 + port, 0x01, 0x00); }} 451*4882a593Smuzhiyun #define _rx_edid_ram_disable(port)\ 452*4882a593Smuzhiyun { it66353_h2swset(0x55 + port, 0x01, 0x01); } 453*4882a593Smuzhiyun #define _rx_edid_set_chksum(port, sum)\ 454*4882a593Smuzhiyun { it66353_h2swwr(0xe1 + port * 2, sum); } 455*4882a593Smuzhiyun #define _rx_edid_set_cec_phyaddr(port, phyAB, phyCD)\ 456*4882a593Smuzhiyun { it66353_h2swwr(0xd9 + port*2, phyAB); it66353_h2swwr(0xda + port*2, phyCD); } 457*4882a593Smuzhiyun 458*4882a593Smuzhiyun #endif