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);		
  }		
  
}	
Exemple #2
0
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;
}
Exemple #3
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);
}
Exemple #6
0
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]);
}
Exemple #12
0
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);
	}

}
Exemple #16
0
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;
}
Exemple #17
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;
}
Exemple #20
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;
}