Commit 6074fffb authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull sound fixes from Takashi Iwai:
 "This contains a few small ASoC fixes (wm8903, wm5102, samsung-i2s,
  tegra, and soc-compress) and an endian fix for NI USB-audio devices,
  update for Mark's e-mail address.

  No scary changes, AFAIS."

* tag 'sound-3.9' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
  MAINTAINERS: Update e-mail address
  ASoC: wm5102: Correct lookup of arizona struct in SYSCLK event
  ASoC: wm8903: Fix the bypass to HP/LINEOUT when no DAC or ADC is running
  ALSA: usb-audio: fix endianness bug in snd_nativeinstruments_*
  ASoC: tegra: Don't claim to support PCM pause and resume
  ASoC: Samsung: set drvdata before adding secondary device
  ASoC: Samsung: return error if drvdata is not set
  ASoC: compress: Cancel delayed power down if needed
  ASoC: core: Fix to check return value of snd_soc_update_bits_locked()
parents cfb63baf c5a4698d
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -6631,7 +6631,7 @@ S: Supported
F:	fs/reiserfs/

REGISTER MAP ABSTRACTION
M:	Mark Brown <broonie@opensource.wolfsonmicro.com>
M:	Mark Brown <broonie@kernel.org>
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap.git
S:	Supported
F:	drivers/base/regmap/
@@ -7379,7 +7379,7 @@ F: sound/

SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT (ASoC)
M:	Liam Girdwood <lgirdwood@gmail.com>
M:	Mark Brown <broonie@opensource.wolfsonmicro.com>
M:	Mark Brown <broonie@kernel.org>
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
L:	alsa-devel@alsa-project.org (moderated for non-subscribers)
W:	http://alsa-project.org/main/index.php/ASoC
@@ -7468,7 +7468,7 @@ F: drivers/clk/spear/

SPI SUBSYSTEM
M:	Grant Likely <grant.likely@secretlab.ca>
M:	Mark Brown <broonie@opensource.wolfsonmicro.com>
M:	Mark Brown <broonie@kernel.org>
L:	spi-devel-general@lists.sourceforge.net
Q:	http://patchwork.kernel.org/project/spi-devel-general/list/
T:	git git://git.secretlab.ca/git/linux-2.6.git
@@ -8713,7 +8713,7 @@ F: drivers/scsi/vmw_pvscsi.h

VOLTAGE AND CURRENT REGULATOR FRAMEWORK
M:	Liam Girdwood <lrg@ti.com>
M:	Mark Brown <broonie@opensource.wolfsonmicro.com>
M:	Mark Brown <broonie@kernel.org>
W:	http://opensource.wolfsonmicro.com/node/15
W:	http://www.slimlogic.co.uk/?p=48
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/lrg/regulator.git
+1 −1
Original line number Diff line number Diff line
@@ -584,7 +584,7 @@ static int wm5102_sysclk_ev(struct snd_soc_dapm_widget *w,
			    struct snd_kcontrol *kcontrol, int event)
{
	struct snd_soc_codec *codec = w->codec;
	struct arizona *arizona = dev_get_drvdata(codec->dev);
	struct arizona *arizona = dev_get_drvdata(codec->dev->parent);
	struct regmap *regmap = codec->control_data;
	const struct reg_default *patch = NULL;
	int i, patch_size;
+2 −0
Original line number Diff line number Diff line
@@ -1083,6 +1083,8 @@ static const struct snd_soc_dapm_route wm8903_intercon[] = {
	{ "ROP", NULL, "Right Speaker PGA" },
	{ "RON", NULL, "Right Speaker PGA" },

	{ "Charge Pump", NULL, "CLK_DSP" },

	{ "Left Headphone Output PGA", NULL, "Charge Pump" },
	{ "Right Headphone Output PGA", NULL, "Charge Pump" },
	{ "Left Line Output PGA", NULL, "Charge Pump" },
+12 −5
Original line number Diff line number Diff line
@@ -972,6 +972,7 @@ static const struct snd_soc_dai_ops samsung_i2s_dai_ops = {
static struct i2s_dai *i2s_alloc_dai(struct platform_device *pdev, bool sec)
{
	struct i2s_dai *i2s;
	int ret;

	i2s = devm_kzalloc(&pdev->dev, sizeof(struct i2s_dai), GFP_KERNEL);
	if (i2s == NULL)
@@ -996,15 +997,17 @@ static struct i2s_dai *i2s_alloc_dai(struct platform_device *pdev, bool sec)
		i2s->i2s_dai_drv.capture.channels_max = 2;
		i2s->i2s_dai_drv.capture.rates = SAMSUNG_I2S_RATES;
		i2s->i2s_dai_drv.capture.formats = SAMSUNG_I2S_FMTS;
		dev_set_drvdata(&i2s->pdev->dev, i2s);
	} else {	/* Create a new platform_device for Secondary */
		i2s->pdev = platform_device_register_resndata(NULL,
				"samsung-i2s-sec", -1, NULL, 0, NULL, 0);
		i2s->pdev = platform_device_alloc("samsung-i2s-sec", -1);
		if (IS_ERR(i2s->pdev))
			return NULL;
	}

	/* Pre-assign snd_soc_dai_set_drvdata */
	dev_set_drvdata(&i2s->pdev->dev, i2s);
		platform_set_drvdata(i2s->pdev, i2s);
		ret = platform_device_add(i2s->pdev);
		if (ret < 0)
			return NULL;
	}

	return i2s;
}
@@ -1107,6 +1110,10 @@ static int samsung_i2s_probe(struct platform_device *pdev)

	if (samsung_dai_type == TYPE_SEC) {
		sec_dai = dev_get_drvdata(&pdev->dev);
		if (!sec_dai) {
			dev_err(&pdev->dev, "Unable to get drvdata\n");
			return -EFAULT;
		}
		snd_soc_register_dai(&sec_dai->pdev->dev,
			&sec_dai->i2s_dai_drv);
		asoc_dma_platform_register(&pdev->dev);
+11 −3
Original line number Diff line number Diff line
@@ -211,19 +211,27 @@ static int soc_compr_set_params(struct snd_compr_stream *cstream,
	if (platform->driver->compr_ops && platform->driver->compr_ops->set_params) {
		ret = platform->driver->compr_ops->set_params(cstream, params);
		if (ret < 0)
			goto out;
			goto err;
	}

	if (rtd->dai_link->compr_ops && rtd->dai_link->compr_ops->set_params) {
		ret = rtd->dai_link->compr_ops->set_params(cstream);
		if (ret < 0)
			goto out;
			goto err;
	}

	snd_soc_dapm_stream_event(rtd, SNDRV_PCM_STREAM_PLAYBACK,
				SND_SOC_DAPM_STREAM_START);

out:
	/* cancel any delayed stream shutdown that is pending */
	rtd->pop_wait = 0;
	mutex_unlock(&rtd->pcm_mutex);

	cancel_delayed_work_sync(&rtd->delayed_work);

	return ret;

err:
	mutex_unlock(&rtd->pcm_mutex);
	return ret;
}
Loading