void vSetHdmiIecI2s(u8 bIn)
{
  u8 bData;	
  MT8193_AUDIO_FUNC();
  if(bIn == SV_SPDIF)	
  {

    bData=bReadByteHdmiGRL(GRL_CFG1);

    if((bData&CFG1_SPDIF)==0)
    {
      bData |= CFG1_SPDIF;
      vWriteByteHdmiGRL(GRL_CFG1, bData);
    }
  }
  else
  {
     bData=bReadByteHdmiGRL(GRL_CFG1);
     if(bData&CFG1_SPDIF)
     {
        bData &= ~CFG1_SPDIF;
        vWriteByteHdmiGRL(GRL_CFG1, bData);
      }
      bData=bReadByteHdmiGRL(GRL_CFG1);
  }	
}	
void vSetHDMIAudioIn(void)
{
	u8 bData2;

	MT8193_AUDIO_FUNC();

	bData2 = vCheckPcmBitSize(0);

	vSetChannelSwap(LFE_CC_SWAP);
	vEnableIecTxRaw();

	vSetHdmiI2SDataFmt(I2S_16BIT);

	if (bData2 == PCM_24BIT)
		vAOUT_BNUM_SEL(AOUT_24BIT);
	else
		vAOUT_BNUM_SEL(AOUT_16BIT);

	vSetHdmiHighBitrate(FALSE);
	vDSTNormalDouble(FALSE);
	vEnableDSTConfig(FALSE);

	vDisableDsdConfig();
	vSetHdmiI2SChNum(2, 0);
	vSetHdmiIecI2s(SV_I2S);

}
void vHDMIAVMute(void)
{
	MT8193_AUDIO_FUNC();

	vBlackHDMIOnly();
	MuteHDMIAudio();
}
void vSetHdmiHighBitrate(u8 fgHighBitRate)
{
  u8 bData;
  MT8193_AUDIO_FUNC();
  if(fgHighBitRate ==TRUE)
  {
  	bData=bReadByteHdmiGRL(GRL_AOUT_BNUM_SEL);
    bData |= HIGH_BIT_RATE_PACKET_ALIGN;
    vWriteByteHdmiGRL(GRL_AOUT_BNUM_SEL, bData);
     udelay(100);//1ms
    bData=bReadByteHdmiGRL(GRL_AUDIO_CFG);
    bData |= HIGH_BIT_RATE;
    vWriteByteHdmiGRL(GRL_AUDIO_CFG, bData);
  }
  else
  {
  	bData=bReadByteHdmiGRL(GRL_AOUT_BNUM_SEL);
    bData &= ~HIGH_BIT_RATE_PACKET_ALIGN;
    vWriteByteHdmiGRL(GRL_AOUT_BNUM_SEL, bData);
    
  	bData=bReadByteHdmiGRL(GRL_AUDIO_CFG);
    bData &= ~HIGH_BIT_RATE;
    vWriteByteHdmiGRL(GRL_AUDIO_CFG, bData);
  }	
	
	
}	
void MuteHDMIAudio(void)
{
	u8 bData;
	MT8193_AUDIO_FUNC();
	bData = bReadByteHdmiGRL(GRL_AUDIO_CFG);
	bData |= AUDIO_ZERO;
	vWriteByteHdmiGRL(GRL_AUDIO_CFG, bData);
}
void vHDMIAVUnMute(void)
{
	MT8193_AUDIO_FUNC();
	if (_bflagvideomute == FALSE)
		vUnBlackHDMIOnly();
	if (_bflagaudiomute == FALSE)
		UnMuteHDMIAudio();
}
void vEnableIecTxRaw(void)
{
	u8 bData;
	MT8193_AUDIO_FUNC();
	bData = bReadByteHdmiGRL(GRL_MIX_CTRL);
	bData |= MIX_CTRL_FLAT;
	vWriteByteHdmiGRL(GRL_MIX_CTRL, bData);
}
void vEnableNCTSAutoWrite(void)
{
	u8 bData;
	MT8193_AUDIO_FUNC();
	bData = bReadByteHdmiGRL(GRL_DIVN);
	bData |= NCTS_WRI_ANYTIME;	/* enabel N-CTS can be written in any time */
	vWriteByteHdmiGRL(GRL_DIVN, bData);

}
void vDisableDsdConfig(void)
{
	u8 bData;
	MT8193_AUDIO_FUNC();
	bData = bReadByteHdmiGRL(GRL_AUDIO_CFG);
	bData &= ~SACD_SEL;
	vWriteByteHdmiGRL(GRL_AUDIO_CFG, bData);

}
void UnMuteHDMIAudio(void)
{
	BYTE bData;
	MT8193_AUDIO_FUNC();

	bData = bReadByteHdmiGRL(GRL_AUDIO_CFG);
	bData &= ~AUDIO_ZERO;
	vWriteByteHdmiGRL(GRL_AUDIO_CFG, bData);
}
void vSetHdmiI2SChNum(u8 bChNum, u8 bChMapping)
{
	u8 bData, bData1, bData2, bData3;
	MT8193_AUDIO_FUNC();
	if (bChNum == 2)	/* I2S 2ch */
	{
		bData = 0x04;	/* 2ch data */
		bData1 = 0x50;	/* data0 */


	} else if ((bChNum == 3) || (bChNum == 4))	/* I2S 2ch */
	{
		if ((bChNum == 4) && (bChMapping == 0x08)) {
			bData = 0x14;	/* 4ch data */

		} else {
			bData = 0x0c;	/* 4ch data */
		}
		bData1 = 0x50;	/* data0 */


	} else if ((bChNum == 6) || (bChNum == 5))	/* I2S 5.1ch */
	{
		if ((bChNum == 6) && (bChMapping == 0x0E)) {
			bData = 0x3C;	/* 6.0 ch data */
			bData1 = 0x50;	/* data0 */
		} else {
			bData = 0x1C;	/* 5.1ch data, 5/0ch */
			bData1 = 0x50;	/* data0 */
		}


	} else if (bChNum == 8)	/* I2S 5.1ch */
	{
		bData = 0x3C;	/* 7.1ch data */
		bData1 = 0x50;	/* data0 */
	} else if (bChNum == 7)	/* I2S 6.1ch */
	{
		bData = 0x3C;	/* 6.1ch data */
		bData1 = 0x50;	/* data0 */
	} else {
		bData = 0x04;	/* 2ch data */
		bData1 = 0x50;	/* data0 */
	}

	bData2 = 0xc6;
	bData3 = 0xfa;

	vWriteByteHdmiGRL(GRL_CH_SW0, bData1);
	vWriteByteHdmiGRL(GRL_CH_SW1, bData2);
	vWriteByteHdmiGRL(GRL_CH_SW2, bData3);
	vWriteByteHdmiGRL(GRL_I2S_UV, bData);

	/* vDisableDsdConfig(); */

}
void vAudioPacketOff(u8 bOn)
{
	u8 bData;
	MT8193_AUDIO_FUNC();
	bData = bReadByteHdmiGRL(GRL_SHIFT_R2);
	if (bOn)
		bData |= 0x40;
	else
		bData &= ~0x40;

	vWriteByteHdmiGRL(GRL_SHIFT_R2, bData);
}
void vHwNCTSOnOff(u8 bHwNctsOn)
{
  u8 bData;	
  MT8193_AUDIO_FUNC();
  bData=bReadByteHdmiGRL(GRL_CTS_CTRL);
  
  if(bHwNctsOn == TRUE)
  bData &= ~CTS_CTRL_SOFT;
  else
  bData |= CTS_CTRL_SOFT;
  
  vWriteByteHdmiGRL(GRL_CTS_CTRL, bData);
   
}   
void vHalHDMI_NCTS(u8 bAudioFreq, u8 bPix, u8 bDeepMode)
{
  u8 bTemp, bData, bData1[NCTS_BYTES];
  u32 u4Temp, u4NTemp=0;
  
  MT8193_AUDIO_FUNC();
  MT8193_AUDIO_LOG("bAudioFreq=%d,  bPix=%d, bDeepMode=%d\n", bAudioFreq,  bPix, bDeepMode);
  	
  bData=0;
  vWriteByteHdmiGRL(GRL_NCTS, bData);//YT suggest 3 dummy N-CTS
  vWriteByteHdmiGRL(GRL_NCTS, bData);
  vWriteByteHdmiGRL(GRL_NCTS, bData);

  for(bTemp=0; bTemp<NCTS_BYTES; bTemp++)
  {
    bData1[bTemp] = 0;	
  }
  	
  if(bDeepMode == HDMI_NO_DEEP_COLOR)
  {
    for(bTemp=0; bTemp<NCTS_BYTES; bTemp++)
    {

      if((bAudioFreq < 7) && (bPix < 9))

      bData1[bTemp]= HDMI_NCTS[bAudioFreq][bPix][bTemp];
    }
    
    u4NTemp = (bData1[4]<<16)|(bData1[5]<<8)|(bData1[6]);//N
    u4Temp = (bData1[0]<<24)|(bData1[1]<<16)|(bData1[2]<<8)|(bData1[3]);//CTS
    
  }
  else
  {
  	for(bTemp=0; bTemp<NCTS_BYTES; bTemp++)
    {
		if((bAudioFreq < 7) && (bPix < 9)) 

      bData1[bTemp] = HDMI_NCTS[bAudioFreq][bPix][bTemp];
    }
    
    u4NTemp = (bData1[4]<<16)|(bData1[5]<<8)|(bData1[6]);//N
    u4Temp = (bData1[0]<<24)|(bData1[1]<<16)|(bData1[2]<<8)|(bData1[3]);
    
    if(bDeepMode == HDMI_DEEP_COLOR_10_BIT)
    {
      u4Temp = (u4Temp >> 2)*5;// (*5/4) 
    }
    else if(bDeepMode == HDMI_DEEP_COLOR_12_BIT)
void vHwNCTSOnOff(u8 bHwNctsOn)
{
  u8 bData;	
  MT8193_AUDIO_FUNC();
  if(i4SharedInfo(SI_EDID_VSDB_EXIST) == FALSE) return;
  bData=bReadByteHdmiGRL(GRL_CTS_CTRL);
  
  if(bHwNctsOn == TRUE)
  bData &= ~CTS_CTRL_SOFT;
  else
  bData |= CTS_CTRL_SOFT;
  
  vWriteByteHdmiGRL(GRL_CTS_CTRL, bData);
   
}   
void vEnableDSTConfig(u8 fgEnable)
{
	u8 bData;
	MT8193_AUDIO_FUNC();
	if (fgEnable) {
		bData = bReadByteHdmiGRL(GRL_AUDIO_CFG);
		bData |= SACD_DST;
		vWriteByteHdmiGRL(GRL_AUDIO_CFG, bData);
	} else {
		bData = bReadByteHdmiGRL(GRL_AUDIO_CFG);
		bData &= ~SACD_DST;
		vWriteByteHdmiGRL(GRL_AUDIO_CFG, bData);
	}

}
void vDSTNormalDouble(u8 fgEnable)
{
	u8 bData;
	MT8193_AUDIO_FUNC();
	if (fgEnable) {
		bData = bReadByteHdmiGRL(GRL_AUDIO_CFG);
		bData |= DST_NORMAL_DOUBLE;
		vWriteByteHdmiGRL(GRL_AUDIO_CFG, bData);
	} else {
		bData = bReadByteHdmiGRL(GRL_AUDIO_CFG);
		bData &= ~DST_NORMAL_DOUBLE;
		vWriteByteHdmiGRL(GRL_AUDIO_CFG, bData);
	}

}
void vSetHdmiI2SDataFmt(u8 bFmt) 
{
  u8 bData;
  MT8193_AUDIO_FUNC();
  bData=bReadByteHdmiGRL(GRL_CFG0);
  bData &=~0x33;
  switch(bFmt)
  {
    case RJT_24BIT:
      bData |= (CFG0_I2S_MODE_RTJ|CFG0_I2S_MODE_24Bit);
    break;
    
    case RJT_16BIT:
      bData |= (CFG0_I2S_MODE_RTJ|CFG0_I2S_MODE_16Bit);
    break;
    
    case LJT_24BIT:
      bData |= (CFG0_I2S_MODE_LTJ|CFG0_I2S_MODE_24Bit);
    break;
    
    case LJT_16BIT:
      bData |= (CFG0_I2S_MODE_LTJ|CFG0_I2S_MODE_16Bit);
    break;
    
    case I2S_24BIT:
      bData |= (CFG0_I2S_MODE_I2S|CFG0_I2S_MODE_24Bit);
    break;
    
    case I2S_16BIT:
      bData |= (CFG0_I2S_MODE_I2S|CFG0_I2S_MODE_16Bit);
    break;	
  	
  }	
 

  vWriteByteHdmiGRL(GRL_CFG0, bData);
}  
void vAOUT_BNUM_SEL(BYTE bBitNum)
{
	MT8193_AUDIO_FUNC();
	vWriteByteHdmiGRL(GRL_AOUT_BNUM_SEL, bBitNum);

}
void vSetChannelSwap(u8 u1SwapBit)
{
	MT8193_AUDIO_FUNC();
	vWriteHdmiGRLMsk(GRL_CH_SWAP, u1SwapBit, 0xff);
}
void vHDMIAVUnMute(void)
{
  MT8193_AUDIO_FUNC();
  vUnBlackHDMIOnly();
  UnMuteHDMIAudio();
}
void vSetHdmiI2SChNum(u8 bChNum, u8 bChMapping)
{
    u8 bData, bData1, bData2, bData3;
    MT8193_AUDIO_FUNC();
    if(bChNum==2)//I2S 2ch
    {
      bData = 0x04;//2ch data
      bData1 = 0x50;//data0
      

    }
    else if((bChNum==3)||(bChNum==4))//I2S 2ch
    {
      if((bChNum==4)&&(bChMapping == 0x08))
      {
        bData = 0x14;//4ch data
       
      }
      else
      {
      bData = 0x0c;//4ch data
      }
      bData1 = 0x50;//data0
      

    }
    else if((bChNum == 6)||(bChNum == 5))//I2S 5.1ch
    {
     if((bChNum==6)&&(bChMapping == 0x0E))
     {
       bData = 0x3C;//6.0 ch data
       bData1 = 0x50;//data0	
     }	
     else
     {
       bData = 0x1C;//5.1ch data, 5/0ch
       bData1 = 0x50;//data0
     } 
    

    }
    else if(bChNum == 8)//I2S 5.1ch
    {
      bData = 0x3C;//7.1ch data
      bData1 = 0x50;//data0
    }	
    else if(bChNum == 7)//I2S 6.1ch
    {
      bData = 0x3C;//6.1ch data
      bData1 = 0x50;//data0
    }	
    else
    {
      bData = 0x04;//2ch data
      bData1 = 0x50;//data0	
    }	 
  
    bData2=0xc6;
    bData3=0xfa;
  
    vWriteByteHdmiGRL(GRL_CH_SW0, bData1);
    vWriteByteHdmiGRL(GRL_CH_SW1, bData2);
    vWriteByteHdmiGRL(GRL_CH_SW2, bData3);
    vWriteByteHdmiGRL(GRL_I2S_UV, bData);
    
    //vDisableDsdConfig(); 
	
}