in clients/cmt_speech.c [479:507]
static void cs_hsi_read_on_control(struct cs_hsi_iface *hi)
{
struct hsi_msg *msg;
int ret;
spin_lock(&hi->lock);
if (hi->control_state & SSI_CHANNEL_STATE_READING) {
dev_err(&hi->cl->device, "Control read already pending (%d)\n",
hi->control_state);
spin_unlock(&hi->lock);
return;
}
if (hi->control_state & SSI_CHANNEL_STATE_ERROR) {
dev_err(&hi->cl->device, "Control read error (%d)\n",
hi->control_state);
spin_unlock(&hi->lock);
return;
}
hi->control_state |= SSI_CHANNEL_STATE_READING;
dev_dbg(&hi->cl->device, "Issuing RX on control\n");
msg = cs_claim_cmd(hi);
spin_unlock(&hi->lock);
msg->sgt.nents = 0;
msg->complete = cs_hsi_peek_on_control_complete;
ret = hsi_async_read(hi->cl, msg);
if (ret)
cs_hsi_control_read_error(hi, msg);
}