view gsm-fw/L1/audio_cfile/l1audio_stereo.c @ 992:a7b0b426f9ca

target-utils: boot ROM UART autodetection revamped The new implementation should work with both the familiar Calypso C035 boot ROM version found in our regular targets as well as the older Calypso F741979B version found on the vintage D-Sample board.
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Wed, 30 Dec 2015 21:28:41 +0000
parents 262fcce10859
children
line wrap: on
line source

/*
 * l1audio_stereo.c
 *
 * Control audio
 *
 *        Filename l1audio_stereo.c
 *  Copyright 2003 (C) Texas Instruments
 *
 *
 */

#include "l1_macro.h"
#include "l1_confg.h"

#define _L1AUDIO_STEREO_C_

#if (AUDIO_TASK == 1)

#include "l1_types.h"
#include "sys_types.h"

#if (CODE_VERSION == SIMULATION) && (AUDIO_SIMULATION)


#include <stdlib.h>
#include <string.h>

#include "iq.h"             // Debug / Init hardware  ("eva3.lib")
#include "l1_ver.h"
#include "l1_const.h"
#include "l1_signa.h"

#if TESTMODE
#include "l1tm_defty.h"
#endif

#include "l1audio_const.h"
#include "l1audio_cust.h"
#include "l1audio_signa.h"
#include "l1audio_defty.h"
#include "l1audio_msgty.h"

#if (L1_GTT == 1)
#include "l1gtt_const.h"
#include "l1gtt_defty.h"
#endif
//added here from e-sample for AAC
#if (L1_DYN_DSP_DWNLD == 1)
#include "l1_dyn_dwl_const.h"
#include "l1_dyn_dwl_defty.h"
#endif
#if (L1_MP3 == 1)
#include "l1mp3_defty.h"
#endif

#if (L1_MIDI == 1)
#include "l1midi_defty.h"
#endif
//added here from e-sample for AAC
#if (L1_AAC == 1)
#include "l1aac_defty.h"
#endif

#include "l1_defty.h"
#include "cust_os.h"
#include "l1_msgty.h"
#include "l1_varex.h"

#include "l1_mftab.h"
#include "l1_tabs.h"
#include "l1_ctl.h"

#include "l1_time.h"
#include "l1_scen.h"

#if (L1_STEREOPATH == 1)
#include "sys_dma.h"
#include "sys_inth.h"
#include "abb.h"
#if TESTMODE
#include "l1tm_msgty.h"
#endif
#include "l1audio_stereo.h"
#endif

#else
// Layer1 and debug include files.

#include <ctype.h>
#include <math.h>
#include "l1_ver.h"
#include "l1_const.h"
#include "l1_signa.h"

#if TESTMODE
#include "l1tm_defty.h"
#endif

#include "l1audio_const.h"
#include "l1audio_cust.h"
#include "l1audio_signa.h"
#include "l1audio_defty.h"
#include "l1audio_msgty.h"

#if (L1_GTT == 1)
#include "l1gtt_const.h"
#include "l1gtt_defty.h"
#endif
//added here from e-sample for AAC
#if (L1_DYN_DSP_DWNLD == 1)
#include "l1_dyn_dwl_const.h"
#include "l1_dyn_dwl_defty.h"
#endif
#if (L1_MP3 == 1)
#include "l1mp3_defty.h"
#endif

#if (L1_MIDI == 1)
#include "l1midi_defty.h"
#endif
//added here from e-sample for AAC
#if (L1_AAC == 1)
#include "l1aac_defty.h"
#endif
#include "l1_defty.h"
#include "cust_os.h"
#include "l1_msgty.h"
#include "tpudrv.h"       // TPU drivers.           ("eva3.lib")
#include "l1_varex.h"

#include "l1_proto.h"
#include "l1_mftab.h"
#include "l1_tabs.h"
#include "mem.h"
#include "armio.h"
#include "timer.h"
#include "timer1.h"
#include "dma.h"
#include "inth.h"
#include "ulpd.h"
#include "rhea_arm.h"
#include "clkm.h"         // Clockm  ("eva3.lib")
#include "l1_ctl.h"

#include "l1_time.h"
#if L2_L3_SIMUL
#include "l1_scen.h"
#endif

#if (L1_STEREOPATH == 1)
#include "sys_dma.h"
#include "sys_inth.h"
#include "abb.h"
#if TESTMODE
#include "l1tm_msgty.h"
#endif
#include "l1audio_stereo.h"
#endif

#include "l1audio_abb.h"
#endif

#include "l1audio_macro.h"

//add the extern reference of abb_write_done
#if (ANALOG == 11)
#include "bspTwl3029_I2c.h"
#include "bspTwl3029_Aud_Map.h"
#endif

#if (ANALOG == 11)
Bsp_Twl3029_I2cTransReqArray l1audio_i2cTransArray;
#endif

#if (L1_STEREOPATH == 1) && (CODE_VERSION == NOT_SIMULATION)

#if (ANALOG == 11)
 #include "bspTwl3029_Int_Map.h"


//Add the call back function of the stereo path.
void l1s_stereopath_callback(UWORD8 cbvalue)
{
  BspTwl3029_ReturnCode returnVal = BSP_TWL3029_RETURN_CODE_FAILURE;
  UWORD16 count = 0;
  UINT8 triton_classD = 0;

  /* callback function info pointer */
  BspTwl3029_I2C_Callback i2c_callback;
  BspTwl3029_I2C_CallbackPtr callbackPtr= &i2c_callback;

  /* I2C array */
  Bsp_Twl3029_I2cTransReqArray i2cTransArray;
  Bsp_Twl3029_I2cTransReqArrayPtr i2cTransArrayPtr= &i2cTransArray;

  /* twl3029 I2C reg info struct */
  BspTwl3029_I2C_RegisterInfo regInfo[10] ;
  BspTwl3029_I2C_RegisterInfo* regInfoPtr = regInfo;

  BspTwl3029_I2C_RegData tmpAudioHFTest1RegData=0;
  BspTwl3029_I2C_RegData tmpCtrl3RegData=0;

  bspTwl3029_Audio_getClassD_mode(&triton_classD);

  //Set the valud of abb_write_done to 1
  l1s.abb_write_done = 1;
  switch(cbvalue)
  {
    case L1S_TWL3029_STEROPATH_START:
    {
      l1a_l1s_com.outen_cfg_task.command_commited = l1a_l1s_com.outen_cfg_task.command_requested;

      returnVal = BspTwl3029_I2c_shadowRegRead(BSP_TWL3029_I2C_AUD, BSP_TWL_3029_MAP_AUDIO_CTRL3_OFFSET,
                                              &tmpCtrl3RegData);
      returnVal = BspTwl3029_I2c_shadowRegRead(BSP_TWL3029_I2C_AUD, BSP_TWL_3029_MAP_AUDIO_HFTEST1_OFFSET,
                                              &tmpAudioHFTest1RegData);

      returnVal = BspTwl3029_I2c_regQueWrite(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_OUTEN1_OFFSET,
                                              l1a_l1s_com.outen_cfg_task.outen1,  regInfoPtr++);
      count++;

      returnVal = BspTwl3029_I2c_regQueWrite(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_OUTEN2_OFFSET,
                                              l1a_l1s_com.outen_cfg_task.outen2,  regInfoPtr++);
      count++;

      if(l1a_l1s_com.outen_cfg_task.classD == 0x01) // User wants to configure classD
      {
        if(triton_classD == 0x00) // User wants to switch on and Triton not configured for classD
        {
          returnVal= BspTwl3029_I2c_regQueWrite(BSP_TWL3029_I2C_AUD, BSP_TWL_3029_MAP_CKG_TESTUNLOCK_OFFSET,
                                              0xb6,  regInfoPtr++);
          count++;

          returnVal= BspTwl3029_I2c_regQueWrite(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_OUTEN3_OFFSET,
                                              l1a_l1s_com.outen_cfg_task.outen3,  regInfoPtr++);
          count++;

          tmpCtrl3RegData |= 0x80;   // AUDIO_CTRL3_SPKDIGON
          tmpAudioHFTest1RegData = 0x01; // AUDIO_HFTEST1_SPKALLZB

          BspTwl3029_I2c_regQueWrite(BSP_TWL3029_I2C_AUD, BSP_TWL_3029_MAP_AUDIO_CTRL3_OFFSET,
                                               tmpCtrl3RegData,  regInfoPtr++);
          count++;

          BspTwl3029_I2c_regQueWrite(BSP_TWL3029_I2C_AUD, BSP_TWL_3029_MAP_AUDIO_HFTEST1_OFFSET,
                                               tmpAudioHFTest1RegData,  regInfoPtr++);
          count++;
          }
        }
        else if(l1a_l1s_com.outen_cfg_task.classD == 0x00)
        {
          if(triton_classD != 0x00) // User wants no to classD and Triton configured for classD
          {
            tmpCtrl3RegData &= 0x7F;   // AUDIO_CTRL3_SPKDIGON
            tmpAudioHFTest1RegData = 0x00; // AUDIO_HFTEST1_SPKALLZB

            BspTwl3029_I2c_regQueWrite(BSP_TWL3029_I2C_AUD, BSP_TWL_3029_MAP_AUDIO_HFTEST1_OFFSET,
                                            tmpAudioHFTest1RegData,  regInfoPtr++);
            count++;

            BspTwl3029_I2c_regQueWrite(BSP_TWL3029_I2C_AUD, BSP_TWL_3029_MAP_AUDIO_CTRL3_OFFSET,
                                                 tmpCtrl3RegData,  regInfoPtr++);
            count++;

            returnVal= BspTwl3029_I2c_regQueWrite(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_OUTEN3_OFFSET,
                                                 l1a_l1s_com.outen_cfg_task.outen3,  regInfoPtr++);
            count++;

            BspTwl3029_I2c_regQueWrite(BSP_TWL3029_I2C_AUD, BSP_TWL_3029_MAP_CKG_TESTUNLOCK_OFFSET,
                                                 0x00,  regInfoPtr++);
            count++;
          }
          else // User no classD & Triton also no classD
          {
            returnVal= BspTwl3029_I2c_regQueWrite(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_OUTEN3_OFFSET,
                                                l1a_l1s_com.outen_cfg_task.outen3,  regInfoPtr++);
            count++;
            returnVal = BspTwl3029_I2c_regQueWrite(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_OUTEN2_OFFSET,
	                                            l1a_l1s_com.outen_cfg_task.outen2,  regInfoPtr++);
            count++;
            returnVal= BspTwl3029_I2c_regQueWrite(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_OUTEN3_OFFSET,
                                                l1a_l1s_com.outen_cfg_task.outen3,  regInfoPtr++);
            count++;
          }
        }
                /*Switch OFF all pop modes unconditionally , it is turned on before turning on STON*/
                returnVal=BspTwl3029_I2c_regQueWrite(BSP_TWL3029_I2C_AUD,BSP_TWL_3029_MAP_AUDIO_POPMAN_OFFSET, 0x00,regInfoPtr++);
                count++;

        callbackPtr->callbackFunc =  l1s_stereopath_callback;
        callbackPtr->callbackVal = L1S_TWL3029_STEROPATH_OUTEN_CONFIG;

        if (returnVal != BSP_TWL3029_RETURN_CODE_FAILURE)
        {
          regInfoPtr = regInfo;
          /* now request to I2C manager to write to Triton registers */

         returnVal = BspTwl3029_I2c_regInfoSend(regInfo,count,callbackPtr,
                                             (BspI2c_TransactionRequest*)i2cTransArrayPtr);
        }
        break;
        }
    case L1S_TWL3029_STEROPATH_CONFIG:
    case L1S_TWL3029_STEROPATH_OUTEN_CONFIG:
    case L1S_TWL3029_STEROPATH_STOP:
        break;
    default:
        break;
    }/* end switch */
}  /* end function l1s_stereopath_callback */

#endif

/*-------------------------------------------------------*/
/* l1s_stereopath_drv_config_ABB()                       */
/*-------------------------------------------------------*/
/*                                                       */
/* Parameters : mono_stereo: indicates if buffer is made */
/*              of mono or stereo samples                */
/*              sampling_frequency: sampling freq        */
/*                                                       */
/* Return     : none                                     */
/*                                                       */
/* Description : ABB configuration function              */
/*                                                       */
/*-------------------------------------------------------*/
void l1s_stereopath_drv_config_ABB(UWORD8 mono_stereo,UWORD8 sampling_frequency)
{
#if (ANALOG == 3)
    UWORD16 regist;

    // Get the VAUDCTRL register
    regist = l1s_dsp_com.dsp_ndb_ptr->d_vaud_cfg >> 6;

    // reset sampling frequency and stereo/mono conversion
    regist &= 0x319;

    // stereo/mono conversion ?
    if (mono_stereo == AUDIO_SP_MONO_OUTPUT)
	regist |= 6;

    // apply the request sampling frequency
    regist |= (sampling_frequency << 5);

    // update DSP API
    l1s_dsp_com.dsp_ndb_ptr->d_vaud_cfg = ABB_L1_WRITE(VAUDCTRL, regist);

    // Get the VBCTRL2 register
    regist = l1s_dsp_com.dsp_ndb_ptr->d_vbctrl2 >> 6;
    // activate HSOVMID and VMIDFBYP
    regist |= 0x90;
    l1s_dsp_com.dsp_ndb_ptr->d_vbctrl2 = ABB_L1_WRITE(VBCTRL2, regist);

    // Get the VAUDPLL register
    regist = l1s_dsp_com.dsp_ndb_ptr->d_vaud_pll >> 6;
    // reset PLL
    regist &= 0x3fd;
    // switch PLL on
    regist |= 0x2;

    // update DSP API
    l1s_dsp_com.dsp_ndb_ptr->d_vaud_pll = ABB_L1_WRITE(VAUDPLL, regist);

    // Get the VBPOP register
    regist = l1s_dsp_com.dsp_ndb_ptr->d_vbpop >> 6;
    // deactivate vbpop for HSO
    regist &= 0x3F8;

    // update DSP API
    l1s_dsp_com.dsp_ndb_ptr->d_vbpop = ABB_L1_WRITE(VBPOP, regist);

#endif

#if (ANALOG == 11)
    // Call to the Triton API which would configure the Audio path.
    UWORD8 monostereo;
    UWORD8 pll;
    //Call back function
    BspTwl3029_I2C_Callback stereo_callbackFunc;

    //Switch on the Stereo path PLL - Set the STPLLON to 1
    pll = 0x02;
    //Check if stereo2mono is required
    if (mono_stereo == AUDIO_SP_MONO_OUTPUT)
	monostereo = 0x03;
    else
	monostereo = 0x00;

    //Set the call back function to be called after the Audio configuration
    stereo_callbackFunc.callbackFunc = l1s_stereopath_callback ;
    //stereo_callbackFunc.callbackVal  = L1S_TWL3029_STEROPATH_CONFIG;
    stereo_callbackFunc.callbackVal  = L1S_TWL3029_STEROPATH_START;
    stereo_callbackFunc.i2cTransArrayPtr = &l1audio_i2cTransArray;

    //Call the Triton audio path configuration function
    if(BSP_TWL3029_RETURN_CODE_SUCCESS == bspTwl3029_Audio_Configure_Stereopath(&stereo_callbackFunc,
		pll,
		monostereo,
		sampling_frequency ))
    {
	//Set the valud of abb_write_done to 1
	l1s.abb_write_done = 1;
    }

#endif
}


/*-------------------------------------------------------*/
/* l1s_stereopath_drv_start_ABB()                        */
/*-------------------------------------------------------*/
/*                                                       */
/* Parameters : none                                     */
/*                                                       */
/* Return     : none                                     */
/*                                                       */
/* Description : ABB start function                      */
/*                                                       */
/*-------------------------------------------------------*/
void l1s_stereopath_drv_start_ABB(void)
{
#if (ANALOG == 3)
    // Get VAUDPLL register
    UWORD16 regist = l1s_dsp_com.dsp_ndb_ptr->d_vaud_pll >> 6;

    // Reset I2S
    regist &= 0x2ff;
    // I2S on
    regist |= 0x100;

    // update DSP API
    l1s_dsp_com.dsp_ndb_ptr->d_vaud_pll = ABB_L1_WRITE(VAUDPLL, regist);

    // Set AUDON bit of the PWRDNRG register
    regist = 0x100;
    // update DSP API
    l1s_dsp_com.dsp_ndb_ptr->d_togbr2 = ABB_L1_WRITE(TOGBR2, regist);
#endif
#if (ANALOG == 11)
    //Call back function
    BspTwl3029_I2C_Callback stereo_callbackFunc;
    //Set the call back function to be called after the Audio start
    stereo_callbackFunc.callbackFunc = l1s_stereopath_callback ;
    stereo_callbackFunc.callbackVal  = L1S_TWL3029_STEROPATH_CONFIG;
    stereo_callbackFunc.i2cTransArrayPtr = &l1audio_i2cTransArray;

    //call the Triton audio path start function
    if (BSP_TWL3029_RETURN_CODE_SUCCESS == bspTwl3029_Audio_Start_Stereopath(&stereo_callbackFunc))
    {
	l1s.abb_write_done = 1;
    };
#endif

}

/*-------------------------------------------------------*/
/* l1s_stereopath_drv_stop_ABB()                         */
/*-------------------------------------------------------*/
/*                                                       */
/* Parameters : none                                     */
/*                                                       */
/* Return     : none                                     */
/*                                                       */
/* Description : ABB stop function                       */
/*                                                       */
/*-------------------------------------------------------*/
void l1s_stereopath_drv_stop_ABB(void)
{
#if (ANALOG == 3)
    UWORD16 regist;

    // Reset AUDON bit of the PWRDNRG register
    regist = 0x80;
    // update DSP API
    l1s_dsp_com.dsp_ndb_ptr->d_togbr2 = ABB_L1_WRITE(TOGBR2, regist);

    // Get VAUDPLL register
    regist = l1s_dsp_com.dsp_ndb_ptr->d_vaud_pll >> 6;
    // PLL/I2S off
    regist &= 0x2fd;
    ABB_Write_Register_on_page(PAGE1, VAUDPLL, regist);
    // update DSP API
    l1s_dsp_com.dsp_ndb_ptr->d_vaud_pll = ABB_L1_WRITE(VAUDPLL, regist);
#endif
#if (ANALOG == 11)
    //Call back function
    BspTwl3029_I2C_Callback stereo_callbackFunc;

    UWORD8  dl_control = 1;  // OUTEN_DISABLE

    // Set the call back function to be called after the Audio start
    stereo_callbackFunc.callbackFunc = l1s_stereopath_callback ;
    stereo_callbackFunc.callbackVal = L1S_TWL3029_STEROPATH_STOP;
    stereo_callbackFunc.i2cTransArrayPtr = &l1audio_i2cTransArray;

    if( (l1s.audio_state[L1S_AUDIO_DL_ONOFF_STATE] == L1_AUDIO_DL_ON)   ||
	    (l1s.audio_state[L1S_AUDIO_DL_ONOFF_STATE] == L1_AUDIO_DL_SWITCHON_STARTED))
    {
	dl_control = 0;   // OUTEN_ENABLE
    }

    //call the Triton audio path start function
    if (BSP_TWL3029_RETURN_CODE_SUCCESS == bspTwl3029_Audio_Stop_Stereopath(&stereo_callbackFunc, dl_control))
    {
	l1s.abb_write_done = 1;
    };
#endif
}


/*-------------------------------------------------------*/
/* l1s_stereopath_drv_start_DMA()                        */
/*-------------------------------------------------------*/
/*                                                       */
/* Parameters : d_dma_channel_parameter: DMA parameters  */
/*              DMA_allocation: allocation of the DMA    */
/*                              (MCU/DSP)                */
/*                                                       */
/* Return     : none                                     */
/*                                                       */
/* Description : DMA config and start function           */
/*                                                       */
/*-------------------------------------------------------*/
void l1s_stereopath_drv_start_DMA(T_DMA_TYPE_CHANNEL_PARAMETER d_dma_channel_parameter,UWORD8 DMA_allocation)
{
#if ((CHIPSET == 12) || (CHIPSET == 15))
#if (L1_MP3_SIX_BUFFER == 1)
	// allocate the DMA to the MCU
    f_dma_channel_allocation_set(d_dma_channel_parameter.d_dma_channel_number, C_DMA_CHANNEL_ARM);

    // set parameters
    f_dma_channel_parameter_set((T_DMA_TYPE_CHANNEL_PARAMETER *)&d_dma_channel_parameter);
#else 
	// set parameters
    f_dma_channel_parameter_set((T_DMA_TYPE_CHANNEL_PARAMETER *)&d_dma_channel_parameter);

    // allocate the DMA to the MCU
    f_dma_channel_allocation_set(d_dma_channel_parameter.d_dma_channel_number, C_DMA_CHANNEL_ARM);

#endif 
    // Enable the DMA channel
    f_dma_channel_enable(d_dma_channel_parameter.d_dma_channel_number);


    // DMA allocation ?
    if (DMA_allocation == AUDIO_SP_DMA_ALLOC_MCU)
    {
	// DMA is allocate to MCU, just unmask DMA IT
	F_INTH_ENABLE_ONE_IT(C_INTH_DMA_IT);
    }
    else
    {
	// DMA is allocate to DSP, unmask API IT
	F_INTH_ENABLE_ONE_IT(C_INTH_API_IT);

	// Re-allocate DMA to the DSP
	f_dma_channel_allocation_set(d_dma_channel_parameter.d_dma_channel_number, C_DMA_CHANNEL_DSP);
    }
#endif
}

/*-------------------------------------------------------*/
/* l1s_stereopath_drv_reset_DMA()                        */
/*-------------------------------------------------------*/
/*                                                       */
/* Parameters : d_dma_channel_parameter: DMA parameters  */
/*                                                       */
/* Return     : none                                     */
/*                                                       */
/* Description : DMA reset function                      */
/*                                                       */
/*-------------------------------------------------------*/
void l1s_stereopath_drv_reset_DMA(T_DMA_TYPE_CHANNEL_PARAMETER d_dma_channel_parameter)
{
#if ((CHIPSET == 12) || (CHIPSET == 15))
    // Allocate DMA to MCU
    f_dma_channel_allocation_set(d_dma_channel_parameter.d_dma_channel_number, C_DMA_CHANNEL_ARM);

    // Disable DMA channel
    f_dma_channel_disable(d_dma_channel_parameter.d_dma_channel_number);

    // Reset DMA channel
    f_dma_channel_soft_reset(d_dma_channel_parameter.d_dma_channel_number);
#endif
}


/*-------------------------------------------------------*/
/* l1s_stereopath_drv_reset_CPORT()                      */
/*-------------------------------------------------------*/
/*                                                       */
/* Parameters : none                                     */
/*                                                       */
/* Return     : none                                     */
/*                                                       */
/* Description : Cport reset function                    */
/*                                                       */
/*-------------------------------------------------------*/
void l1s_stereopath_drv_reset_CPORT(void)
{
#if ((CHIPSET == 12) || (CHIPSET == 15))
    // init = 1 --> write ctrl register
    l1s_dsp_com.dsp_ndb_ptr->d_cport_init = (API) 0x0001;
    // set SW_RESET field to 1 to generate a software reset
    l1s_dsp_com.dsp_ndb_ptr->d_cport_ctrl = (API) 0x0FFD;
#endif
}

/*-------------------------------------------------------*/
/* l1s_stereopath_drv_stop_CPORT()                       */
/*-------------------------------------------------------*/
/*                                                       */
/* Parameters : none                                     */
/*                                                       */
/* Return     : none                                     */
/*                                                       */
/* Description : Cport stop function                     */
/*                                                       */
/*-------------------------------------------------------*/
void l1s_stereopath_drv_stop_CPORT(void)
{
#if (CHIPSET == 12) || (CHIPSET == 15)
    // init = 1 --> write ctrl register
    l1s_dsp_com.dsp_ndb_ptr->d_cport_init = (API) 0x0001;
    // Set EXT_MCLK_EN field to 1 to enable external clock
    l1s_dsp_com.dsp_ndb_ptr->d_cport_ctrl = (API) 0x0000;
#endif
}


/*-------------------------------------------------------*/
/* l1s_stereopath_drv_config_CPORT()                     */
/*-------------------------------------------------------*/
/*                                                       */
/* Parameters : none                                     */
/*                                                       */
/* Return     : none                                     */
/*                                                       */
/* Description : Cport config function                   */
/*                                                       */
/*-------------------------------------------------------*/
void l1s_stereopath_drv_config_CPORT(void)
{
#if (CHIPSET == 12) || (CHIPSET == 15)
    // init = 0x281F --> write cfr1,2,3,4 and ctrl register
    l1s_dsp_com.dsp_ndb_ptr->d_cport_init   = (API) 0x281F;
    // 2 timeslots per frame, I2S mode
    // 20 CLK_BIT cycles, 16 data bits per time slot
    l1s_dsp_com.dsp_ndb_ptr->a_cport_cfr[0] = (API) 0x0C0B;
    // one cycle delay, enable data serial output
    // CSYNC signal generate with the negative edge of CSCLK
    // clk direction set to input
    // l1s_dsp_com.dsp_ndb_ptr->a_cport_cfr[1] = (API) 0xEB00;
    l1s_dsp_com.dsp_ndb_ptr->a_cport_cfr[1] = (API) 0xFB00;    // L1_DSP-SPR-18866
    // mask receive/transmit interrupt request
    // Set threshold to 2 (nb of elements = 2)
    l1s_dsp_com.dsp_ndb_ptr->d_cport_ctrl   = (API) 0x012C;
#endif
}


/*-------------------------------------------------------*/
/* l1s_stereopath_drv_start_CPORT()                      */
/*-------------------------------------------------------*/
/*                                                       */
/* Parameters : none                                     */
/*                                                       */
/* Return     : none                                     */
/*                                                       */
/* Description : Cport start function                    */
/*                                                       */
/*-------------------------------------------------------*/
void l1s_stereopath_drv_start_CPORT(void)
{
#if (CHIPSET == 12) || (CHIPSET == 15)
    // init = 0x20 --> write tcl_tadt register
    l1s_dsp_com.dsp_ndb_ptr->d_cport_init     = (API) 0x0020;
    // CPEN = 1 --> cport enable
    l1s_dsp_com.dsp_ndb_ptr->d_cport_tcl_tadt = (API) 0x0800;
#endif
}

#endif // L1_STEREOPATH && CODE_VERSION

#endif // AUDIO_TASK