{
int err;
- mutex_lock(&info->tx_lock);
if (!info->rpdev) {
dev_dbg(info->dev, "rpmsg channel not ready, m4 image ready?\n");
return -EINVAL;
dev_dbg(&info->rpdev->dev, "send cmd %d\n", msg->header.cmd);
+ mutex_lock(&info->tx_lock);
+
reinit_completion(&info->cmd_complete);
err = rpmsg_send(info->rpdev->ept, (void *)msg,
sizeof(struct i2s_rpmsg_s));
if (err) {
dev_err(&info->rpdev->dev, "rpmsg_send failed: %d\n", err);
+ mutex_unlock(&info->tx_lock);
return err;
}
if (!err) {
dev_err(&info->rpdev->dev, "rpmsg_send cmd %d timeout!\n",
msg->header.cmd);
+ mutex_unlock(&info->tx_lock);
return -ETIMEDOUT;
}