Commit ac02e3cd authored by Takashi Iwai's avatar Takashi Iwai
Browse files

Merge tag 'asoc-fix-v5.18-rc4' of...

Merge tag 'asoc-fix-v5.18-rc4' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus

ASoC: Fixes for v5.18

A larger collection of fixes than I'd like, mainly because mixer-test
is making it's way into the CI systems and turning up issues on a wider
range of systems.  The most substantial thing though is a revert and an
alternative fix for a dmaengine issue where the fix caused disruption
for some other configurations, the core fix is backed out an a driver
specific thing done instead.
parents eb9d84b0 c61711c1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -966,6 +966,7 @@ static int mchp_pdmc_process(struct snd_pcm_substream *substream,

static struct snd_dmaengine_pcm_config mchp_pdmc_config = {
	.process = mchp_pdmc_process,
	.prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config,
};

static int mchp_pdmc_probe(struct platform_device *pdev)
+10 −4
Original line number Diff line number Diff line
@@ -446,7 +446,7 @@ static int da7219_tonegen_freq_put(struct snd_kcontrol *kcontrol,
	struct soc_mixer_control *mixer_ctrl =
		(struct soc_mixer_control *) kcontrol->private_value;
	unsigned int reg = mixer_ctrl->reg;
	__le16 val;
	__le16 val_new, val_old;
	int ret;

	/*
@@ -454,13 +454,19 @@ static int da7219_tonegen_freq_put(struct snd_kcontrol *kcontrol,
	 * Therefore we need to convert to little endian here to align with
	 * HW registers.
	 */
	val = cpu_to_le16(ucontrol->value.integer.value[0]);
	val_new = cpu_to_le16(ucontrol->value.integer.value[0]);

	mutex_lock(&da7219->ctrl_lock);
	ret = regmap_raw_write(da7219->regmap, reg, &val, sizeof(val));
	ret = regmap_raw_read(da7219->regmap, reg, &val_old, sizeof(val_old));
	if (ret == 0 && (val_old != val_new))
		ret = regmap_raw_write(da7219->regmap, reg,
				&val_new, sizeof(val_new));
	mutex_unlock(&da7219->ctrl_lock);

	if (ret < 0)
		return ret;

	return val_old != val_new;
}


+4 −1
Original line number Diff line number Diff line
@@ -413,6 +413,9 @@ static int max98090_put_enab_tlv(struct snd_kcontrol *kcontrol,

	val = (val >> mc->shift) & mask;

	if (sel < 0 || sel > mc->max)
		return -EINVAL;

	*select = sel;

	/* Setting a volume is only valid if it is already On */
@@ -427,7 +430,7 @@ static int max98090_put_enab_tlv(struct snd_kcontrol *kcontrol,
		mask << mc->shift,
		sel << mc->shift);

	return 0;
	return *select != val;
}

static const char *max98090_perf_pwr_text[] =
+0 −1
Original line number Diff line number Diff line
@@ -341,7 +341,6 @@ static int rt9120_get_reg_size(unsigned int reg)
{
	switch (reg) {
	case 0x00:
	case 0x09:
	case 0x20 ... 0x27:
		return 2;
	case 0x30 ... 0x3D:
+4 −4
Original line number Diff line number Diff line
@@ -530,7 +530,7 @@ static int wm8958_mbc_put(struct snd_kcontrol *kcontrol,

	wm8958_dsp_apply(component, mbc, wm8994->mbc_ena[mbc]);

	return 0;
	return 1;
}

#define WM8958_MBC_SWITCH(xname, xval) {\
@@ -656,7 +656,7 @@ static int wm8958_vss_put(struct snd_kcontrol *kcontrol,

	wm8958_dsp_apply(component, vss, wm8994->vss_ena[vss]);

	return 0;
	return 1;
}


@@ -730,7 +730,7 @@ static int wm8958_hpf_put(struct snd_kcontrol *kcontrol,

	wm8958_dsp_apply(component, hpf % 3, ucontrol->value.integer.value[0]);

	return 0;
	return 1;
}

#define WM8958_HPF_SWITCH(xname, xval) {\
@@ -824,7 +824,7 @@ static int wm8958_enh_eq_put(struct snd_kcontrol *kcontrol,

	wm8958_dsp_apply(component, eq, ucontrol->value.integer.value[0]);

	return 0;
	return 1;
}

#define WM8958_ENH_EQ_SWITCH(xname, xval) {\
Loading