diff options
Diffstat (limited to 'sound/soc')
| -rw-r--r-- | sound/soc/amd/acp/amd-acp70-acpi-match.c | 157 | ||||
| -rw-r--r-- | sound/soc/codecs/cs-amp-lib-test.c | 1 | ||||
| -rw-r--r-- | sound/soc/codecs/cs530x.c | 2 | ||||
| -rw-r--r-- | sound/soc/codecs/max98090.c | 6 | ||||
| -rw-r--r-- | sound/soc/codecs/rt721-sdca.c | 4 | ||||
| -rw-r--r-- | sound/soc/codecs/rt721-sdca.h | 1 | ||||
| -rw-r--r-- | sound/soc/fsl/fsl_micfil.c | 4 | ||||
| -rw-r--r-- | sound/soc/fsl/fsl_sai.c | 11 | ||||
| -rw-r--r-- | sound/soc/intel/avs/pcm.c | 3 | ||||
| -rw-r--r-- | sound/soc/intel/avs/probes.c | 18 | ||||
| -rw-r--r-- | sound/soc/intel/common/soc-acpi-intel-ptl-match.c | 52 | ||||
| -rw-r--r-- | sound/soc/mediatek/mt8195/mt8195-afe-pcm.c | 1 | ||||
| -rw-r--r-- | sound/soc/mediatek/mt8365/mt8365-afe-pcm.c | 1 | ||||
| -rw-r--r-- | sound/soc/qcom/qdsp6/q6asm.c | 2 | ||||
| -rw-r--r-- | sound/soc/renesas/rz-ssi.c | 25 | ||||
| -rw-r--r-- | sound/soc/sdw_utils/soc_sdw_utils.c | 1 | 
16 files changed, 201 insertions, 88 deletions
diff --git a/sound/soc/amd/acp/amd-acp70-acpi-match.c b/sound/soc/amd/acp/amd-acp70-acpi-match.c index dcecac792e6d..871b4f054a84 100644 --- a/sound/soc/amd/acp/amd-acp70-acpi-match.c +++ b/sound/soc/amd/acp/amd-acp70-acpi-match.c @@ -30,6 +30,20 @@ static const struct snd_soc_acpi_endpoint spk_r_endpoint = {  	.group_id = 1  }; +static const struct snd_soc_acpi_endpoint spk_2_endpoint = { +	.num = 0, +	.aggregated = 1, +	.group_position = 2, +	.group_id = 1 +}; + +static const struct snd_soc_acpi_endpoint spk_3_endpoint = { +	.num = 0, +	.aggregated = 1, +	.group_position = 3, +	.group_id = 1 +}; +  static const struct snd_soc_acpi_adr_device rt711_rt1316_group_adr[] = {  	{  		.adr = 0x000030025D071101ull, @@ -112,6 +126,134 @@ static const struct snd_soc_acpi_adr_device rt1320_1_single_adr[] = {  	}  }; +static const struct snd_soc_acpi_endpoint cs42l43_endpoints[] = { +	{ /* Jack Playback Endpoint */ +		.num = 0, +		.aggregated = 0, +		.group_position = 0, +		.group_id = 0, +	}, +	{ /* DMIC Capture Endpoint */ +		.num = 1, +		.aggregated = 0, +		.group_position = 0, +		.group_id = 0, +	}, +	{ /* Jack Capture Endpoint */ +		.num = 2, +		.aggregated = 0, +		.group_position = 0, +		.group_id = 0, +	}, +	{ /* Speaker Playback Endpoint */ +		.num = 3, +		.aggregated = 0, +		.group_position = 0, +		.group_id = 0, +	}, +}; + +static const struct snd_soc_acpi_adr_device cs42l43_0_adr[] = { +	{ +		.adr = 0x00003001FA424301ull, +		.num_endpoints = ARRAY_SIZE(cs42l43_endpoints), +		.endpoints = cs42l43_endpoints, +		.name_prefix = "cs42l43" +	} +}; + +static const struct snd_soc_acpi_adr_device cs42l43_1_cs35l56x4_1_adr[] = { +	{ +		.adr = 0x00013001FA424301ull, +		.num_endpoints = ARRAY_SIZE(cs42l43_endpoints), +		.endpoints = cs42l43_endpoints, +		.name_prefix = "cs42l43" +	}, +	{ +		.adr = 0x00013001FA355601ull, +		.num_endpoints = 1, +		.endpoints = &spk_l_endpoint, +		.name_prefix = "AMP1" +	}, +	{ +		.adr = 0x00013101FA355601ull, +		.num_endpoints = 1, +		.endpoints = &spk_r_endpoint, +		.name_prefix = "AMP2" +	}, +	{ +		.adr = 0x00013201FA355601ull, +		.num_endpoints = 1, +		.endpoints = &spk_2_endpoint, +		.name_prefix = "AMP3" +	}, +	{ +		.adr = 0x00013301FA355601ull, +		.num_endpoints = 1, +		.endpoints = &spk_3_endpoint, +		.name_prefix = "AMP4" +	}, +}; + +static const struct snd_soc_acpi_adr_device cs35l56x4_1_adr[] = { +	{ +		.adr = 0x00013301FA355601ull, +		.num_endpoints = 1, +		.endpoints = &spk_l_endpoint, +		.name_prefix = "AMP1" +	}, +	{ +		.adr = 0x00013201FA355601ull, +		.num_endpoints = 1, +		.endpoints = &spk_r_endpoint, +		.name_prefix = "AMP2" +	}, +	{ +		.adr = 0x00013101FA355601ull, +		.num_endpoints = 1, +		.endpoints = &spk_2_endpoint, +		.name_prefix = "AMP3" +	}, +	{ +		.adr = 0x00013001FA355601ull, +		.num_endpoints = 1, +		.endpoints = &spk_3_endpoint, +		.name_prefix = "AMP4" +	}, +}; + +static const struct snd_soc_acpi_link_adr acp70_cs42l43_l1_cs35l56x4_l1[] = { +	{ +		.mask = BIT(1), +		.num_adr = ARRAY_SIZE(cs42l43_1_cs35l56x4_1_adr), +		.adr_d = cs42l43_1_cs35l56x4_1_adr, +	}, +	{} +}; + +static const struct snd_soc_acpi_link_adr acp70_cs42l43_l0_cs35l56x4_l1[] = { +	{ +		.mask = BIT(0), +		.num_adr = ARRAY_SIZE(cs42l43_0_adr), +		.adr_d = cs42l43_0_adr, +	}, +	{ +		.mask = BIT(1), +		.num_adr = ARRAY_SIZE(cs35l56x4_1_adr), +		.adr_d = cs35l56x4_1_adr, +	}, +	{} +}; + +static const struct snd_soc_acpi_link_adr acp70_cs35l56x4_l1[] = { +	{ +		.mask = BIT(1), +		.num_adr = ARRAY_SIZE(cs35l56x4_1_adr), +		.adr_d = cs35l56x4_1_adr, +	}, +	{} +}; +  static const struct snd_soc_acpi_link_adr acp70_rt722_only[] = {  	{  		.mask = BIT(0), @@ -151,6 +293,21 @@ struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sdw_machines[] = {  		.links = acp70_4_in_1_sdca,  		.drv_name = "amd_sdw",  	}, +	{ +		.link_mask = BIT(0) | BIT(1), +		.links = acp70_cs42l43_l0_cs35l56x4_l1, +		.drv_name = "amd_sdw", +	}, +	{ +		.link_mask = BIT(1), +		.links = acp70_cs42l43_l1_cs35l56x4_l1, +		.drv_name = "amd_sdw", +	}, +	{ +		.link_mask = BIT(1), +		.links = acp70_cs35l56x4_l1, +		.drv_name = "amd_sdw", +	},  	{},  };  EXPORT_SYMBOL(snd_soc_acpi_amd_acp70_sdw_machines); diff --git a/sound/soc/codecs/cs-amp-lib-test.c b/sound/soc/codecs/cs-amp-lib-test.c index 2fde84309338..3406887cdfa2 100644 --- a/sound/soc/codecs/cs-amp-lib-test.c +++ b/sound/soc/codecs/cs-amp-lib-test.c @@ -7,6 +7,7 @@  #include <kunit/resource.h>  #include <kunit/test.h> +#include <kunit/test-bug.h>  #include <kunit/static_stub.h>  #include <linux/device/faux.h>  #include <linux/firmware/cirrus/cs_dsp.h> diff --git a/sound/soc/codecs/cs530x.c b/sound/soc/codecs/cs530x.c index b9eff240b929..535387cd7aa3 100644 --- a/sound/soc/codecs/cs530x.c +++ b/sound/soc/codecs/cs530x.c @@ -793,7 +793,7 @@ static int cs530x_set_sysclk(struct snd_soc_component *component, int clk_id,  	case CS530X_SYSCLK_SRC_PLL:  		break;  	default: -		dev_err(component->dev, "Invalid clock id %d\n", clk_id); +		dev_err(component->dev, "Invalid sysclk source: %d\n", source);  		return -EINVAL;  	} diff --git a/sound/soc/codecs/max98090.c b/sound/soc/codecs/max98090.c index cb1508fc99f8..5aff5a459a43 100644 --- a/sound/soc/codecs/max98090.c +++ b/sound/soc/codecs/max98090.c @@ -1239,6 +1239,8 @@ static const struct snd_soc_dapm_widget max98091_dapm_widgets[] = {  	SND_SOC_DAPM_SUPPLY("DMIC4_ENA", M98090_REG_DIGITAL_MIC_ENABLE,  		 M98090_DIGMIC4_SHIFT, 0, max98090_shdn_event,  			 SND_SOC_DAPM_POST_PMU), +	SND_SOC_DAPM_SUPPLY("DMIC34_HPF", M98090_REG_FILTER_CONFIG, +		M98090_FLT_DMIC34HPF_SHIFT, 0, NULL, 0),  };  static const struct snd_soc_dapm_route max98090_dapm_routes[] = { @@ -1427,8 +1429,8 @@ static const struct snd_soc_dapm_route max98091_dapm_routes[] = {  	/* DMIC inputs */  	{"DMIC3", NULL, "DMIC3_ENA"},  	{"DMIC4", NULL, "DMIC4_ENA"}, -	{"DMIC3", NULL, "AHPF"}, -	{"DMIC4", NULL, "AHPF"}, +	{"DMIC3", NULL, "DMIC34_HPF"}, +	{"DMIC4", NULL, "DMIC34_HPF"},  };  static int max98090_add_widgets(struct snd_soc_component *component) diff --git a/sound/soc/codecs/rt721-sdca.c b/sound/soc/codecs/rt721-sdca.c index a4bd29d7220b..5f7b505d5414 100644 --- a/sound/soc/codecs/rt721-sdca.c +++ b/sound/soc/codecs/rt721-sdca.c @@ -281,6 +281,10 @@ static void rt721_sdca_jack_preset(struct rt721_sdca_priv *rt721)  	rt_sdca_index_write(rt721->mbq_regmap, RT721_BOOST_CTRL,  		RT721_BST_4CH_TOP_GATING_CTRL1, 0x002a);  	regmap_write(rt721->regmap, 0x2f58, 0x07); + +	regmap_write(rt721->regmap, 0x2f51, 0x00); +	rt_sdca_index_write(rt721->mbq_regmap, RT721_HDA_SDCA_FLOAT, +		RT721_MISC_CTL, 0x0004);  }  static void rt721_sdca_jack_init(struct rt721_sdca_priv *rt721) diff --git a/sound/soc/codecs/rt721-sdca.h b/sound/soc/codecs/rt721-sdca.h index 71fac9cd8739..24ce188562ba 100644 --- a/sound/soc/codecs/rt721-sdca.h +++ b/sound/soc/codecs/rt721-sdca.h @@ -137,6 +137,7 @@ struct rt721_sdca_dmic_kctrl_priv {  #define RT721_HDA_LEGACY_UAJ_CTL		0x02  #define RT721_HDA_LEGACY_CTL1			0x05  #define RT721_HDA_LEGACY_RESET_CTL		0x06 +#define RT721_MISC_CTL				0x07  #define RT721_XU_REL_CTRL			0x0c  #define RT721_GE_REL_CTRL1			0x0d  #define RT721_HDA_LEGACY_GPIO_WAKE_EN_CTL	0x0e diff --git a/sound/soc/fsl/fsl_micfil.c b/sound/soc/fsl/fsl_micfil.c index aabd90a8b3ec..cac26ba0aa4b 100644 --- a/sound/soc/fsl/fsl_micfil.c +++ b/sound/soc/fsl/fsl_micfil.c @@ -131,7 +131,7 @@ static struct fsl_micfil_soc_data fsl_micfil_imx943 = {  	.fifos = 8,  	.fifo_depth = 32,  	.dataline =  0xf, -	.formats = SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_DSD_U32_BE, +	.formats = SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_DSD_U32_LE,  	.use_edma = true,  	.use_verid = true,  	.volume_sx = false, @@ -823,7 +823,7 @@ static int fsl_micfil_hw_params(struct snd_pcm_substream *substream,  		break;  	} -	if (format == SNDRV_PCM_FORMAT_DSD_U32_BE) { +	if (format == SNDRV_PCM_FORMAT_DSD_U32_LE) {  		micfil->dec_bypass = true;  		/*  		 * According to equation 29 in RM: diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c index 757e7868e322..72bfc91e21b9 100644 --- a/sound/soc/fsl/fsl_sai.c +++ b/sound/soc/fsl/fsl_sai.c @@ -353,7 +353,6 @@ static int fsl_sai_set_dai_fmt_tr(struct snd_soc_dai *cpu_dai,  		break;  	case SND_SOC_DAIFMT_PDM:  		val_cr2 |= FSL_SAI_CR2_BCP; -		val_cr4 &= ~FSL_SAI_CR4_MF;  		sai->is_pdm_mode = true;  		break;  	case SND_SOC_DAIFMT_RIGHT_J: @@ -638,7 +637,7 @@ static int fsl_sai_hw_params(struct snd_pcm_substream *substream,  	val_cr5 |= FSL_SAI_CR5_WNW(slot_width);  	val_cr5 |= FSL_SAI_CR5_W0W(slot_width); -	if (sai->is_lsb_first || sai->is_pdm_mode) +	if (sai->is_lsb_first)  		val_cr5 |= FSL_SAI_CR5_FBT(0);  	else  		val_cr5 |= FSL_SAI_CR5_FBT(word_width - 1); @@ -653,12 +652,12 @@ static int fsl_sai_hw_params(struct snd_pcm_substream *substream,  		val_cr4 |= FSL_SAI_CR4_CHMOD;  	/* -	 * For SAI provider mode, when Tx(Rx) sync with Rx(Tx) clock, Rx(Tx) will -	 * generate bclk and frame clock for Tx(Rx), we should set RCR4(TCR4), -	 * RCR5(TCR5) for playback(capture), or there will be sync error. +	 * When Tx(Rx) sync with Rx(Tx) clock, Rx(Tx) will provide bclk and +	 * frame clock for Tx(Rx). We should set RCR4(TCR4), RCR5(TCR5) +	 * for playback(capture), or there will be sync error.  	 */ -	if (!sai->is_consumer_mode[tx] && fsl_sai_dir_is_synced(sai, adir)) { +	if (fsl_sai_dir_is_synced(sai, adir)) {  		regmap_update_bits(sai->regmap, FSL_SAI_xCR4(!tx, ofs),  				   FSL_SAI_CR4_SYWD_MASK | FSL_SAI_CR4_FRSZ_MASK |  				   FSL_SAI_CR4_CHMOD_MASK, diff --git a/sound/soc/intel/avs/pcm.c b/sound/soc/intel/avs/pcm.c index d31058e2de5b..80c001120cdd 100644 --- a/sound/soc/intel/avs/pcm.c +++ b/sound/soc/intel/avs/pcm.c @@ -651,6 +651,7 @@ static void avs_dai_fe_shutdown(struct snd_pcm_substream *substream, struct snd_  	data = snd_soc_dai_get_dma_data(dai, substream); +	disable_work_sync(&data->period_elapsed_work);  	snd_hdac_ext_stream_release(data->host_stream, HDAC_EXT_STREAM_TYPE_HOST);  	avs_dai_shutdown(substream, dai);  } @@ -754,6 +755,8 @@ static int avs_dai_fe_prepare(struct snd_pcm_substream *substream, struct snd_so  	data = snd_soc_dai_get_dma_data(dai, substream);  	host_stream = data->host_stream; +	if (runtime->state == SNDRV_PCM_STATE_XRUN) +		hdac_stream(host_stream)->prepared = false;  	if (hdac_stream(host_stream)->prepared)  		return 0; diff --git a/sound/soc/intel/avs/probes.c b/sound/soc/intel/avs/probes.c index 693ecfe68fd0..74096236984a 100644 --- a/sound/soc/intel/avs/probes.c +++ b/sound/soc/intel/avs/probes.c @@ -14,8 +14,8 @@  #include "debug.h"  #include "messages.h" -static int avs_dsp_init_probe(struct avs_dev *adev, union avs_connector_node_id node_id, -			      size_t buffer_size) +static int avs_dsp_init_probe(struct avs_dev *adev, struct snd_compr_params *params, int bps, +			      union avs_connector_node_id node_id, size_t buffer_size)  {  	struct avs_probe_cfg cfg = {{0}};  	struct avs_module_entry mentry; @@ -27,12 +27,16 @@ static int avs_dsp_init_probe(struct avs_dev *adev, union avs_connector_node_id  		return ret;  	/* -	 * Probe module uses no cycles, audio data format and input and output -	 * frame sizes are unused. It is also not owned by any pipeline. +	 * Probe module uses no cycles, input and output frame sizes are unused. +	 * It is also not owned by any pipeline.  	 */  	cfg.base.ibs = 1;  	/* BSS module descriptor is always segment of index=2. */  	cfg.base.is_pages = mentry.segments[2].flags.length; +	cfg.base.audio_fmt.sampling_freq = params->codec.sample_rate; +	cfg.base.audio_fmt.bit_depth = bps; +	cfg.base.audio_fmt.num_channels = params->codec.ch_out; +	cfg.base.audio_fmt.valid_bit_depth = bps;  	cfg.gtw_cfg.node_id = node_id;  	cfg.gtw_cfg.dma_buffer_size = buffer_size; @@ -128,8 +132,6 @@ static int avs_probe_compr_set_params(struct snd_compr_stream *cstream,  	struct hdac_ext_stream *host_stream = avs_compr_get_host_stream(cstream);  	struct snd_compr_runtime *rtd = cstream->runtime;  	struct avs_dev *adev = to_avs_dev(dai->dev); -	/* compr params do not store bit depth, default to S32_LE. */ -	snd_pcm_format_t format = SNDRV_PCM_FORMAT_S32_LE;  	unsigned int format_val;  	int bps, ret; @@ -142,7 +144,7 @@ static int avs_probe_compr_set_params(struct snd_compr_stream *cstream,  	ret = snd_compr_malloc_pages(cstream, rtd->buffer_size);  	if (ret < 0)  		return ret; -	bps = snd_pcm_format_physical_width(format); +	bps = snd_pcm_format_physical_width(params->codec.format);  	if (bps < 0)  		return bps;  	format_val = snd_hdac_stream_format(params->codec.ch_out, bps, params->codec.sample_rate); @@ -166,7 +168,7 @@ static int avs_probe_compr_set_params(struct snd_compr_stream *cstream,  		node_id.vindex = hdac_stream(host_stream)->stream_tag - 1;  		node_id.dma_type = AVS_DMA_HDA_HOST_INPUT; -		ret = avs_dsp_init_probe(adev, node_id, rtd->dma_bytes); +		ret = avs_dsp_init_probe(adev, params, bps, node_id, rtd->dma_bytes);  		if (ret < 0) {  			dev_err(dai->dev, "probe init failed: %d\n", ret);  			avs_dsp_enable_d0ix(adev); diff --git a/sound/soc/intel/common/soc-acpi-intel-ptl-match.c b/sound/soc/intel/common/soc-acpi-intel-ptl-match.c index 3c8b10e21ceb..4853f4f31786 100644 --- a/sound/soc/intel/common/soc-acpi-intel-ptl-match.c +++ b/sound/soc/intel/common/soc-acpi-intel-ptl-match.c @@ -227,33 +227,6 @@ static const struct snd_soc_acpi_endpoint cs42l43_amp_spkagg_endpoints[] = {  	},  }; -static const struct snd_soc_acpi_endpoint cs42l43_endpoints[] = { -	{ /* Jack Playback Endpoint */ -		.num = 0, -		.aggregated = 0, -		.group_position = 0, -		.group_id = 0, -	}, -	{ /* DMIC Capture Endpoint */ -		.num = 1, -		.aggregated = 0, -		.group_position = 0, -		.group_id = 0, -	}, -	{ /* Jack Capture Endpoint */ -		.num = 2, -		.aggregated = 0, -		.group_position = 0, -		.group_id = 0, -	}, -	{ /* Speaker Playback Endpoint */ -		.num = 3, -		.aggregated = 0, -		.group_position = 0, -		.group_id = 0, -	}, -}; -  static const struct snd_soc_acpi_adr_device cs42l43_2_adr[] = {  	{  		.adr = 0x00023001fa424301ull, @@ -305,15 +278,6 @@ static const struct snd_soc_acpi_adr_device cs35l56_3_3amp_adr[] = {  	}  }; -static const struct snd_soc_acpi_adr_device cs42l43_3_adr[] = { -	{ -		.adr = 0x00033001FA424301ull, -		.num_endpoints = ARRAY_SIZE(cs42l43_endpoints), -		.endpoints = cs42l43_endpoints, -		.name_prefix = "cs42l43" -	} -}; -  static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = {  	{  		.adr = 0x000030025D071101ull, @@ -486,15 +450,6 @@ static const struct snd_soc_acpi_link_adr ptl_cs42l43_l2_cs35l56x6_l13[] = {  	{}  }; -static const struct snd_soc_acpi_link_adr ptl_cs42l43_l3[] = { -	{ -		.mask = BIT(3), -		.num_adr = ARRAY_SIZE(cs42l43_3_adr), -		.adr_d = cs42l43_3_adr, -	}, -	{} -}; -  static const struct snd_soc_acpi_link_adr ptl_rt721_l0[] = {  	{  		.mask = BIT(0), @@ -714,13 +669,6 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_ptl_sdw_machines[] = {  	},  	{  		.link_mask = BIT(3), -		.links = ptl_cs42l43_l3, -		.drv_name = "sof_sdw", -		.sof_tplg_filename = "sof-ptl-cs42l43-l3.tplg", -		.get_function_tplg_files = sof_sdw_get_tplg_files, -	}, -	{ -		.link_mask = BIT(3),  		.links = ptl_sdw_rt712_vb_l3_rt1320_l3,  		.drv_name = "sof_sdw",  		.machine_check = snd_soc_acpi_intel_sdca_is_device_rt712_vb, diff --git a/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c b/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c index 5d025ad72263..c63b3444bc17 100644 --- a/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c +++ b/sound/soc/mediatek/mt8195/mt8195-afe-pcm.c @@ -3176,7 +3176,6 @@ err_pm_put:  static void mt8195_afe_pcm_dev_remove(struct platform_device *pdev)  { -	pm_runtime_disable(&pdev->dev);  	if (!pm_runtime_status_suspended(&pdev->dev))  		mt8195_afe_runtime_suspend(&pdev->dev);  } diff --git a/sound/soc/mediatek/mt8365/mt8365-afe-pcm.c b/sound/soc/mediatek/mt8365/mt8365-afe-pcm.c index 10793bbe9275..d48252cd96ac 100644 --- a/sound/soc/mediatek/mt8365/mt8365-afe-pcm.c +++ b/sound/soc/mediatek/mt8365/mt8365-afe-pcm.c @@ -2238,7 +2238,6 @@ static void mt8365_afe_pcm_dev_remove(struct platform_device *pdev)  	mt8365_afe_disable_top_cg(afe, MT8365_TOP_CG_AFE); -	pm_runtime_disable(&pdev->dev);  	if (!pm_runtime_status_suspended(&pdev->dev))  		mt8365_afe_runtime_suspend(&pdev->dev);  } diff --git a/sound/soc/qcom/qdsp6/q6asm.c b/sound/soc/qcom/qdsp6/q6asm.c index 06a802f9dba5..67e9ca18883c 100644 --- a/sound/soc/qcom/qdsp6/q6asm.c +++ b/sound/soc/qcom/qdsp6/q6asm.c @@ -377,9 +377,9 @@ static void q6asm_audio_client_free_buf(struct audio_client *ac,  	spin_lock_irqsave(&ac->lock, flags);  	port->num_periods = 0; +	spin_unlock_irqrestore(&ac->lock, flags);  	kfree(port->buf);  	port->buf = NULL; -	spin_unlock_irqrestore(&ac->lock, flags);  }  /** diff --git a/sound/soc/renesas/rz-ssi.c b/sound/soc/renesas/rz-ssi.c index e00940814157..81b883e8ac92 100644 --- a/sound/soc/renesas/rz-ssi.c +++ b/sound/soc/renesas/rz-ssi.c @@ -85,6 +85,7 @@ struct rz_ssi_stream {  	struct snd_pcm_substream *substream;  	int fifo_sample_size;	/* sample capacity of SSI FIFO */  	int dma_buffer_pos;	/* The address for the next DMA descriptor */ +	int completed_dma_buf_pos; /* The address of the last completed DMA descriptor. */  	int period_counter;	/* for keeping track of periods transferred */  	int sample_width;  	int buffer_pos;		/* current frame position in the buffer */ @@ -215,6 +216,7 @@ static void rz_ssi_stream_init(struct rz_ssi_stream *strm,  	rz_ssi_set_substream(strm, substream);  	strm->sample_width = samples_to_bytes(runtime, 1);  	strm->dma_buffer_pos = 0; +	strm->completed_dma_buf_pos = 0;  	strm->period_counter = 0;  	strm->buffer_pos = 0; @@ -437,6 +439,10 @@ static void rz_ssi_pointer_update(struct rz_ssi_stream *strm, int frames)  		snd_pcm_period_elapsed(strm->substream);  		strm->period_counter = current_period;  	} + +	strm->completed_dma_buf_pos += runtime->period_size; +	if (strm->completed_dma_buf_pos >= runtime->buffer_size) +		strm->completed_dma_buf_pos = 0;  }  static int rz_ssi_pio_recv(struct rz_ssi_priv *ssi, struct rz_ssi_stream *strm) @@ -778,10 +784,14 @@ no_dma:  	return -ENODEV;  } -static int rz_ssi_trigger_resume(struct rz_ssi_priv *ssi) +static int rz_ssi_trigger_resume(struct rz_ssi_priv *ssi, struct rz_ssi_stream *strm)  { +	struct snd_pcm_substream *substream = strm->substream; +	struct snd_pcm_runtime *runtime = substream->runtime;  	int ret; +	strm->dma_buffer_pos = strm->completed_dma_buf_pos + runtime->period_size; +  	if (rz_ssi_is_stream_running(&ssi->playback) ||  	    rz_ssi_is_stream_running(&ssi->capture))  		return 0; @@ -794,16 +804,6 @@ static int rz_ssi_trigger_resume(struct rz_ssi_priv *ssi)  				ssi->hw_params_cache.channels);  } -static void rz_ssi_streams_suspend(struct rz_ssi_priv *ssi) -{ -	if (rz_ssi_is_stream_running(&ssi->playback) || -	    rz_ssi_is_stream_running(&ssi->capture)) -		return; - -	ssi->playback.dma_buffer_pos = 0; -	ssi->capture.dma_buffer_pos = 0; -} -  static int rz_ssi_dai_trigger(struct snd_pcm_substream *substream, int cmd,  			      struct snd_soc_dai *dai)  { @@ -813,7 +813,7 @@ static int rz_ssi_dai_trigger(struct snd_pcm_substream *substream, int cmd,  	switch (cmd) {  	case SNDRV_PCM_TRIGGER_RESUME: -		ret = rz_ssi_trigger_resume(ssi); +		ret = rz_ssi_trigger_resume(ssi, strm);  		if (ret)  			return ret; @@ -852,7 +852,6 @@ static int rz_ssi_dai_trigger(struct snd_pcm_substream *substream, int cmd,  	case SNDRV_PCM_TRIGGER_SUSPEND:  		rz_ssi_stop(ssi, strm); -		rz_ssi_streams_suspend(ssi);  		break;  	case SNDRV_PCM_TRIGGER_STOP: diff --git a/sound/soc/sdw_utils/soc_sdw_utils.c b/sound/soc/sdw_utils/soc_sdw_utils.c index 270c66b90228..f7c8c16308de 100644 --- a/sound/soc/sdw_utils/soc_sdw_utils.c +++ b/sound/soc/sdw_utils/soc_sdw_utils.c @@ -638,7 +638,6 @@ struct asoc_sdw_codec_info codec_info_list[] = {  			{  				.direction = {true, false},  				.dai_name = "cs42l43-dp6", -				.component_name = "cs42l43",  				.dai_type = SOC_SDW_DAI_TYPE_AMP,  				.dailink = {SOC_SDW_AMP_OUT_DAI_ID, SOC_SDW_UNUSED_DAI_ID},  				.init = asoc_sdw_cs42l43_spk_init,  | 
