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

Liam Girdwood liam.r.girdwood at linux.intel.com
Wed Jun 13 20:55:46 CEST 2018


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.

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);


More information about the Sound-open-firmware mailing list