void vEnableDeepColor(u8 ui1Mode) { u32 u4Data; MT8193_DRV_FUNC(); if(ui1Mode == HDMI_DEEP_COLOR_10_BIT) { u4Data = COLOR_10BIT_MODE; } else if(ui1Mode == HDMI_DEEP_COLOR_12_BIT) { u4Data = COLOR_12BIT_MODE; } else if(ui1Mode == HDMI_DEEP_COLOR_16_BIT) { u4Data = COLOR_16BIT_MODE; } else { u4Data = COLOR_8BIT_MODE; } if(u4Data == COLOR_8BIT_MODE) { vWriteHdmiSYSMsk(HDMI_SYS_CFG20, u4Data, DEEP_COLOR_MODE_MASK| DEEP_COLOR_EN); } else { vWriteHdmiSYSMsk(HDMI_SYS_CFG20, u4Data|DEEP_COLOR_EN, DEEP_COLOR_MODE_MASK| DEEP_COLOR_EN); } }
static int mt8193_video_config(HDMI_VIDEO_RESOLUTION vformat, HDMI_VIDEO_INPUT_FORMAT vin, HDMI_VIDEO_OUTPUT_FORMAT vout) { MT8193_DRV_FUNC(); del_timer(&r_hdmi_timer); memset((void*)&r_hdmi_timer, 0, sizeof(r_hdmi_timer)); _stAvdAVInfo.e_resolution = vformat; vSetHDMITxPLLTrigger(); vResetHDMIPLL(); _stAvdAVInfo.fgHdmiTmdsEnable = 0; av_hdmiset(HDMI_SET_TURN_OFF_TMDS, &_stAvdAVInfo, 1); av_hdmiset(HDMI_SET_VPLL, &_stAvdAVInfo, 1); av_hdmiset(HDMI_SET_SOFT_NCTS, &_stAvdAVInfo, 1); av_hdmiset(HDMI_SET_VIDEO_RES_CHG, &_stAvdAVInfo, 1); av_hdmiset(HDMI_SET_HDCP_INITIAL_AUTH, &_stAvdAVInfo, 1); memset((void*)&r_hdmi_timer, 0, sizeof(r_hdmi_timer)); r_hdmi_timer.expires = jiffies + 1/(1000/HZ); // wait 1s to stable r_hdmi_timer.function = hdmi_poll_isr; r_hdmi_timer.data = 0; init_timer(&r_hdmi_timer); add_timer(&r_hdmi_timer); mt8193_hdmiinit = 1; return 0; }
int mt8193_power_on(void) { MT8193_DRV_FUNC(); #if defined(CONFIG_HAS_EARLYSUSPEND) if(mt8193_hdmiearlysuspend==0) return 0; #endif mt8193_hotinit = 0; mt_set_gpio_mode(GPIO_HDMI_POWER_CONTROL, GPIO_MODE_00); mt_set_gpio_dir(GPIO_HDMI_POWER_CONTROL, GPIO_DIR_OUT); mt_set_gpio_out(GPIO_HDMI_POWER_CONTROL, GPIO_OUT_ONE); vWriteHdmiSYSMsk(HDMI_PWR_CTRL, hdmi_power_turnon, hdmi_power_turnon); vWriteHdmiSYSMsk(HDMI_SYS_PWR_RST_B, hdmi_pwr_sys_sw_unreset, hdmi_pwr_sys_sw_unreset); vWriteHdmiSYSMsk(HDMI_PWR_CTRL, hdmi_iso_dis, hdmi_iso_en); vWriteHdmiSYSMsk(HDMI_PWR_CTRL, hdmi_clock_on, hdmi_clock_off); vWriteHdmiSYSMsk(HDMI_SYS_CFG1C, ANLG_ON|HDMI_ON, ANLG_ON|HDMI_ON); mt8193_i2c_write(0x1500, 0x20); vHotPlugPinInit(); vInitHdcpKeyGetMethod(NON_HOST_ACCESS_FROM_EEPROM); vWriteHdmiIntMask(0xFF); return 0; }
void vWriteHdmiIntMask(u8 bMask) { MT8193_DRV_FUNC(); vWriteByteHdmiGRL(GRL_INT_MASK, bMask); /* INT mask */ }
static void mt8193_suspend(void) { MT8193_DRV_FUNC(); _stAvdAVInfo.fgHdmiTmdsEnable = 0; av_hdmiset(HDMI_SET_TURN_OFF_TMDS, &_stAvdAVInfo, 1); }
static void _mt8193_irq_handler(void) { MT8193_DRV_FUNC(); atomic_set(&mt8193_nlh_event, 1); wake_up_interruptible(&mt8193_nlh_wq); mt65xx_eint_mask(CUST_EINT_EINT_HDMI_HPD_NUM); }
u8 bReadGRLInt(void) { u8 bStatus; MT8193_DRV_FUNC(); bStatus = bReadByteHdmiGRL(GRL_INT); return bStatus; }
enum HDMI_STATE mt8193_get_state(void) { MT8193_DRV_FUNC(); if (mt8193_hotplugstate == HDMI_STATE_HOT_PLUGIN_AND_POWER_ON) return HDMI_STATE_ACTIVE; else return HDMI_STATE_NO_DEVICE; }
static int mt8193_audio_enable(bool enable) { MT8193_DRV_FUNC(); if (enable) hdmi_user_mute_audio(0); else hdmi_user_mute_audio(1); return 0; }
void vResetHDMI(BYTE bRst) { MT8193_DRV_FUNC(); if (bRst) { vWriteHdmiSYSMsk(HDMI_SYS_CFG1C, HDMI_RST, HDMI_RST); } else { vWriteHdmiSYSMsk(HDMI_SYS_CFG1C, 0, HDMI_RST); vWriteHdmiGRLMsk(GRL_CFG3, 0, CFG3_CONTROL_PACKET_DELAY); /* Designer suggest adjust Control packet deliver time */ vWriteHdmiSYSMsk(HDMI_SYS_CFG1C, ANLG_ON, ANLG_ON); } }
void vVideoPLLInit_1080P_36BIT(void) { MT8193_DRV_FUNC(); /* init analog part */ vWriteHdmiSYS(HDMI_SYS_AMPCTRL, HDMI_ANL_INIT_1080P_36BIT[0]); vWriteHdmiSYS(HDMI_SYS_AMPCTRL1, HDMI_ANL_INIT_1080P_36BIT[1]); vWriteHdmiSYS(HDMI_SYS_PLLCTRL1, HDMI_ANL_INIT_1080P_36BIT[2]); vWriteHdmiSYS(HDMI_SYS_PLLCTRL2, HDMI_ANL_INIT_1080P_36BIT[3]); vWriteHdmiSYS(HDMI_SYS_PLLCTRL3, HDMI_ANL_INIT_1080P_36BIT[4]); vWriteHdmiSYS(HDMI_SYS_PLLCTRL4, HDMI_ANL_INIT_1080P_36BIT[5]); vWriteHdmiSYS(HDMI_SYS_PLLCTRL5, HDMI_ANL_INIT_1080P_36BIT[6]); vWriteHdmiSYS(HDMI_SYS_PLLCTRL5, HDMI_ANL_INIT_1080P_36BIT[7]); }
HDMI_STATE mt8193_get_state(void) { MT8193_DRV_FUNC(); if(bCheckPordHotPlug(PORD_MODE|HOTPLUG_MODE)==TRUE) { return HDMI_STATE_ACTIVE; } else { return HDMI_STATE_NO_DEVICE; } }
void vHDMIResetGenReg(u8 ui1resindex, u8 ui1colorspace) { MT8193_DRV_FUNC(); vResetHDMI(1); vHDMIVideoOutput(ui1resindex, ui1colorspace); vResetHDMI(0); vEnableNotice(TRUE); vWriteHdmiIntMask(0xfe); vSetHDMIDataEnable(ui1resindex); vSetHDMISyncDelay(ui1resindex); vEnableHdmiMode(TRUE); vEnableNCTSAutoWrite(); vHDMISettingColorSpace(ui1colorspace); }
void vTmdsOnOffAndResetHdcp(u8 fgHdmiTmdsEnable) { MT8193_DRV_FUNC(); if (fgHdmiTmdsEnable == 1) { mdelay(10); vTxSignalOnOff(SV_ON); } else { vHDMIAVMute(); mdelay(2); vTxSignalOnOff(SV_OFF); vHDCPReset(); mdelay(10); } }
void vEnableHdmiMode(u8 bOn) { u8 bData; MT8193_DRV_FUNC(); if (bOn == TRUE) { bData = bReadByteHdmiGRL(GRL_CFG1); bData &= ~CFG1_DVI; /* enable HDMI mode */ vWriteByteHdmiGRL(GRL_CFG1, bData); } else { bData = bReadByteHdmiGRL(GRL_CFG1); bData |= CFG1_DVI; /* disable HDMI mode */ vWriteByteHdmiGRL(GRL_CFG1, bData); } }
static int mt8193_init(void) { MT8193_DRV_FUNC(); memset((void*)&r_hdmi_timer, 0, sizeof(r_hdmi_timer)); r_hdmi_timer.expires = jiffies + 1000/(1000/HZ); // wait 1s to stable r_hdmi_timer.function = hdmi_poll_isr; r_hdmi_timer.data = 0; init_timer(&r_hdmi_timer); add_timer(&r_hdmi_timer); memset((void*)&r_cec_timer, 0, sizeof(r_cec_timer)); r_cec_timer.expires = jiffies + 1000/(1000/HZ); // wait 1s to stable r_cec_timer.function = cec_poll_isr; r_cec_timer.data = 0; init_timer(&r_cec_timer); add_timer(&r_cec_timer); init_waitqueue_head(&hdmi_timer_wq); hdmi_timer_task = kthread_create(hdmi_timer_kthread, NULL, "hdmi_timer_kthread"); wake_up_process(hdmi_timer_task); init_waitqueue_head(&cec_timer_wq); cec_timer_task = kthread_create(cec_timer_kthread, NULL, "cec_timer_kthread"); wake_up_process(cec_timer_task); init_waitqueue_head(&mt8193_nlh_wq); mt8193_nlh_task = kthread_create(mt8193_nlh_kthread, NULL, "mt8193_nlh_kthread"); wake_up_process(mt8193_nlh_task); #if defined(CONFIG_HAS_EARLYSUSPEND) register_early_suspend(&mt8193_hdmi_early_suspend_desc); #endif mt_set_gpio_mode(GPIO_HDMI_EINT_PIN, GPIO_MODE_01); mt_set_gpio_dir(GPIO_HDMI_EINT_PIN, GPIO_DIR_IN); mt_set_gpio_pull_enable(GPIO_HDMI_EINT_PIN, true); mt_set_gpio_pull_select(GPIO_HDMI_EINT_PIN, GPIO_PULL_UP); mt65xx_eint_set_sens(CUST_EINT_EINT_HDMI_HPD_NUM, CUST_EINT_EDGE_SENSITIVE); mt65xx_eint_registration(CUST_EINT_EINT_HDMI_HPD_NUM, 0, CUST_EINT_POLARITY_LOW, &_mt8193_irq_handler, 0); mt65xx_eint_unmask(CUST_EINT_EINT_HDMI_HPD_NUM); return 0; }
void mt8193_power_off(void) { MT8193_DRV_FUNC(); mt8193_hotinit = 1; mt8193_hotplugstate = HDMI_STATE_HOT_PLUG_OUT; vSetSharedInfo(SI_HDMI_RECEIVER_STATUS, HDMI_PLUG_OUT); vWriteHdmiIntMask(0xFF); vWriteHdmiSYSMsk(HDMI_SYS_CFG1C, 0, ANLG_ON|HDMI_ON); mt_set_gpio_mode(GPIO_HDMI_POWER_CONTROL, GPIO_MODE_00); mt_set_gpio_dir(GPIO_HDMI_POWER_CONTROL, GPIO_DIR_OUT); mt_set_gpio_out(GPIO_HDMI_POWER_CONTROL, GPIO_OUT_ZERO); vWriteHdmiSYSMsk(HDMI_PWR_CTRL, hdmi_clock_off, hdmi_clock_off); vWriteHdmiSYSMsk(HDMI_PWR_CTRL, hdmi_iso_en, hdmi_iso_en); vWriteHdmiSYSMsk(HDMI_SYS_PWR_RST_B, hdmi_pwr_sys_sw_reset, hdmi_pwr_sys_sw_unreset); vWriteHdmiSYSMsk(HDMI_PWR_CTRL, hdmi_power_turnoff, hdmi_power_turnon); }
void vHDMIResetGenReg(u8 ui1resindex, u8 ui1colorspace) { MT8193_DRV_FUNC(); vResetHDMI(1); vHDMIVideoOutput(ui1resindex, ui1colorspace); vResetHDMI(0); vEnableNotice(TRUE); vWriteHdmiIntMask(0xff); vSetHDMIDataEnable(ui1resindex); vSetHDMISyncDelay(ui1resindex); if (i4SharedInfo(SI_EDID_VSDB_EXIST) == TRUE) vEnableHdmiMode(TRUE); else vEnableHdmiMode(FALSE); vEnableNCTSAutoWrite(); vHDMISettingColorSpace(ui1colorspace); }
static int mt8193_audio_config(enum HDMI_AUDIO_FORMAT aformat, int bitWidth) { MT8193_DRV_FUNC(); if (aformat == HDMI_AUDIO_32K_2CH) { HDMI_DEF_LOG("[hdmi]HDMI_AUDIO_32K_2CH\n"); _stAvdAVInfo.e_hdmi_fs = HDMI_FS_32K; } else if (aformat == HDMI_AUDIO_44K_2CH) { HDMI_DEF_LOG("[hdmi]HDMI_AUDIO_44K_2CH\n"); _stAvdAVInfo.e_hdmi_fs = HDMI_FS_44K; } else if (aformat == HDMI_AUDIO_48K_2CH) { HDMI_DEF_LOG("[hdmi]HDMI_AUDIO_48K_2CH\n"); _stAvdAVInfo.e_hdmi_fs = HDMI_FS_48K; } else { HDMI_DEF_LOG("[hdmi]not support audio format, force to HDMI_AUDIO_44K_2CH\n"); _stAvdAVInfo.e_hdmi_fs = HDMI_FS_44K; } av_hdmiset(HDMI_SET_AUDIO_CHG_SETTING, &_stAvdAVInfo, 1); return 0; }
void mt8193_colordeep(u8 u1colorspace, u8 u1deepcolor) { MT8193_DRV_FUNC(); if((u1colorspace==0xff)&&(u1deepcolor==0xff)) { printk("color_space:HDMI_YCBCR_444 = 2\n"); printk("color_space:HDMI_YCBCR_422 = 3\n"); printk("deep_color:HDMI_NO_DEEP_COLOR = 1\n"); printk("deep_color:HDMI_DEEP_COLOR_10_BIT = 2\n"); printk("deep_color:HDMI_DEEP_COLOR_12_BIT = 3\n"); printk("deep_color:HDMI_DEEP_COLOR_16_BIT = 4\n"); return; } if(dReadHdmiSYS(0x2cc)==0x8193) _stAvdAVInfo.e_video_color_space = HDMI_YCBCR_444; else _stAvdAVInfo.e_video_color_space = HDMI_RGB; _stAvdAVInfo.e_deep_color_bit = (HDMI_DEEP_COLOR_T)u1deepcolor; }
void mt8193_log_enable(unsigned short enable) { MT8193_DRV_FUNC(); if (enable == 0) { hdmi_print("hdmi_pll_log = 0x1\n"); hdmi_print("hdmi_dgi_log = 0x2\n"); hdmi_print("hdmi_plug_log = 0x4\n"); hdmi_print("hdmi_video_log = 0x8\n"); hdmi_print("hdmi_audio_log = 0x10\n"); hdmi_print("hdmi_hdcp_log = 0x20\n"); hdmi_print("hdmi_cec_log = 0x40\n"); hdmi_print("hdmi_ddc_log = 0x80\n"); hdmi_print("hdmi_edid_log = 0x100\n"); hdmi_print("hdmi_drv_log = 0x200\n"); hdmi_print("hdmi_all_log = 0xffff\n"); } mt8193_log_on = enable; }
void vUnBlackHDMIOnly(void) { MT8193_DRV_FUNC(); vWriteHdmiDGIMsk(fifo_ctrl, 0, fifo_reset_sel|fifo_reset_on|sw_rst); *(unsigned int*)(0xf400f0b4) = 0x0; }
void mt8193_enablehdcp(unsigned char u1hdcponoff) { MT8193_DRV_FUNC(); _stAvdAVInfo.u1hdcponoff = u1hdcponoff; av_hdmiset(HDMI_SET_HDCP_OFF, &_stAvdAVInfo, 1); }
void mt8193_setcecrxmode(unsigned char u1cecrxmode) { MT8193_DRV_FUNC(); mt8193_rxcecmode = u1cecrxmode; }
void vUnBlackHDMIOnly(void) { MT8193_DRV_FUNC(); if (get_boot_mode() != FACTORY_BOOT) *(unsigned int *)(0xf400f0b4) = 0x0; }
void vBlackHDMIOnly(void) { MT8193_DRV_FUNC(); *(unsigned int*)(0xf400f0b4) = 0x51; }
void bClearGRLInt(BYTE bInt) { MT8193_DRV_FUNC(); vWriteByteHdmiGRL(GRL_INT, bInt); }
void vSetSharedInfo(u32 u4Index, u32 i4Value) { MT8193_DRV_FUNC(); i4HdmiShareInfo[u4Index] = i4Value; }
void vClearHdmiCmd(void) { MT8193_DRV_FUNC(); mt8193_hdmiCmd = 0xff; }
void vSendHdmiCmd(u8 u8cmd) { MT8193_DRV_FUNC(); mt8193_hdmiCmd = u8cmd; }