in clients/cmt_speech.c [425:456]
static void cs_hsi_read_on_control_complete(struct hsi_msg *msg)
{
u32 cmd = cs_get_cmd(msg);
struct cs_hsi_iface *hi = msg->context;
spin_lock(&hi->lock);
hi->control_state &= ~SSI_CHANNEL_STATE_READING;
if (msg->status == HSI_STATUS_ERROR) {
dev_err(&hi->cl->device, "Control RX error detected\n");
spin_unlock(&hi->lock);
cs_hsi_control_read_error(hi, msg);
goto out;
}
dev_dbg(&hi->cl->device, "Read on control: %08X\n", cmd);
cs_release_cmd(msg);
if (hi->flags & CS_FEAT_TSTAMP_RX_CTRL) {
struct timespec64 tspec;
struct cs_timestamp *tstamp =
&hi->mmap_cfg->tstamp_rx_ctrl;
ktime_get_ts64(&tspec);
tstamp->tv_sec = (__u32) tspec.tv_sec;
tstamp->tv_nsec = (__u32) tspec.tv_nsec;
}
spin_unlock(&hi->lock);
cs_notify_control(cmd);
out:
cs_hsi_read_on_control(hi);
}