mirror of
https://github.com/marqs85/ossc
synced 2026-11-12 01:43:12 +03:00
Merge borti4938's diy-audio code and fix audio format.
This commit is contained in:
1 parent
d548d53272
commit
fac88b348e
12 files changed
+1225
-1039
No files matched your search
@@ -312,4 +312,21 @@ bool HDMITX_DevLoopProc()
|
||||
return HPDChange;
|
||||
}
|
||||
|
||||
|
||||
void HDMITX_SetAudioInfoFrame(BYTE bAudioDwSampling)
|
||||
{
|
||||
Audio_InfoFrame AudioInfo;
|
||||
|
||||
AudioInfo.info.Type = AUDIO_INFOFRAME_TYPE;
|
||||
AudioInfo.info.Ver = AUDIO_INFOFRAME_VER;
|
||||
AudioInfo.info.Len = AUDIO_INFOFRAME_LEN;
|
||||
|
||||
AudioInfo.info.AudioChannelCount = 1; // 2 channels
|
||||
AudioInfo.info.AudioCodingType = 1; // PCM
|
||||
AudioInfo.info.SampleSize = 3; // 24bit
|
||||
AudioInfo.info.SampleFreq = bAudioDwSampling ? 3 : 5; //48kHz or 96kHz
|
||||
AudioInfo.info.SpeakerPlacement = 0; // Front left and front right
|
||||
AudioInfo.info.LevelShiftValue = 0;
|
||||
AudioInfo.info.DM_INH = 0; // Down-mix Inhibit Flag; 0=Permitted or no information about any assertion of this
|
||||
|
||||
EnableAudioInfoFrame(TRUE, (BYTE *) &AudioInfo);
|
||||
}
|
||||
@@ -26,4 +26,6 @@ bool HDMITX_IsSinkSupportColorDepth36(void);
|
||||
bool HDMITX_IsSinkSupportColorDepth30(void);
|
||||
void HDMITX_SetOutputColorDepth(int ColorDepth);
|
||||
|
||||
void HDMITX_SetAudioInfoFrame(BYTE bAudioDwSampling);
|
||||
|
||||
#endif /*HDMI_TX_H_*/
|
||||
@@ -523,6 +523,73 @@ BOOL EnableAudioOutput(ULONG VideoPixelClock,BYTE bAudioSampleFreq,BYTE ChannelN
|
||||
return TRUE ;
|
||||
}
|
||||
|
||||
BOOL EnableAudioOutput4OSSC(ULONG VideoPixelClock,BYTE bExtMCLK,BYTE bAudioDwSampl,BYTE bAudioSwapLR)
|
||||
{
|
||||
// set N and CTS
|
||||
ULONG n = 12288;
|
||||
ULONG cts = VideoPixelClock/1000;
|
||||
|
||||
if (bAudioDwSampl == 0x1)
|
||||
n = n>>1;
|
||||
|
||||
//program N
|
||||
Switch_HDMITX_Bank(1);
|
||||
HDMITX_WriteI2C_Byte(REGPktAudN0,(BYTE)((n)&0xFF));
|
||||
HDMITX_WriteI2C_Byte(REGPktAudN1,(BYTE)((n>>8)&0xFF));
|
||||
HDMITX_WriteI2C_Byte(REGPktAudN2,(BYTE)((n>>16)&0xF));
|
||||
//program CTS
|
||||
HDMITX_WriteI2C_Byte(REGPktAudCTS0, cts & 0xff);
|
||||
HDMITX_WriteI2C_Byte(REGPktAudCTS1,(cts>>8) & 0xff);
|
||||
HDMITX_WriteI2C_Byte(REGPktAudCTS2,(cts>>16) & 0xff);
|
||||
Switch_HDMITX_Bank(0);
|
||||
|
||||
#ifdef MANUAL_CTS
|
||||
HDMITX_WriteI2C_Byte(0xF8, 0xC3);
|
||||
HDMITX_WriteI2C_Byte(0xF8, 0xA5);
|
||||
HDMITX_WriteI2C_Byte(REG_TX_PKT_SINGLE_CTRL,B_SW_CTS);
|
||||
HDMITX_WriteI2C_Byte(0xF8, 0xFF);
|
||||
#else
|
||||
HDMITX_WriteI2C_Byte(REG_TX_PKT_SINGLE_CTRL,0); // D[1] = 0,HW auto count CTS
|
||||
#endif
|
||||
|
||||
// define internal/external MCLK and audio down-sampling
|
||||
HDMITX_SetREG_Byte(REG_TX_CLK_CTRL0,~(M_EXT_MCLK_SEL|B_EXT_MCLK_SAMP|B_EXT_MCLK4CTS),((bExtMCLK&0x1)<<O_MCLK_SAMP) | B_EXT_256FS | ((bExtMCLK&0x1)<<O_MCLK4CTS));
|
||||
//HDMITX_AndREG_Byte(REG_TX_SW_RST,~M_AUD_DIV);
|
||||
if (bAudioDwSampl == 0x1)
|
||||
HDMITX_OrREG_Byte(REG_TX_CLK_CTRL1,B_AUD_DIV2);
|
||||
|
||||
// set audio format
|
||||
Instance[0].TMDSClock = VideoPixelClock;
|
||||
BYTE fs = bAudioDwSampl == 0x1 ? AUDFS_48KHz : AUDFS_96KHz;
|
||||
Instance[0].bAudFs = fs;
|
||||
Instance[0].bOutputAudioMode = B_AUDFMT_32BIT_I2S;
|
||||
Instance[0].bAudioChannelSwap = bAudioSwapLR == 0x1 ? 0xf : 0x0; // swap channels
|
||||
BYTE AudioEnable = (0x1 & ~(M_AUD_SWL|B_SPDIFTC)) | M_AUD_24BIT;
|
||||
|
||||
HDMITX_WriteI2C_Byte(REG_TX_AUDIO_CTRL0,AudioEnable & 0xF0);
|
||||
|
||||
HDMITX_AndREG_Byte(REG_TX_SW_RST,~(B_AUD_RST|B_AREF_RST));
|
||||
HDMITX_WriteI2C_Byte(REG_TX_AUDIO_CTRL1,Instance[0].bOutputAudioMode);
|
||||
HDMITX_WriteI2C_Byte(REG_TX_AUDIO_FIFOMAP,0xE4); // default mapping.
|
||||
HDMITX_WriteI2C_Byte(REG_TX_AUDIO_CTRL3,(Instance[0].bAudioChannelSwap&0xF)|(AudioEnable&B_AUD_SPDIF));
|
||||
HDMITX_WriteI2C_Byte(REG_TX_AUD_SRCVALID_FLAT,B_AUD_SPXFLAT_SRC3|B_AUD_SPXFLAT_SRC2|B_AUD_SPXFLAT_SRC1|B_AUD_ERR2FLAT); // only two channels
|
||||
|
||||
Switch_HDMITX_Bank(1) ;
|
||||
HDMITX_WriteI2C_Byte(REG_TX_AUDCHST_MODE,0); // 2 audio channel without pre-emphasis
|
||||
HDMITX_WriteI2C_Byte(REG_TX_AUDCHST_CAT,0);
|
||||
HDMITX_WriteI2C_Byte(REG_TX_AUDCHST_SRCNUM,1);
|
||||
HDMITX_WriteI2C_Byte(REG_TX_AUD0CHST_CHTNUM,0);
|
||||
HDMITX_WriteI2C_Byte(REG_TX_AUDCHST_CA_FS,0xC0|fs); // choose clock
|
||||
fs = ~fs; // OFS is the one's complement of FS
|
||||
HDMITX_WriteI2C_Byte(REG_TX_AUDCHST_OFS_WL,(fs<<4)|AUD_SWL_24); // 24 bit Audio
|
||||
|
||||
Switch_HDMITX_Bank(0);
|
||||
HDMITX_WriteI2C_Byte(REG_TX_AUDIO_CTRL0,AudioEnable);
|
||||
|
||||
Instance[0].bAudioChannelEnable = AudioEnable;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL
|
||||
GetEDIDData(int EDIDBlockID,BYTE *pEDIDData)
|
||||
|
||||
@@ -233,6 +233,9 @@
|
||||
#define REG_TX_AUTH_STAT 0x46
|
||||
#define B_T_AUTH_DONE (1<<7)
|
||||
#define REG_TX_CLK_CTRL0 0x58
|
||||
#define O_MCLK_SAMP 7
|
||||
#define B_EXT_MCLK_SAMP (1<<O_MCLK_SAMP)
|
||||
#define B_INT_MCLK_SAMP (0<<O_MCLK_SAMP)
|
||||
#define O_OSCLK_SEL 5
|
||||
#define M_OSCLK_SEL 3
|
||||
#define B_AUTO_OVER_SAMPLING_CLOCK (1<<4)
|
||||
@@ -242,6 +245,9 @@
|
||||
#define B_EXT_256FS (1<<O_EXT_MCLK_SEL)
|
||||
#define B_EXT_512FS (2<<O_EXT_MCLK_SEL)
|
||||
#define B_EXT_1024FS (3<<O_EXT_MCLK_SEL)
|
||||
#define O_MCLK4CTS 1
|
||||
#define B_EXT_MCLK4CTS (1<<O_MCLK4CTS)
|
||||
#define B_INT_MCLK4CTS (0<<O_MCLK4CTS)
|
||||
|
||||
#define REG_TX_SHA_SEL 0x50
|
||||
#define REG_TX_SHA_RD_BYTE1 0x51
|
||||
@@ -815,6 +821,7 @@ BOOL ProgramDEGenModeByID(MODE_ID id,BYTE bInputSignalType) ;
|
||||
BOOL ProgramSyncEmbeddedVideoMode(BYTE VIC,BYTE bInputType) ;
|
||||
#endif
|
||||
BOOL EnableAudioOutput(unsigned long VideoPixelClock,BYTE bAudioSampleFreq,BYTE ChannelNumber,BYTE bAudSWL,BYTE bSPDIF) ;
|
||||
BOOL EnableAudioOutput4OSSC(ULONG VideoPixelClock,BYTE bExtMCLK,BYTE bAudioDwSampl,BYTE bAudioSwapLR) ;
|
||||
void DisableIT6613() ;
|
||||
void DisableVideoOutput() ;
|
||||
void DisableAudioOutput() ;
|
||||
|
||||
Reference in new issue
Block a user