Commit 1ce3cbe2 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

Merge tag 'asoc-fix-v4.3-rc2' of...

Merge tag 'asoc-fix-v4.3-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus

ASoC: Fixes for v4.3

A disappointingly large set of fixes, though none of them very big and
very widely spread over many different drivers.  Nothing especially
stands out, it's mostly all device specific and relatively minor.
parents 83510441 ed14ee0e
Loading
Loading
Loading
Loading
+3 −6
Original line number Original line Diff line number Diff line
@@ -11239,7 +11239,6 @@ VOLTAGE AND CURRENT REGULATOR FRAMEWORK
M:	Liam Girdwood <lgirdwood@gmail.com>
M:	Liam Girdwood <lgirdwood@gmail.com>
M:	Mark Brown <broonie@kernel.org>
M:	Mark Brown <broonie@kernel.org>
L:	linux-kernel@vger.kernel.org
L:	linux-kernel@vger.kernel.org
W:	http://opensource.wolfsonmicro.com/node/15
W:	http://www.slimlogic.co.uk/?p=48
W:	http://www.slimlogic.co.uk/?p=48
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git
S:	Supported
S:	Supported
@@ -11368,17 +11367,15 @@ WM97XX TOUCHSCREEN DRIVERS
M:	Mark Brown <broonie@kernel.org>
M:	Mark Brown <broonie@kernel.org>
M:	Liam Girdwood <lrg@slimlogic.co.uk>
M:	Liam Girdwood <lrg@slimlogic.co.uk>
L:	linux-input@vger.kernel.org
L:	linux-input@vger.kernel.org
T:	git git://opensource.wolfsonmicro.com/linux-2.6-touch
W:	https://github.com/CirrusLogic/linux-drivers/wiki
W:	http://opensource.wolfsonmicro.com/node/7
S:	Supported
S:	Supported
F:	drivers/input/touchscreen/*wm97*
F:	drivers/input/touchscreen/*wm97*
F:	include/linux/wm97xx.h
F:	include/linux/wm97xx.h


WOLFSON MICROELECTRONICS DRIVERS
WOLFSON MICROELECTRONICS DRIVERS
L:	patches@opensource.wolfsonmicro.com
L:	patches@opensource.wolfsonmicro.com
T:	git git://opensource.wolfsonmicro.com/linux-2.6-asoc
T:	git https://github.com/CirrusLogic/linux-drivers.git
T:	git git://opensource.wolfsonmicro.com/linux-2.6-audioplus
W:	https://github.com/CirrusLogic/linux-drivers/wiki
W:	http://opensource.wolfsonmicro.com/content/linux-drivers-wolfson-devices
S:	Supported
S:	Supported
F:	Documentation/hwmon/wm83??
F:	Documentation/hwmon/wm83??
F:	arch/arm/mach-s3c64xx/mach-crag6410*
F:	arch/arm/mach-s3c64xx/mach-crag6410*
+8 −7
Original line number Original line Diff line number Diff line
@@ -9,6 +9,14 @@ menuconfig SND_ARM
	  Drivers that are implemented on ASoC can be found in
	  Drivers that are implemented on ASoC can be found in
	  "ALSA for SoC audio support" section.
	  "ALSA for SoC audio support" section.


config SND_PXA2XX_LIB
	tristate
	select SND_AC97_CODEC if SND_PXA2XX_LIB_AC97
	select SND_DMAENGINE_PCM

config SND_PXA2XX_LIB_AC97
	bool

if SND_ARM
if SND_ARM


config SND_ARMAACI
config SND_ARMAACI
@@ -21,13 +29,6 @@ config SND_PXA2XX_PCM
	tristate
	tristate
	select SND_PCM
	select SND_PCM


config SND_PXA2XX_LIB
	tristate
	select SND_AC97_CODEC if SND_PXA2XX_LIB_AC97

config SND_PXA2XX_LIB_AC97
	bool

config SND_PXA2XX_AC97
config SND_PXA2XX_AC97
	tristate "AC97 driver for the Intel PXA2xx chip"
	tristate "AC97 driver for the Intel PXA2xx chip"
	depends on ARCH_PXA
	depends on ARCH_PXA
+0 −1
Original line number Original line Diff line number Diff line
@@ -296,7 +296,6 @@ static int au1xpsc_i2s_drvprobe(struct platform_device *pdev)
{
{
	struct resource *iores, *dmares;
	struct resource *iores, *dmares;
	unsigned long sel;
	unsigned long sel;
	int ret;
	struct au1xpsc_audio_data *wd;
	struct au1xpsc_audio_data *wd;


	wd = devm_kzalloc(&pdev->dev, sizeof(struct au1xpsc_audio_data),
	wd = devm_kzalloc(&pdev->dev, sizeof(struct au1xpsc_audio_data),
+13 −9
Original line number Original line Diff line number Diff line
@@ -732,14 +732,14 @@ static const struct snd_kcontrol_new rt5645_mono_adc_r_mix[] = {
static const struct snd_kcontrol_new rt5645_dac_l_mix[] = {
static const struct snd_kcontrol_new rt5645_dac_l_mix[] = {
	SOC_DAPM_SINGLE("Stereo ADC Switch", RT5645_AD_DA_MIXER,
	SOC_DAPM_SINGLE("Stereo ADC Switch", RT5645_AD_DA_MIXER,
			RT5645_M_ADCMIX_L_SFT, 1, 1),
			RT5645_M_ADCMIX_L_SFT, 1, 1),
	SOC_DAPM_SINGLE("DAC1 Switch", RT5645_AD_DA_MIXER,
	SOC_DAPM_SINGLE_AUTODISABLE("DAC1 Switch", RT5645_AD_DA_MIXER,
			RT5645_M_DAC1_L_SFT, 1, 1),
			RT5645_M_DAC1_L_SFT, 1, 1),
};
};


static const struct snd_kcontrol_new rt5645_dac_r_mix[] = {
static const struct snd_kcontrol_new rt5645_dac_r_mix[] = {
	SOC_DAPM_SINGLE("Stereo ADC Switch", RT5645_AD_DA_MIXER,
	SOC_DAPM_SINGLE("Stereo ADC Switch", RT5645_AD_DA_MIXER,
			RT5645_M_ADCMIX_R_SFT, 1, 1),
			RT5645_M_ADCMIX_R_SFT, 1, 1),
	SOC_DAPM_SINGLE("DAC1 Switch", RT5645_AD_DA_MIXER,
	SOC_DAPM_SINGLE_AUTODISABLE("DAC1 Switch", RT5645_AD_DA_MIXER,
			RT5645_M_DAC1_R_SFT, 1, 1),
			RT5645_M_DAC1_R_SFT, 1, 1),
};
};


@@ -1381,7 +1381,7 @@ static void hp_amp_power(struct snd_soc_codec *codec, int on)
				regmap_write(rt5645->regmap, RT5645_PR_BASE +
				regmap_write(rt5645->regmap, RT5645_PR_BASE +
					RT5645_MAMP_INT_REG2, 0xfc00);
					RT5645_MAMP_INT_REG2, 0xfc00);
				snd_soc_write(codec, RT5645_DEPOP_M2, 0x1140);
				snd_soc_write(codec, RT5645_DEPOP_M2, 0x1140);
				mdelay(5);
				msleep(40);
				rt5645->hp_on = true;
				rt5645->hp_on = true;
			} else {
			} else {
				/* depop parameters */
				/* depop parameters */
@@ -2829,13 +2829,12 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert)
			snd_soc_dapm_sync(dapm);
			snd_soc_dapm_sync(dapm);
			rt5645->jack_type = SND_JACK_HEADPHONE;
			rt5645->jack_type = SND_JACK_HEADPHONE;
		}
		}

		snd_soc_update_bits(codec, RT5645_CHARGE_PUMP, 0x0300, 0x0200);
		snd_soc_write(codec, RT5645_DEPOP_M1, 0x001d);
		snd_soc_write(codec, RT5645_DEPOP_M1, 0x0001);
	} else { /* jack out */
	} else { /* jack out */
		rt5645->jack_type = 0;
		rt5645->jack_type = 0;


		regmap_update_bits(rt5645->regmap, RT5645_HP_VOL,
			RT5645_L_MUTE | RT5645_R_MUTE,
			RT5645_L_MUTE | RT5645_R_MUTE);
		regmap_update_bits(rt5645->regmap, RT5645_IN1_CTRL2,
		regmap_update_bits(rt5645->regmap, RT5645_IN1_CTRL2,
			RT5645_CBJ_MN_JD, RT5645_CBJ_MN_JD);
			RT5645_CBJ_MN_JD, RT5645_CBJ_MN_JD);
		regmap_update_bits(rt5645->regmap, RT5645_IN1_CTRL1,
		regmap_update_bits(rt5645->regmap, RT5645_IN1_CTRL1,
@@ -2880,8 +2879,6 @@ int rt5645_set_jack_detect(struct snd_soc_codec *codec,
		rt5645->en_button_func = true;
		rt5645->en_button_func = true;
		regmap_update_bits(rt5645->regmap, RT5645_GPIO_CTRL1,
		regmap_update_bits(rt5645->regmap, RT5645_GPIO_CTRL1,
				RT5645_GP1_PIN_IRQ, RT5645_GP1_PIN_IRQ);
				RT5645_GP1_PIN_IRQ, RT5645_GP1_PIN_IRQ);
		regmap_update_bits(rt5645->regmap, RT5645_DEPOP_M1,
				RT5645_HP_CB_MASK, RT5645_HP_CB_PU);
		regmap_update_bits(rt5645->regmap, RT5645_GEN_CTRL1,
		regmap_update_bits(rt5645->regmap, RT5645_GEN_CTRL1,
				RT5645_DIG_GATE_CTRL, RT5645_DIG_GATE_CTRL);
				RT5645_DIG_GATE_CTRL, RT5645_DIG_GATE_CTRL);
	}
	}
@@ -3205,6 +3202,13 @@ static const struct dmi_system_id dmi_platform_intel_braswell[] = {
			DMI_MATCH(DMI_PRODUCT_NAME, "Celes"),
			DMI_MATCH(DMI_PRODUCT_NAME, "Celes"),
		},
		},
	},
	},
	{
		.ident = "Google Ultima",
		.callback = strago_quirk_cb,
		.matches = {
			DMI_MATCH(DMI_PRODUCT_NAME, "Ultima"),
		},
	},
	{ }
	{ }
};
};


+9 −14
Original line number Original line Diff line number Diff line
@@ -577,7 +577,6 @@ static int wm0010_boot(struct snd_soc_codec *codec)
	struct wm0010_priv *wm0010 = snd_soc_codec_get_drvdata(codec);
	struct wm0010_priv *wm0010 = snd_soc_codec_get_drvdata(codec);
	unsigned long flags;
	unsigned long flags;
	int ret;
	int ret;
	const struct firmware *fw;
	struct spi_message m;
	struct spi_message m;
	struct spi_transfer t;
	struct spi_transfer t;
	struct dfw_pllrec pll_rec;
	struct dfw_pllrec pll_rec;
@@ -623,14 +622,6 @@ static int wm0010_boot(struct snd_soc_codec *codec)
	wm0010->state = WM0010_OUT_OF_RESET;
	wm0010->state = WM0010_OUT_OF_RESET;
	spin_unlock_irqrestore(&wm0010->irq_lock, flags);
	spin_unlock_irqrestore(&wm0010->irq_lock, flags);


	/* First the bootloader */
	ret = request_firmware(&fw, "wm0010_stage2.bin", codec->dev);
	if (ret != 0) {
		dev_err(codec->dev, "Failed to request stage2 loader: %d\n",
			ret);
		goto abort;
	}

	if (!wait_for_completion_timeout(&wm0010->boot_completion,
	if (!wait_for_completion_timeout(&wm0010->boot_completion,
					 msecs_to_jiffies(20)))
					 msecs_to_jiffies(20)))
		dev_err(codec->dev, "Failed to get interrupt from DSP\n");
		dev_err(codec->dev, "Failed to get interrupt from DSP\n");
@@ -673,7 +664,7 @@ static int wm0010_boot(struct snd_soc_codec *codec)


		img_swap = kzalloc(len, GFP_KERNEL | GFP_DMA);
		img_swap = kzalloc(len, GFP_KERNEL | GFP_DMA);
		if (!img_swap)
		if (!img_swap)
			goto abort;
			goto abort_out;


		/* We need to re-order for 0010 */
		/* We need to re-order for 0010 */
		byte_swap_64((u64 *)&pll_rec, img_swap, len);
		byte_swap_64((u64 *)&pll_rec, img_swap, len);
@@ -688,16 +679,16 @@ static int wm0010_boot(struct snd_soc_codec *codec)
		spi_message_add_tail(&t, &m);
		spi_message_add_tail(&t, &m);


		ret = spi_sync(spi, &m);
		ret = spi_sync(spi, &m);
		if (ret != 0) {
		if (ret) {
			dev_err(codec->dev, "First PLL write failed: %d\n", ret);
			dev_err(codec->dev, "First PLL write failed: %d\n", ret);
			goto abort;
			goto abort_swap;
		}
		}


		/* Use a second send of the message to get the return status */
		/* Use a second send of the message to get the return status */
		ret = spi_sync(spi, &m);
		ret = spi_sync(spi, &m);
		if (ret != 0) {
		if (ret) {
			dev_err(codec->dev, "Second PLL write failed: %d\n", ret);
			dev_err(codec->dev, "Second PLL write failed: %d\n", ret);
			goto abort;
			goto abort_swap;
		}
		}


		p = (u32 *)out;
		p = (u32 *)out;
@@ -730,6 +721,10 @@ static int wm0010_boot(struct snd_soc_codec *codec)


	return 0;
	return 0;


abort_swap:
	kfree(img_swap);
abort_out:
	kfree(out);
abort:
abort:
	/* Put the chip back into reset */
	/* Put the chip back into reset */
	wm0010_halt(codec);
	wm0010_halt(codec);
Loading