Commit 6be5e47b authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull soundwire fixes from Vinod Koul:
 "Core fix for missing flag clear, error patch handling in qcom driver
  and BIOS quirk for HP Spectre x360:

   - HP Spectre x360 soundwire DMI quirk

   - Error path handling for qcom driver

   - Core fix for missing clear of alloc_slave_rt"

* tag 'soundwire-6.4-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/soundwire:
  soundwire: stream: Add missing clear of alloc_slave_rt
  soundwire: qcom: add proper error paths in qcom_swrm_startup()
  soundwire: dmi-quirks: add new mapping for HP Spectre x360
parents 859c7459 58d95889
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -99,6 +99,13 @@ static const struct dmi_system_id adr_remap_quirk_table[] = {
		},
		.driver_data = (void *)intel_tgl_bios,
	},
	{
		.matches = {
			DMI_MATCH(DMI_SYS_VENDOR, "HP"),
			DMI_MATCH(DMI_BOARD_NAME, "8709"),
		},
		.driver_data = (void *)intel_tgl_bios,
	},
	{
		/* quirk used for NUC15 'Bishop County' LAPBC510 and LAPBC710 skews */
		.matches = {
+13 −4
Original line number Diff line number Diff line
@@ -1099,8 +1099,10 @@ static int qcom_swrm_startup(struct snd_pcm_substream *substream,
	}

	sruntime = sdw_alloc_stream(dai->name);
	if (!sruntime)
		return -ENOMEM;
	if (!sruntime) {
		ret = -ENOMEM;
		goto err_alloc;
	}

	ctrl->sruntime[dai->id] = sruntime;

@@ -1110,12 +1112,19 @@ static int qcom_swrm_startup(struct snd_pcm_substream *substream,
		if (ret < 0 && ret != -ENOTSUPP) {
			dev_err(dai->dev, "Failed to set sdw stream on %s\n",
				codec_dai->name);
			sdw_release_stream(sruntime);
			return ret;
			goto err_set_stream;
		}
	}

	return 0;

err_set_stream:
	sdw_release_stream(sruntime);
err_alloc:
	pm_runtime_mark_last_busy(ctrl->dev);
	pm_runtime_put_autosuspend(ctrl->dev);

	return ret;
}

static void qcom_swrm_shutdown(struct snd_pcm_substream *substream,
+3 −1
Original line number Diff line number Diff line
@@ -2021,8 +2021,10 @@ int sdw_stream_add_slave(struct sdw_slave *slave,

skip_alloc_master_rt:
	s_rt = sdw_slave_rt_find(slave, stream);
	if (s_rt)
	if (s_rt) {
		alloc_slave_rt = false;
		goto skip_alloc_slave_rt;
	}

	s_rt = sdw_slave_rt_alloc(slave, m_rt);
	if (!s_rt) {