[Sound-open-firmware] [PATCH 2/2] ipc: dai: add loopback mode handler for dai
Xiuli Pan
xiuli.pan at linux.intel.com
Wed Jun 13 11:24:22 CEST 2018
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;
+ }
+
+ 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);
--
2.7.4
More information about the Sound-open-firmware
mailing list