[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