AudioEqualizer_en_t AUDDRV_GetEquType( AUDDRV_TYPE_Enum_t   path )
{
#if ( defined(FUSE_DUAL_PROCESSOR_ARCHITECTURE) && defined(FUSE_APPS_PROCESSOR) )
	Log_DebugPrintf(LOGID_AUDIO, " AUDDRV_GetEquType (AP before read from CP) %d \n\r", sEqualizerType);
	sEqualizerType = (AudioEqualizer_en_t) audio_control_generic( AUDDRV_CPCMD_READ_AUDVOC_AEQMODE, (UInt32) path, 0, 0, 0, 0 );
	Log_DebugPrintf(LOGID_AUDIO, " AUDDRV_GetEquType (AP after read from CP) %d \n\r", sEqualizerType);
#else
	UInt16 * ptr=0;
	  // PCG could chagned the equ type from PC. 
	  // Read equ type from sysinterface/dsp/audio/audioapi.c.
	ptr = (UInt16 *) AUDIO_GetAudioParam( PARAM_AUDVOC_AEQMODE );
	sEqualizerType = (AudioEqualizer_en_t) *ptr;
	Log_DebugPrintf(LOGID_AUDIO, " AUDDRV_GetEquType (CP) %d \n\r", sEqualizerType);
#endif
	return sEqualizerType;
}
Пример #2
0
//============================================================================
//
// Function Name: chal_audiomixertap_EnableNb
//
// Description:   Enable or Disable NB MIXER TAP
//
//============================================================================
cVoid chal_audiomixertap_EnableNb(
		CHAL_HANDLE handle,
		Boolean		enable
		)
{
	Log_DebugPrintf(LOGID_SOC_AUDIO_DETAIL, "chal_audiomixertap_EnableNb: enable = %d", enable );
	BRCM_WRITE_REG_FIELD( sMixerTap.base, DSP_AUDIO_BTMIXER_CFG2_R, BTNB_ENABLE, enable );
}
Пример #3
0
//============================================================================
//
// Function Name: chal_audiomixertap_DisableWbAudInt
//
// Description:   Disable audio interrupt in WB mixer Tap
//
//============================================================================
cVoid chal_audiomixertap_DisableWbAudInt(
		CHAL_HANDLE handle,
		Boolean		disable
		)
{
	Log_DebugPrintf(LOGID_SOC_AUDIO_DETAIL, "chal_audiomixertap_DisableWbAudInt" );
	BRCM_WRITE_REG_FIELD( sMixerTap.base, DSP_AUDIO_BTMIXER_CFG_R, BTMIXER_WBINTDIS, disable );
}
Пример #4
0
//============================================================================
//
// Function Name: chal_audiomixertap_EnableWbDma
//
// Description:   Enable DMA in WB mixer Tap
//
//============================================================================
cVoid chal_audiomixertap_EnableWbDma(
		CHAL_HANDLE handle,
		Boolean		enable
		)
{
	Log_DebugPrintf(LOGID_SOC_AUDIO_DETAIL, "chal_audiomixertap_EnableWbDma" );
	BRCM_WRITE_REG_FIELD( sMixerTap.base, DSP_AUDIO_BTMIXER_CFG_R, BTMIXER_DMA_EN, enable );
}
// ==========================================================================
//
// Function Name: BTW_DMA_CB
//
// Description: The callback function when there is DMA request to audio path 
//
// =========================================================================
static void BTW_DMA_CB(OSDAL_DMA_CALLBACK_STATUS status)
{
	CSL_AUDVOC_Drv_t	*audDrv = NULL;

	Log_DebugPrintf(LOGID_SOC_AUDIO, "BTW_DMA_CB:: DMA callback.\n");

	if (status != OSDAL_ERR_OK)
	{
		Log_DebugPrintf(LOGID_SOC_AUDIO, "BTW_DMA_CB:: Fatal error! DMA transfer failure.\n");
		return;
	}
	
	audDrv = GetDriverByType(CSL_AUDVOC_STREAM_BTW);
	
	if (audDrv->dmaCB != NULL)
		audDrv->dmaCB(audDrv->streamID);
}
Пример #6
0
//============================================================================
//
// Function Name: AUDIO_DRIVER_Write
//
// Description:   This function is used to set the ring buffer pointer and size from which data
//                 has to be written.
//
//============================================================================
void AUDIO_DRIVER_Write(AUDIO_DRIVER_HANDLE_t drv_handle,
                   UInt8* pBuf,
                   UInt32 nBufSize)
{
    Log_DebugPrintf(LOGID_AUDIO,"AUDIO_DRIVER_Write::  \n"  );

    return;
}
// ==========================================================================
//
// Function Name: csl_audvoc_capture_init
//
// Description: Init audio path capture. 
//
// =========================================================================
UInt32 csl_audio_capture_init( CSL_AUDIO_DEVICE_e source, CSL_AUDIO_DEVICE_e sink )
{
	OSDAL_DMA_CLIENT	srcClient = OSDAL_DMA_CLIENT_AUDIO_IN_FIFO;
	CSL_AUDVOC_Drv_t	*audDrv = NULL;
	UInt32 streamID = CSL_AUDVOC_STREAM_NONE;

	Log_DebugPrintf(LOGID_SOC_AUDIO, "csl_audvoc_capture_init:: \n");
	if (source == CSL_AUDVOC_DEV_CAPTURE_BTW)
		srcClient = OSDAL_DMA_CLIENT_AUDIO_WB_MIXERTAP;
		
	// Get DMA channel
    if(OSDAL_DMA_Obtain_Channel(srcClient, OSDAL_DMA_CLIENT_MEMORY, &dmaChAudio) != OSDAL_ERR_OK)
    {
        Log_DebugPrintf(LOGID_SOC_AUDIO, "csl_audvoc_capture_init:: Error, Obtain channel failed.\n");
		return CSL_AUDVOC_STREAM_NONE;
    }

	Log_DebugPrintf(LOGID_SOC_AUDIO, "csl_audvoc_capture_init:: DMA channel for audio path capture 0x%x\n", dmaChAudio);

	if (source == CSL_AUDVOC_DEV_CAPTURE_AUDIO)
	{
		streamID = CSL_AUDVOC_STREAM_AUDIO;
	}
	else if (source == CSL_AUDVOC_DEV_CAPTURE_BTW)
	{
		streamID = CSL_AUDVOC_STREAM_BTW;
	}
	else
	{
		return streamID;     
	}
	
	audDrv = GetDriverByType (streamID);

	if (audDrv == NULL)
		return CSL_AUDVOC_STREAM_NONE;
	
	memset(audDrv, 0, sizeof(CSL_AUDVOC_Drv_t));
	audDrv->streamID = streamID;
	audDrv->source = source;
	audDrv->sink = sink;
	audDrv->dmaCH = dmaChAudio;
	
	return audDrv->streamID;
}
Пример #8
0
void EEM_RegisterRecvCb(eem_cb_t *cbs)
{
    if(!cbs)
    {
        Log_DebugPrintf(LOGID_SYSEEMRPC, "EEM_RegisterRecvCb NULL cbs");
        return;
    }
    memcpy(&sEemCb, cbs, sizeof(eem_cb_t));
}
static SysAudioParm_t* AudioParmAccessor(UInt32 app,UInt32 mode)
{

    SysAudioParm_t* parm_ptr;

    SysAudioParm_t** p_parm_ptr;

    Log_DebugPrintf(LOGID_AUDIO,"\n  app - %d mode - %d\n",app,mode);

    parm_ptr = SYSPARM_GetExtAudioParmAccessPtr(app);
    p_parm_ptr =(SysAudioParm_t**)parm_ptr;

    Log_DebugPrintf(LOGID_AUDIO,"\n  volume_max - %d\n",p_parm_ptr[0][mode].voice_volume_max);

    Log_DebugPrintf(LOGID_AUDIO,"\n  ext_speaker_pga - %d\n",p_parm_ptr[0][mode].ext_speaker_pga);

    return &p_parm_ptr[0][mode];
}
Пример #10
0
//============================================================================
//
// Function Name: AUDIO_DRIVER_UpdateBuffer
//
// Description:   This function is used to update the buffer indexes
//
//============================================================================
void AUDIO_DRIVER_UpdateBuffer (AUDIO_DRIVER_HANDLE_t drv_handle,
                                UInt8* pBuf,
                                UInt32 nBufSize,
                                UInt32 nCurrentIndex,
                                UInt32 nSize)
{
    Log_DebugPrintf(LOGID_AUDIO,"AUDIO_DRIVER_UpdateBuffer::  \n"  );
    return;
}
// ==========================================================================
//
// Function Name: csl_audvoc_render_init
//
// Description: Init the audio path render
//
// =========================================================================
UInt32 csl_audio_render_init (CSL_AUDIO_DEVICE_e source, CSL_AUDIO_DEVICE_e sink)
{
	OSDAL_DMA_CLIENT	dstClient = OSDAL_DMA_CLIENT_AUDIO_OUT_FIFO;
	CSL_AUDVOC_Drv_t	*audDrv = NULL;
	UInt32 streamID = CSL_AUDVOC_STREAM_NONE;
	
	if (sink == CSL_AUDVOC_DEV_RENDER_POLYRINGER)
		dstClient = OSDAL_DMA_CLIENT_POLYRING_OUT_FIFO;
	
	// Get DMA channel
    if(OSDAL_DMA_Obtain_Channel(OSDAL_DMA_CLIENT_MEMORY, dstClient, &dmaChAudio) != OSDAL_ERR_OK)
    {
        Log_DebugPrintf(LOGID_SOC_AUDIO, "csl_audvoc_render_init:: Error, Obtain channel failed.\n");
		return CSL_AUDVOC_STREAM_NONE;
    }

	Log_DebugPrintf(LOGID_SOC_AUDIO, "csl_audvoc_render_init:: DMA channel for audio path render 0x%x\n", dmaChAudio);

	if (sink == CSL_AUDVOC_DEV_RENDER_AUDIO)
	{
		streamID = CSL_AUDVOC_STREAM_AUDIO;
	}
	else if (sink == CSL_AUDVOC_DEV_RENDER_POLYRINGER)
	{
		streamID = CSL_AUDVOC_STREAM_POLYRINGER;
	}
	else
	{
		return streamID;     
	}
	
	audDrv = GetDriverByType (streamID);

	if (audDrv == NULL)
		return CSL_AUDVOC_STREAM_NONE;
	
	memset(audDrv, 0, sizeof(CSL_AUDVOC_Drv_t));
	audDrv->streamID = streamID;
	audDrv->source = source;
	audDrv->sink = sink;
	audDrv->dmaCH = dmaChAudio;
	
	return audDrv->streamID;
}
Пример #12
0
//============================================================================
//
// Function Name: AUDIO_DRIVER_CaptureFMCallback
//
// Description:   This function processes the callback from the dma
//
//============================================================================
static Boolean AUDIO_DRIVER_CaptureFMCallback(Boolean ok)
{
    //Log_DebugPrintf(LOGID_AUDIO,"AUDIO_DRIVER_CaptureFMCallback::\n");


    if((audio_capture_driver == NULL))
    {
        Log_DebugPrintf(LOGID_AUDIO, "AUDIO_DRIVER_CaptureFMCallback:: Spurious call back\n");
        return 0;
    }
    if(audio_capture_driver->pCallback != NULL)
    {
        audio_capture_driver->pCallback(audio_capture_driver);
    }
    else
        Log_DebugPrintf(LOGID_AUDIO, "AUDIO_DRIVER_CaptureFMCallback:: No callback registerd\n");

    return 0;
}
Пример #13
0
static void AUDIO_DRIVER_RenderDmaCallback(UInt32 stream_id)
{

    //Log_DebugPrintf(LOGID_AUDIO,"AUDIO_DRIVER_RenderDmaCallback::\n");

    if((audio_render_driver == NULL))
    {
        Log_DebugPrintf(LOGID_AUDIO, "AUDIO_DRIVER_RenderDmaCallback:: Spurious call back\n");
		return;
    }
    if(audio_render_driver->pCallback != NULL)
    {
        audio_render_driver->pCallback(audio_render_driver);
    }
    else
        Log_DebugPrintf(LOGID_AUDIO, "AUDIO_DRIVER_RenderDmaCallback:: No callback registerd\n");
    
    return;
}
// ==========================================================================
//
// Function Name: CheckBufDoneUponStop
//
// Description: Check if there is a pending buffer done CB when we are stopping 
//
// =========================================================================
static void CheckBufDoneUponStop (VORENDER_Drv_t	*audDrv)
{
	// If a buffer has been copied to driver queue and bufDoneCB is not called, 
	// we need to call the buffer done
	if (audDrv->srcBufCopied < audDrv->srcBufSize)
	{
		Log_DebugPrintf(LOGID_SOC_AUDIO, "%s Catch a pending bufDoneCB! total buffer size 0x%x, copied buffer size 0x%x.", __FUNCTION__, audDrv->srcBufSize, audDrv->srcBufCopied);
		audDrv->bufDoneCb (audDrv->srcBuf, audDrv->srcBufCopied, audDrv->drvType);
	}
}
Пример #15
0
void AUDDRV_SetEquType( 
					AUDDRV_TYPE_Enum_t   path,
					AudioEqualizer_en_t	 equ_id
					)
{

#if ( defined(FUSE_DUAL_PROCESSOR_ARCHITECTURE) && defined(FUSE_APPS_PROCESSOR) )
	sEqualizerType = equ_id;

	Log_DebugPrintf(LOGID_AUDIO, " AUDDRV_SetEquType (AP) %d \n\r", sEqualizerType);
	audio_control_generic( AUDDRV_CPCMD_WRITE_AUDVOC_AEQMODE, (UInt32) equ_id, 0, 0, 0, 0 );

#else

	SysCalDataInd_t* pSysparm;
	pSysparm = SYSPARM_GetAudioParmAccessPtr();

	sEqualizerType = equ_id;

	Log_DebugPrintf(LOGID_AUDIO, " AUDDRV_SetEquType (CP) %d \n\r", sEqualizerType);

	  // CP: update audvoc_aeqMode in sysinterface/dsp/audio/audioapi.c
	AUDIO_SetAudioParam( PARAM_AUDVOC_AEQMODE, (void *) & sEqualizerType );

	 //set these parameters
	AUDDRV_SetFilter( AUDDRV_AEQPATHGAIN, (const UInt16 *)& pSysparm->AUDVOC_AEQPATHGAIN[ sEqualizerType ][0] );
	AUDDRV_SetFilter( AUDDRV_AEQ, (const UInt16 *)& pSysparm->AUDVOC_AEQCOF[ sEqualizerType ][0] );

	AUDDRV_SetFilter( AUDDRV_PEQPATHGAIN, (const UInt16 *)& pSysparm->AUDVOC_PEQPATHGAIN[ sEqualizerType ][0] );
	AUDDRV_SetFilter( AUDDRV_PEQ, (const UInt16 *)& pSysparm->AUDVOC_PEQCOF[ sEqualizerType ][0] );
	//AUDDRV_SetFilter( AUDDRV_PEQPATHOFST, (const UInt16 *)& pSysparm->AUDVOC_PEQCOF[ sEqualizerType ][0] );

	//to remove this after the sys parm are readable at AP

	AUDDRV_SetFilter( AUDDRV_AFIR,			(const UInt16 *) & SYSPARM_GetAudioParmAccessPtr()->AUDVOC_ADAC_FIR[0] );
	Log_DebugPrintf(LOGID_AUDIO, " AUDDRV_SetEquType (CP) FIR [0] %x, [32] %x, [33] %x \n\r", 
			SYSPARM_GetAudioParmAccessPtr()->AUDVOC_ADAC_FIR[0],
			SYSPARM_GetAudioParmAccessPtr()->AUDVOC_ADAC_FIR[32],
			SYSPARM_GetAudioParmAccessPtr()->AUDVOC_ADAC_FIR[33]
			);

#endif
}
// ==========================================================================
//
// Function Name: csl_audio_render_resume
//
// Description: Resume the data transfer of audio path render
//
// =========================================================================
Result_t csl_audio_render_resume( UInt32 streamID )
{
	Log_DebugPrintf(LOGID_SOC_AUDIO, "csl_audvoc_render_resume streamID=%d.\n", streamID);
#if 0
	if (streamID == CSL_AUDVOC_STREAM_AUDIO)
	{
		// pre-fill fifo
		UInt32 zeroSamples[CHAL_AOFIFO_SIZE] = {0};
		chal_audioaopath_WriteFifo (NULL, &zeroSamples[0], CHAL_AOFIFO_SIZE);
	// enable DMA
		AUDDRV_EnableHWOutput (
			AUDDRV_AUDIO_OUTPUT,
			AUDDRV_SPKR_NONE,  //this param bears no meaning in this context.
			FALSE,	//this param bears no meaning in this context.
			AUDIO_SAMPLING_RATE_UNDEFINED,  //this param bears no meaning in this context.
			AUDIO_CHANNEL_STEREO,
			AUDDRV_REASON_DATA_DRIVER
       );
	}
	else if (streamID == CSL_AUDVOC_STREAM_POLYRINGER)
	{
		// pre-fill fifo
		UInt32 zeroSamples[CHAL_POFIFO_SIZE] = {0};
		chal_audiopopath_WriteFifo (NULL, &zeroSamples[0], CHAL_POFIFO_SIZE);
	// enable DMA
		AUDDRV_EnableHWOutput (
			AUDDRV_RINGTONE_OUTPUT,
			AUDDRV_SPKR_NONE,  //this param bears no meaning in this context.
			FALSE,	//this param bears no meaning in this context.
			AUDIO_SAMPLING_RATE_UNDEFINED,  //this param bears no meaning in this context.
			AUDIO_CHANNEL_STEREO,
			AUDDRV_REASON_DATA_DRIVER
       );			
	}
#else
    	if (streamID == CSL_AUDVOC_STREAM_AUDIO)
	{
		// pre-fill fifo
		UInt32 zeroSamples[CHAL_AOFIFO_SIZE] = {0};
		chal_audioaopath_WriteFifo (NULL, &zeroSamples[0], CHAL_AOFIFO_SIZE);
		// enable DMA
		chal_audioaopath_EnableDMA(NULL, TRUE);
	}
	else if (streamID == CSL_AUDVOC_STREAM_POLYRINGER)
	{
		// pre-fill fifo
		UInt32 zeroSamples[CHAL_POFIFO_SIZE] = {0};
		chal_audiopopath_WriteFifo (NULL, &zeroSamples[0], CHAL_POFIFO_SIZE);
		// enable DMA
		chal_audiopopath_EnableDMA(NULL, TRUE);		
	}
#endif
    
	return RESULT_OK;
}
Пример #17
0
void AUDDRV_Disable_Output ( AUDDRV_InOut_Enum_t  path )
{
#if defined(FUSE_APPS_PROCESSOR)
	switch(path) 
	{
		case AUDDRV_VOICE_OUTPUT:
				
			Log_DebugPrintf(LOGID_AUDIO, "\n\r\t* AUDDRV_Disable_Output *\n\r" );

			if(inVoiceCall != TRUE)
			{
				if ( voiceInPathEnabled==FALSE )
				{
				//if inVoiceCall== TRUE, assume the telphony_init() function sends ENABLE and CONNECT_DL
				audio_control_dsp(DSPCMD_TYPE_AUDIO_CONNECT_DL, 0, 0, 0, 0, 0 );
				audio_control_dsp(DSPCMD_TYPE_AUDIO_ENABLE, 0, 0, 0, 0, 0 );
				voicePlayOutpathEnabled = FALSE;
				Log_DebugPrintf(LOGID_AUDIO, "\n\r\t* AUDDRV_Disable_Output: inVoiceCall = %d, voicePlayOutpathEnabled = %d\n\r", voicePlayOutpathEnabled);
				}
			}
			
			if (currVoiceSpkr == AUDDRV_SPKR_PCM_IF)  //turn off PCM i/f
			{
				currVoiceSpkr = AUDDRV_SPKR_NONE;
				if(currVoiceMic != AUDDRV_MIC_PCM_IF)
					VPRIPCMDQ_DigitalSound( FALSE );
			} //else, no need to care PCM i/f.

			currVoiceSpkr = AUDDRV_SPKR_NONE;

			break;
			
		default:
			break;
	}

	OSTASK_Sleep( 3 ); //make sure audio is done

	AUDDRV_DisableHWOutput ( path, AUDDRV_REASON_HW_CTRL );
#endif //#if defined(FUSE_APPS_PROCESSOR)	

}
// ==========================================================================
//
// Function Name: GetDriverByType
//
// Description: Get the audio render driver reference from the steamID.
//
// =========================================================================
static CSL_AUDVOC_Drv_t* GetDriverByType (UInt32 streamID)
{
	CSL_AUDVOC_Drv_t	*audDrv = NULL;

	if (streamID != CSL_AUDVOC_STREAM_NONE)
		audDrv = &sAudvocDrv[streamID];
	else
		Log_DebugPrintf(LOGID_SOC_AUDIO, "%s GetDriverByType:: Doesn't support audio driver streamID = 0x%x\n", __FILE__, streamID);

	return audDrv;
}
// =========================================================================
// Function Name: AMRWB_Render_Request
//
//	Description: DSP AMRWB Request new data. The DSP interrupt handler will call it to request
// new data.
//==================================================================================== 
void AMRWB_Render_Request(VPStatQ_t reqMsg)
{
	VORENDER_MSG_t	msg;
	VORENDER_Drv_t	*audDrv = NULL;

	// we may still get dsp int after task is gone, ignore these late fellows
	audDrv = GetDriverByType (VORENDER_TYPE_AMRWB);
	if ((audDrv == NULL) || (audDrv->isRunning == FALSE))
	{
		Log_DebugPrintf(LOGID_AUDIO, "## [AMRWB][%s] entered wrong state ##\n", __FUNCTION__);
		return;
	}
	memset (&msg, 0, sizeof(VORENDER_MSG_t));

	switch (reqMsg.status)
	{
		case VP_STATUS_PRAM_CODEC_DONEPLAY:
			// dsp finishes play, need to stop.
			OSSEMAPHORE_Release (audDrv->stopDspAmrWbSema);
			break;

		case VP_STATUS_PRAM_CODEC_INPUT_EMPTY:
		case VP_STATUS_PRAM_CODEC_INPUT_LOW:
			msg.msgID = VORENDER_MSG_SHM_REQUEST;
			msg.parm1 = reqMsg.arg1; //dsp_read_index
			msg.parm2 = reqMsg.arg2; //dsp_write_index
			OSQUEUE_Post(sAMRWB_Drv.msgQueue, (QMsg_t*)&msg, TICKS_FOREVER);
			break;
#if 0 // not supported by DSP since Athena
		case VP_STATUS_PRAM_CODEC_CANCELPLAY:
			// dsp cancels play, need to stop immediately. 
			// should go through normal process, set done flag, disble vpu stuff ???
			msg.msgID = VORENDER_MSG_STOP;
			OSQUEUE_Post(sAMRWB_Drv.msgQueue, (QMsg_t*)&msg, TICKS_FOREVER);
			break;
#endif			
		default:
			Log_DebugPrintf(LOGID_AUDIO, "## [AMRWB][%s] received unknown msg ##\n", __FUNCTION__);
			break;
	}
}
Пример #20
0
void AUDDRV_Telephony_SelectMicSpkr (
					AUDDRV_MIC_Enum_t   mic,
					AUDDRV_SPKR_Enum_t  speaker )
{
	Log_DebugPrintf(LOGID_AUDIO, "\n\r\t* AUDDRV_Telephony_SelectMicSpkr (1) mic %d, spkr %d *\n\r", mic, speaker);

#if defined(FUSE_APPS_PROCESSOR)
  #if defined(THUNDERBIRD)
			//thunderbird, loud speaker go to PMU
		if( currVoiceMic == mic && currVoiceSpkr == speaker)
			return;
  #else
			//AthenaRay board
			// loud speaker should go to PMU, but right now, using the same as HANDSET
		//if( currVoiceMic == mic && currVoiceSpkr == speaker)
		//	return;
  #endif

	Log_DebugPrintf(LOGID_AUDIO, "\n\r\t* AUDDRV_Telephony_SelectMicSpkr (2) mic %d, spkr %d *\n\r", mic, speaker);

	currVoiceMic = mic;
	currVoiceSpkr = speaker;

	//need to follow the sequence. avoid enable again
	AUDDRV_SelectSpkr( AUDDRV_VOICE_OUTPUT, speaker, AUDDRV_SPKR_NONE );

	//select mic input, include DMIC support
	AUDDRV_SelectMic( AUDDRV_VOICE_INPUT, mic);

	//if( speaker == AUDDRV_SPKR_PCM_IF || mic==AUDDRV_MIC_PCM_IF )
	if( mic==AUDDRV_MIC_PCM_IF )
	{
		//use audio_control_dsp( ), and combine this file with csl_aud_drv_hw.c
		AUDDRV_SetPCMOnOff( 1 );
	}
	else
	{
		AUDDRV_SetPCMOnOff( 0 );
	}
#endif //#if defined(FUSE_APPS_PROCESSOR)
}
Пример #21
0
void EEM_Init(void)
{
    RPC_Result_t result;

    result = RPC_PACKET_RegisterDataInd (0,INTERFACE_USB_EEM, EEM_DataIndCb, EEM_FlowControlCb);
    Log_DebugPrintf(LOGID_SYSEEMRPC, "AP EEM_Init result:%d", result);    
	
	eem_data_Queue = OSQUEUE_Create(QUEUESIZE_EEM, sizeof(EEM_QueueEntry_t), OSSUSPEND_PRIORITY);
	OSQUEUE_ChangeName (eem_data_Queue, "EEMQ");
	OSTASK_Create( eemDataTask_Entry, (TName_t)"EEMT", NORMAL, STACKSIZE_MSC*2);

}
// ==========================================================================
//
// Function Name: csl_audvoc_capture_pause
//
// Description: Pause the data transfer of the audio path capture
//
// =========================================================================
Result_t csl_audio_capture_pause( UInt32 streamID )
{
	
	Log_DebugPrintf(LOGID_AUDIO, " csl_audvoc_capture_pause:: streamID = 0x%x.\n", streamID);

	if (streamID == CSL_AUDVOC_STREAM_AUDIO)	
		chal_audioaipath_EnableDMA(NULL, FALSE);
	else if (streamID == CSL_AUDVOC_STREAM_BTW)
		chal_audiomixertap_EnableWbDma(NULL, FALSE);
	
	return RESULT_OK;
}
Пример #23
0
static enum hrtimer_restart hrtimer_callback( struct hrtimer *timer )
{
    if ( intr_workqueue )
    {
        hrtimer_forward_now(timer, ktime);
        queue_work(intr_workqueue, &intr_work);
        Log_DebugPrintf(LOGID_AUDIO," hrtimer_callback \r\n");
        return HRTIMER_RESTART;
    }
    printk(" hrtimer_callback timer not started again\r\n");
    return HRTIMER_NORESTART;
}
//=============================================================================
//
// Function Name: AUDDRV_SetTelephonyMicMute
//
// Description:   UL Mute/Unmute
//
//=============================================================================
void AUDDRV_SetTelephonyMicMute(Boolean mute)
{
    if( voiceULMute != mute )
    {
        voiceULMute = mute;

        if( AUDDRV_GetVCflag() )
        {
            if ( !voiceULMute )
            {
                Log_DebugPrintf(LOGID_AUDIO, "\n\r\t* AUDDRV_SetTelephonyMicMute : DSP UL is unmuted \n\r");
                audio_control_dsp( DSPCMD_TYPE_UNMUTE_DSP_UL, 0, 0, 0, 0, 0 );
            }
            else
            {
                Log_DebugPrintf(LOGID_AUDIO, "\n\r\t* AUDDRV_SetTelephonyMicMute : DSP UL is muted \n\r");
                audio_control_dsp( DSPCMD_TYPE_MUTE_DSP_UL, 0, 0, 0, 0, 0 );
            }
        }
    }
}
// =========================================================================
// Function Name: ARM2SP2_Render_Request
//
//	Description: DSP ARM2SP2 Request new data. The DSP interrupt handler will call it to request
// new data.
//==================================================================================== 
void ARM2SP2_Render_Request(VPStatQ_t reqMsg)
{
	VORENDER_MSG_t	msg;

	Log_DebugPrintf(LOGID_AUDIO, "ARM2SP_Render_Request:: render interrupt callback. arg1 = 0x%x\n", reqMsg.arg1);

	memset (&msg, 0, sizeof(VORENDER_MSG_t));
	msg.msgID = VORENDER_MSG_SHM_REQUEST;
	msg.parm1 = reqMsg.arg1; // buffer position

	OSQUEUE_Post(sARM2SP_Drv[AUDDRV_ARM2SP_GetInstanceID(VORENDER_TYPE_PCM_ARM2SP2)].msgQueue, (QMsg_t*)&msg, TICKS_FOREVER);	
	
}
// =========================================================================
// Function Name: VPU_Render_Request
//
//	Description: DSP VPU Request new data. The DSP interrupt handler will call it to request
// new data.
//==================================================================================== 
void VPU_Render_Request(VPStatQ_t reqMsg)
{
	VORENDER_MSG_t	msg;

	Log_DebugPrintf(LOGID_AUDIO, "VPU_Render_Request:: render interrupt callback.\n");

	memset (&msg, 0, sizeof(VORENDER_MSG_t));
	msg.msgID = VORENDER_MSG_SHM_REQUEST;
	msg.parm1 = reqMsg.arg0; // buffer index

	OSQUEUE_Post(sVPU_Drv.msgQueue, (QMsg_t*)&msg, TICKS_FOREVER);	
	
}
Пример #27
0
//============================================================================
//
// Function Name: chal_audioaopath_SetSlopeGain
//
// Description:   Set Left/Right slope gain in Audio Output Path
//
//============================================================================
cVoid chal_audioaopath_SetSlopeGain(
		CHAL_HANDLE handle,
		cInt32		left_gain,
		cInt32		right_gain
		)
{
	//chal_audio_aopath_t * dev = (chal_audio_aopath_t *) handle;
    UInt32 reg_addr;
	DSP_AUDIO_ALSLOPGAIN_R_TYPE reg_value = 0;

	cInt16 gain=0;

	if(left_gain>0 || right_gain>0)
		return;

	// left gain
	gain = (left_gain/25) + 0x1FF;
	if (gain<0)
		gain=0;

    reg_addr = sAOPath.base + DSP_AUDIO_ALSLOPGAIN_R_OFFSET;
	reg_value = DSP_AUDIO_ALSLOPGAIN_R_ALSLOPGAINEN_MASK | (SLOPE_GAIN_MODE << DSP_AUDIO_ALSLOPGAIN_R_ALSLOPMOD_SHIFT);
	reg_value = reg_value | ( gain << DSP_AUDIO_ALSLOPGAIN_R_ALTARGETGAIN_SHIFT );
	*(volatile UInt16 *) reg_addr = reg_value;
	
	Log_DebugPrintf(LOGID_SOC_AUDIO_DETAIL, "chal_audioaopath_SetSlopeGain: left gain=0x%x \n", gain );

	// right gain
	gain = (right_gain/25) + 0x1FF;
	if (gain<0)
		gain=0;

    reg_addr = sAOPath.base + DSP_AUDIO_ARSLOPGAIN_R_OFFSET;
	reg_value = DSP_AUDIO_ARSLOPGAIN_R_ARSLOPGAINEN_MASK | (SLOPE_GAIN_MODE << DSP_AUDIO_ARSLOPGAIN_R_ARSLOPMOD_SHIFT);
	reg_value = reg_value | ( gain << DSP_AUDIO_ARSLOPGAIN_R_ARTARGETGAIN_SHIFT );
	*(volatile UInt16 *) reg_addr = reg_value;

	Log_DebugPrintf(LOGID_SOC_AUDIO_DETAIL, "chal_audioaopath_SetSlopeGain: right gain=0x%x \n", gain );
}
static void IPC_AudioRxTaskEntry( void ) 
{
   
  Log_DebugPrintf(LOGID_AUDIO, "IPC_AudioRxTaskEntry\n");

  while (TRUE) 
  {
      
     IPC_ProcessEvents();
     OSTASK_Sleep( TICKS_ONE_SECOND / 50 );

  }
}
Пример #29
0
//******************************************************************************
// Function Name:	CP_Audio_ISR_TaskEntry
//
// Description:		This is the task entry to process both audio and VPU related status 
//******************************************************************************
static void CP_Audio_ISR_TaskEntry( void ) 
{

	ISRCMD_t cmd;

	while(1)
	{
		OSQUEUE_Pend(qAudioMsg, (QMsg_t *)&cmd, TICKS_FOREVER );
		if (cmd.type == TYPE_SEND_IPC_AUDIO_CTRL)
		{
			StatQ_t msg;

			msg = cmd.payload;
			Log_DebugPrintf(LOGID_AUDIO, "CP_Audio_ISR_TaskEntry (AUDIO Type): 0x%x  : 0x%x : 0x%x :0x%x \r\n",msg.status,msg.arg0,msg.arg1,msg.arg2);
			IPC_AudioControlSend((char *)&msg, sizeof(StatQ_t));
		}
		else
			Log_DebugPrintf(LOGID_AUDIO, "CP_Audio_ISR_TaskEntry invalid status type \r\n");

	}

}
//**************************************************
void AudioControlAp_DeliveryFunction	(IPC_Buffer Buffer)
{
	char *		Response		= IPC_BufferDataPointer (Buffer);
	U32			ResponseLength	= IPC_BufferDataSize  (Buffer);
    char dd[256];

	//(void) dprintf(5, "\n\nAudioControlCp_DeliveryFunction: Length %d. First 16 bytes...\n\n", ResponseLength);
    memcpy(dd, Response, ResponseLength);

#if 0
	{
    int i=0;
    Log_DebugPrintf(LOGID_AUDIO,"\n%02X %02X %02X %02X %02X %02X %02X %02X\n", dd[i], dd[i+1], dd[i+2], dd[i+3], dd[i+4], dd[i+5], dd[i+6], dd[i+7]);
    i=8;
    Log_DebugPrintf(LOGID_AUDIO,"\n%02X %02X %02X %02X %02X %02X %02X %02X\n", dd[i], dd[i+1], dd[i+2], dd[i+3], dd[i+4], dd[i+5], dd[i+6], dd[i+7]);
    i=16;
	}
#endif

    IPC_process_dsp_interrupt(dd, ResponseLength);

	IPC_FreeBuffer (Buffer);
}