Commit 1c4b578a authored by Mark Brown's avatar Mark Brown

Merge remote-tracking branch 'asoc/fix/core' into asoc-linus

parents dc1ccc48 ebff6547
...@@ -3212,11 +3212,11 @@ int snd_soc_bytes_get(struct snd_kcontrol *kcontrol, ...@@ -3212,11 +3212,11 @@ int snd_soc_bytes_get(struct snd_kcontrol *kcontrol,
break; break;
case 2: case 2:
((u16 *)(&ucontrol->value.bytes.data))[0] ((u16 *)(&ucontrol->value.bytes.data))[0]
&= ~params->mask; &= cpu_to_be16(~params->mask);
break; break;
case 4: case 4:
((u32 *)(&ucontrol->value.bytes.data))[0] ((u32 *)(&ucontrol->value.bytes.data))[0]
&= ~params->mask; &= cpu_to_be32(~params->mask);
break; break;
default: default:
return -EINVAL; return -EINVAL;
......
...@@ -66,7 +66,7 @@ static void devm_card_release(struct device *dev, void *res) ...@@ -66,7 +66,7 @@ static void devm_card_release(struct device *dev, void *res)
*/ */
int devm_snd_soc_register_card(struct device *dev, struct snd_soc_card *card) int devm_snd_soc_register_card(struct device *dev, struct snd_soc_card *card)
{ {
struct device **ptr; struct snd_soc_card **ptr;
int ret; int ret;
ptr = devres_alloc(devm_card_release, sizeof(*ptr), GFP_KERNEL); ptr = devres_alloc(devm_card_release, sizeof(*ptr), GFP_KERNEL);
...@@ -75,7 +75,7 @@ int devm_snd_soc_register_card(struct device *dev, struct snd_soc_card *card) ...@@ -75,7 +75,7 @@ int devm_snd_soc_register_card(struct device *dev, struct snd_soc_card *card)
ret = snd_soc_register_card(card); ret = snd_soc_register_card(card);
if (ret == 0) { if (ret == 0) {
*ptr = dev; *ptr = card;
devres_add(dev, ptr); devres_add(dev, ptr);
} else { } else {
devres_free(ptr); devres_free(ptr);
......
...@@ -148,12 +148,12 @@ static void soc_pcm_apply_msb(struct snd_pcm_substream *substream, ...@@ -148,12 +148,12 @@ static void soc_pcm_apply_msb(struct snd_pcm_substream *substream,
} }
} }
static void soc_pcm_init_runtime_hw(struct snd_pcm_hardware *hw, static void soc_pcm_init_runtime_hw(struct snd_pcm_runtime *runtime,
struct snd_soc_pcm_stream *codec_stream, struct snd_soc_pcm_stream *codec_stream,
struct snd_soc_pcm_stream *cpu_stream) struct snd_soc_pcm_stream *cpu_stream)
{ {
hw->rate_min = max(codec_stream->rate_min, cpu_stream->rate_min); struct snd_pcm_hardware *hw = &runtime->hw;
hw->rate_max = max(codec_stream->rate_max, cpu_stream->rate_max);
hw->channels_min = max(codec_stream->channels_min, hw->channels_min = max(codec_stream->channels_min,
cpu_stream->channels_min); cpu_stream->channels_min);
hw->channels_max = min(codec_stream->channels_max, hw->channels_max = min(codec_stream->channels_max,
...@@ -166,6 +166,13 @@ static void soc_pcm_init_runtime_hw(struct snd_pcm_hardware *hw, ...@@ -166,6 +166,13 @@ static void soc_pcm_init_runtime_hw(struct snd_pcm_hardware *hw,
if (cpu_stream->rates if (cpu_stream->rates
& (SNDRV_PCM_RATE_KNOT | SNDRV_PCM_RATE_CONTINUOUS)) & (SNDRV_PCM_RATE_KNOT | SNDRV_PCM_RATE_CONTINUOUS))
hw->rates |= codec_stream->rates; hw->rates |= codec_stream->rates;
snd_pcm_limit_hw_rates(runtime);
hw->rate_min = max(hw->rate_min, cpu_stream->rate_min);
hw->rate_min = max(hw->rate_min, codec_stream->rate_min);
hw->rate_max = min_not_zero(hw->rate_max, cpu_stream->rate_max);
hw->rate_max = min_not_zero(hw->rate_max, codec_stream->rate_max);
} }
/* /*
...@@ -235,15 +242,14 @@ static int soc_pcm_open(struct snd_pcm_substream *substream) ...@@ -235,15 +242,14 @@ static int soc_pcm_open(struct snd_pcm_substream *substream)
/* Check that the codec and cpu DAIs are compatible */ /* Check that the codec and cpu DAIs are compatible */
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
soc_pcm_init_runtime_hw(&runtime->hw, &codec_dai_drv->playback, soc_pcm_init_runtime_hw(runtime, &codec_dai_drv->playback,
&cpu_dai_drv->playback); &cpu_dai_drv->playback);
} else { } else {
soc_pcm_init_runtime_hw(&runtime->hw, &codec_dai_drv->capture, soc_pcm_init_runtime_hw(runtime, &codec_dai_drv->capture,
&cpu_dai_drv->capture); &cpu_dai_drv->capture);
} }
ret = -EINVAL; ret = -EINVAL;
snd_pcm_limit_hw_rates(runtime);
if (!runtime->hw.rates) { if (!runtime->hw.rates) {
printk(KERN_ERR "ASoC: %s <-> %s No matching rates\n", printk(KERN_ERR "ASoC: %s <-> %s No matching rates\n",
codec_dai->name, cpu_dai->name); codec_dai->name, cpu_dai->name);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment