On 6/13/18 4:24 AM, Xiuli Pan wrote:
From: Pan Xiuli xiuli.pan@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@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);
that's also another sign that this isn't a generic command at all?
- 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);
default: trace_ipc_error("eDc"); trace_error_value(header);return ipc_dai_lbm_cmd(header);