Sound fixes for 3.9-rc7
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. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (GNU/Linux) iQIcBAABAgAGBQJRZ/YNAAoJEGwxgFQ9KSmkPCkQAKt4bPwzCkTaznQlvNGZKI3E SGEfhmvqn4DgzwJh6g93MR+zeZqPTA0pBb8ThINf7D2UpmE5YolwawZqvw1fIaBE /nb3D+oEGDFfZxbmfF+dTwPa8ObBZGC/zROxG7uDigtcJZ+l4pJXUFtTkV7oXLY/ aBDbS9k8pZjwnyGMxD31TmcbKiWtRZ01CzksN/h1bMVIhSNUndnhENhtEV9/fMYJ 7jlcwKX9efrM2kmee2rpdupJ2f8yXxrg5O0SVEg4MuahoKBvOMYgvLrDLknwOHqU fT8aCc7pXo4p4nShtJZT3nfBjIuapmTCA1gLKn0wgrGMjLegXaxxHdpfs3xftrhS TuOpuLTqtSIcGDWmvjkIrtm61XSMVpJT4I4UQq4M/b4ZvQnMiV57gtMB7YWbX0D0 WDvnm0/re5TRbc/4NvYY83+InznYYd9LRCJr/YQgp546dUixFI3riLyMp1dqonW0 Z+PwYM7m6twGF5y03WyUJCjfdFptLGsaeiHwTK8S8uYxbsB1a/X76MKBYcu1ovFK voL3D4yWCACypQEUlLSC1LwTgA7mHruRLLO8FNkuIvchOyvB0ew3td1han7uo3Sm uP6ku9yHaaLziJIrqF4xzY5svYCNEGEch4vkgr7il5gzH68IbuJLCIjpVdYf0Hxn LguWAatKXyQSprmz/CZB =JKpk -----END PGP SIGNATURE----- Merge tag 'sound-3.9' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound 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()
This commit is contained in:
commit
6074fffbf8
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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" },
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -2963,7 +2963,7 @@ int snd_soc_put_volsw_range(struct snd_kcontrol *kcontrol,
|
|||
val = val << shift;
|
||||
|
||||
ret = snd_soc_update_bits_locked(codec, reg, val_mask, val);
|
||||
if (ret != 0)
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
if (snd_soc_volsw_is_stereo(mc)) {
|
||||
|
|
|
@ -43,8 +43,6 @@
|
|||
static const struct snd_pcm_hardware tegra_pcm_hardware = {
|
||||
.info = SNDRV_PCM_INFO_MMAP |
|
||||
SNDRV_PCM_INFO_MMAP_VALID |
|
||||
SNDRV_PCM_INFO_PAUSE |
|
||||
SNDRV_PCM_INFO_RESUME |
|
||||
SNDRV_PCM_INFO_INTERLEAVED,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
.channels_min = 2,
|
||||
|
@ -127,26 +125,6 @@ static int tegra_pcm_hw_free(struct snd_pcm_substream *substream)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int tegra_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
|
||||
{
|
||||
switch (cmd) {
|
||||
case SNDRV_PCM_TRIGGER_START:
|
||||
case SNDRV_PCM_TRIGGER_RESUME:
|
||||
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
|
||||
return snd_dmaengine_pcm_trigger(substream,
|
||||
SNDRV_PCM_TRIGGER_START);
|
||||
|
||||
case SNDRV_PCM_TRIGGER_STOP:
|
||||
case SNDRV_PCM_TRIGGER_SUSPEND:
|
||||
case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
|
||||
return snd_dmaengine_pcm_trigger(substream,
|
||||
SNDRV_PCM_TRIGGER_STOP);
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tegra_pcm_mmap(struct snd_pcm_substream *substream,
|
||||
struct vm_area_struct *vma)
|
||||
{
|
||||
|
@ -164,7 +142,7 @@ static struct snd_pcm_ops tegra_pcm_ops = {
|
|||
.ioctl = snd_pcm_lib_ioctl,
|
||||
.hw_params = tegra_pcm_hw_params,
|
||||
.hw_free = tegra_pcm_hw_free,
|
||||
.trigger = tegra_pcm_trigger,
|
||||
.trigger = snd_dmaengine_pcm_trigger,
|
||||
.pointer = snd_dmaengine_pcm_pointer,
|
||||
.mmap = tegra_pcm_mmap,
|
||||
};
|
||||
|
|
|
@ -509,7 +509,7 @@ static int snd_nativeinstruments_control_get(struct snd_kcontrol *kcontrol,
|
|||
else
|
||||
ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), bRequest,
|
||||
USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN,
|
||||
0, cpu_to_le16(wIndex),
|
||||
0, wIndex,
|
||||
&tmp, sizeof(tmp), 1000);
|
||||
up_read(&mixer->chip->shutdown_rwsem);
|
||||
|
||||
|
@ -540,7 +540,7 @@ static int snd_nativeinstruments_control_put(struct snd_kcontrol *kcontrol,
|
|||
else
|
||||
ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), bRequest,
|
||||
USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT,
|
||||
cpu_to_le16(wValue), cpu_to_le16(wIndex),
|
||||
wValue, wIndex,
|
||||
NULL, 0, 1000);
|
||||
up_read(&mixer->chip->shutdown_rwsem);
|
||||
|
||||
|
|
|
@ -486,7 +486,7 @@ static int snd_usb_nativeinstruments_boot_quirk(struct usb_device *dev)
|
|||
{
|
||||
int ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
|
||||
0xaf, USB_TYPE_VENDOR | USB_RECIP_DEVICE,
|
||||
cpu_to_le16(1), 0, NULL, 0, 1000);
|
||||
1, 0, NULL, 0, 1000);
|
||||
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
|
Loading…
Reference in New Issue
Block a user