Commit 6a348e92 authored by Wesley Cheng's avatar Wesley Cheng Committed by Greg Kroah-Hartman
Browse files

ALSA: usb-audio: qcom: Don't allow USB offload path if PCM device is in use



Add proper checks and updates to the USB substream once receiving a USB QMI
stream enable request.  If the substream is already in use from the non
offload path, reject the stream enable request.  In addition, update the
USB substream opened parameter when enabling the offload path, so the
non offload path can be blocked.

Signed-off-by: default avatarWesley Cheng <quic_wcheng@quicinc.com>
Acked-by: default avatarMark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/r/20250409194804.3773260-30-quic_wcheng@quicinc.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 326bbc34
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -1567,12 +1567,17 @@ static void handle_uaudio_stream_req(struct qmi_handle *handle,
		goto response;
	}

	mutex_lock(&chip->mutex);
	if (req_msg->enable) {
		if (info_idx < 0 || chip->system_suspend) {
		if (info_idx < 0 || chip->system_suspend || subs->opened) {
			ret = -EBUSY;
			mutex_unlock(&chip->mutex);

			goto response;
		}
		subs->opened = 1;
	}
	mutex_unlock(&chip->mutex);

	if (req_msg->service_interval_valid) {
		ret = get_data_interval_from_si(subs,
@@ -1594,6 +1599,11 @@ static void handle_uaudio_stream_req(struct qmi_handle *handle,
		if (!ret)
			ret = prepare_qmi_response(subs, req_msg, &resp,
						   info_idx);
		if (ret < 0) {
			mutex_lock(&chip->mutex);
			subs->opened = 0;
			mutex_unlock(&chip->mutex);
		}
	} else {
		info = &uadev[pcm_card_num].info[info_idx];
		if (info->data_ep_pipe) {
@@ -1623,6 +1633,9 @@ static void handle_uaudio_stream_req(struct qmi_handle *handle,
		}

		disable_audio_stream(subs);
		mutex_lock(&chip->mutex);
		subs->opened = 0;
		mutex_unlock(&chip->mutex);
	}

response: