[Sound-open-firmware] [PATCH 2/2] ipc: dai: add loopback mode handler for dai

Pan, Xiuli xiuli.pan at linux.intel.com
Wed Jun 13 22:59:43 CEST 2018



On 6/14/2018 02:55, Liam Girdwood wrote:
> On Wed, 2018-06-13 at 17:24 +0800, Xiuli Pan wrote:
>> From: Pan Xiuli <xiuli.pan at linux.intel.com>
>>
>> Add a handler function for dai lbm status track and lbm ssp driver
>> function caller.
>>
>> Signed-off-by: Pan Xiuli <xiuli.pan at linux.intel.com>
>>
>> ---
>> Work with patch set:
>> SOF-Kernel:
>>    ASoC: SOF: Add debug_mode flag in sof dev
>>    ASoC: SOF: debug: add debugmode debugfs for sof_dev debug_mode
>>    ASoC: SOF: uapi: topology: Add SOF_TKN_DAI_LBM for ssp loopback mode
>>    ASoC: SOF: uapi: ipc: Add lbm in sof_ipc_dai_config
>>    ASoC: SOF: topology: Add topology handler for dai config loopback mode
>>    ASoC: SOF: add headers for lbm control callback functions
>>    ASoC: SOF: add lbm kcontrol callback functions
>>    ASoC: SOF: topology: add SSP lbm kcontrol switch create function
>> SOF:
>>    dai: add lbm status for dai
>>    ipc: dai: add loopback mode handler for dai
>> SOF-Tools:
>>    topology: Add SOF_TKN_DAI_LBM for ssp loopback mode
>>    topology: m4: Add option for loopback mode in DAI config
>>    topology: test: Add loopback topology
>>
>> test & santity test with:
>> Mininow max rt5651 and UP2 Hifiberry PRO and CNL nocodec
>> SOF master: 792bd414ee5629f72b1e24619510d6936eac28ce
>> SOF-Tool master: bd7dc88231f31d385340310cef467f211a739eeb
>> https://github.com/plbossart/sound/tree/topic/sof-v4.14:
>> 1e0f50565669815dd7daa19021b3b04a90487431
>>
>> ---
>>   src/ipc/handler.c | 35 ++++++++++++++++++++++++++++++++++-
>>   1 file changed, 34 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/ipc/handler.c b/src/ipc/handler.c
>> index 581ce9e..0569d7d 100644
>> --- a/src/ipc/handler.c
>> +++ b/src/ipc/handler.c
>> @@ -405,6 +405,39 @@ static int ipc_dai_config(uint32_t header)
>>   	return ipc_comp_dai_config(_ipc, config);
>>   }
>>   
>> +static int ipc_dai_lbm_cmd(uint32_t header)
>> +{
>> +	struct sof_ipc_ctrl_data *cdata = _ipc->comp_data;
>> +	struct dai *dai;
>> +
>> +	trace_ipc("Dlc");
>> +
>> +	/* get DAI */
>> +	dai = dai_get(SOF_DAI_INTEL_SSP, cdata->comp_id);
>> +	if (dai == NULL) {
>> +		trace_ipc_error("eDl");
>> +		trace_error_value(cdata->comp_id);
>> +		return -ENODEV;
>> +	}
>> +
>> +	switch (cdata->type) {
>> +	case SOF_CTRL_TYPE_VALUE_COMP_SET:
>> +		dai_set_loopback_mode(dai, cdata->compv[0].uvalue);
>> +		dai->lbm = cdata->compv[0].uvalue;
>> +		break;
>> +	case SOF_CTRL_TYPE_VALUE_COMP_GET:
>> +		cdata->compv[0].uvalue = dai->lbm;
>> +		break;
>> +	default:
>> +		trace_ipc_error("eDt");
>> +		trace_error_value(cdata->type);
>> +		return -EINVAL;
>> +	}
>> +
> Lets remove dai_set_loopback_mode() and just use the set_cmd() callback
> otherwise we encourage adhoc API extensions with no value.
I would like to reuse the comp_cmd callbacks, but we need to set with 
ssp which is bind to some DAI COMP.
And we will have two DAI share the same SSP. What would you suggest to 
bind the SSP with?
The token is now bind with SectionBE, and do you suggest to use some 
other widget for a token?

Thanks
Xiuli
>
> Liam
>
>
>> +	mailbox_hostbox_write(0, cdata, cdata->rhdr.hdr.size);
>> +	return 1;
>> +}
>> +
>>   static int ipc_glb_dai_message(uint32_t header)
>>   {
>>   	uint32_t cmd = (header & SOF_CMD_TYPE_MASK) >> SOF_CMD_TYPE_SHIFT;
>> @@ -413,7 +446,7 @@ static int ipc_glb_dai_message(uint32_t header)
>>   	case iCS(SOF_IPC_DAI_CONFIG):
>>   		return ipc_dai_config(header);
>>   	case iCS(SOF_IPC_DAI_LOOPBACK):
>> -		//return ipc_comp_set_value(header, COMP_CMD_LOOPBACK);
>> +		return ipc_dai_lbm_cmd(header);
>>   	default:
>>   		trace_ipc_error("eDc");
>>   		trace_error_value(header);
> _______________________________________________
> Sound-open-firmware mailing list
> Sound-open-firmware at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/sound-open-firmware



More information about the Sound-open-firmware mailing list