/**************************************************************************** * * Function Name: void csl_caph_switch_add_dst(CSL_CAPH_SWITCH_CHNL_e chnl, * UInt32 FIFO_dstAddr) * * Description: Add one destination to a CAPH switch channel * ****************************************************************************/ void csl_caph_switch_add_dst(CSL_CAPH_SWITCH_CHNL_e chnl, UInt32 FIFO_dstAddr) { CAPH_SWITCH_CHNL_e chal_chnl = CAPH_SWITCH_CH_VOID; aTrace(LOG_AUDIO_CSL, "csl_caph_switch_add_dst:: "); aTrace(LOG_AUDIO_CSL, "csl_caph_switch_add_dst:: chnl = 0x%x, dstcAddr = 0x%lx\n", chnl, FIFO_dstAddr); /* Get cHAL Channel */ chal_chnl = csl_caph_switch_get_chalchnl(chnl); /* Add one more destination for this channel */ if (CAPH_DST_OK != chal_caph_switch_add_dst(handle, chal_chnl, (UInt16) FIFO_dstAddr)) aError("csl_caph_switch_add_dst:: FAIL\n"); }
/**************************************************************************** * * Function Name:CSL_CAPH_SWITCH_STATUS_e csl_caph_switch_config_channel( * CSL_CAPH_SWITCH_CONFIG_t chnl_config) * * Description: configure CAPH switch channel * ****************************************************************************/ CSL_CAPH_SWITCH_STATUS_e csl_caph_switch_config_channel(CSL_CAPH_SWITCH_CONFIG_t chnl_config) { CAPH_SWITCH_CHNL_e chal_chnl = CAPH_SWITCH_CH_VOID; CAPH_DATA_FORMAT_e chal_dataFormat = CAPH_MONO_16BIT; CAPH_SWITCH_TRIGGER_e chal_trig = CAPH_VOID; CAPH_DST_STATUS_e dstStatus = CAPH_DST_OK; CSL_CAPH_SWITCH_STATUS_e status = CSL_CAPH_SWITCH_OWNER; aTrace(LOG_AUDIO_CNTLR, "csl_caph_switch_config_channel:: chnl = 0x%x, srcAddr = " "0x%lx, dstcAddr = 0x%lx, dataFmt = 0x%x, trigger = 0x%x\n", chnl_config.chnl, chnl_config.FIFO_srcAddr, chnl_config.FIFO_dstAddr, chnl_config.dataFmt, chnl_config.trigger); /* Get cHAL Channel */ chal_chnl = csl_caph_switch_get_chalchnl(chnl_config.chnl); /* Select Source for this channel */ chal_caph_switch_select_src(handle, chal_chnl, (UInt16) (chnl_config.FIFO_srcAddr)); /* Add Dst for this channel */ dstStatus = chal_caph_switch_add_dst(handle, chal_chnl, (UInt16) (chnl_config.FIFO_dstAddr)); csl_caph_switch_setDSTStatus(chal_chnl, dstStatus); /* If the DST is already being used by other channels * Do not set the switch channel anymore. */ if (dstStatus != CAPH_DST_OK) { audio_xassert(0, dstStatus); aError("%s::sw %d chal_chnl %d dst 0x%lx used by other sw, dstStatus=%d\n", __func__, chnl_config.chnl, chal_chnl, chnl_config.FIFO_dstAddr, dstStatus); csl_caph_hwctrldump(); chal_caph_switch_free_channel(handle, chal_chnl); status = CSL_CAPH_SWITCH_BORROWER; return status; } /* Set data format */ switch (chnl_config.dataFmt) { case CSL_CAPH_16BIT_MONO: chal_dataFormat = CAPH_MONO_16BIT; break; case CSL_CAPH_16BIT_STEREO: chal_dataFormat = CAPH_STEREO_16BIT; break; case CSL_CAPH_24BIT_MONO: chal_dataFormat = CAPH_MONO_24BIT; break; case CSL_CAPH_24BIT_STEREO: chal_dataFormat = CAPH_STEREO_24BIT; break; default: audio_xassert(0, chnl_config.dataFmt); } chal_caph_switch_set_datafmt(handle, chal_chnl, chal_dataFormat); /* Select the trigger */ chal_trig = chnl_config.trigger; chal_caph_switch_select_trigger(handle, chal_chnl, chal_trig); return status; }