[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