diff options
Diffstat (limited to 'sound/soc/codecs/ssm2602.c')
-rw-r--r-- | sound/soc/codecs/ssm2602.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/sound/soc/codecs/ssm2602.c b/sound/soc/codecs/ssm2602.c index d6af069b7ed1..1fc4c8e0899c 100644 --- a/sound/soc/codecs/ssm2602.c +++ b/sound/soc/codecs/ssm2602.c | |||
@@ -336,15 +336,17 @@ static int ssm2602_startup(struct snd_pcm_substream *substream, | |||
336 | master_runtime->sample_bits, | 336 | master_runtime->sample_bits, |
337 | master_runtime->rate); | 337 | master_runtime->rate); |
338 | 338 | ||
339 | snd_pcm_hw_constraint_minmax(substream->runtime, | 339 | if (master_runtime->rate != 0) |
340 | SNDRV_PCM_HW_PARAM_RATE, | 340 | snd_pcm_hw_constraint_minmax(substream->runtime, |
341 | master_runtime->rate, | 341 | SNDRV_PCM_HW_PARAM_RATE, |
342 | master_runtime->rate); | 342 | master_runtime->rate, |
343 | 343 | master_runtime->rate); | |
344 | snd_pcm_hw_constraint_minmax(substream->runtime, | 344 | |
345 | SNDRV_PCM_HW_PARAM_SAMPLE_BITS, | 345 | if (master_runtime->sample_bits != 0) |
346 | master_runtime->sample_bits, | 346 | snd_pcm_hw_constraint_minmax(substream->runtime, |
347 | master_runtime->sample_bits); | 347 | SNDRV_PCM_HW_PARAM_SAMPLE_BITS, |
348 | master_runtime->sample_bits, | ||
349 | master_runtime->sample_bits); | ||
348 | 350 | ||
349 | ssm2602->slave_substream = substream; | 351 | ssm2602->slave_substream = substream; |
350 | } else | 352 | } else |
@@ -372,6 +374,11 @@ static void ssm2602_shutdown(struct snd_pcm_substream *substream, | |||
372 | struct snd_soc_device *socdev = rtd->socdev; | 374 | struct snd_soc_device *socdev = rtd->socdev; |
373 | struct snd_soc_codec *codec = socdev->card->codec; | 375 | struct snd_soc_codec *codec = socdev->card->codec; |
374 | struct ssm2602_priv *ssm2602 = codec->private_data; | 376 | struct ssm2602_priv *ssm2602 = codec->private_data; |
377 | |||
378 | if (ssm2602->master_substream == substream) | ||
379 | ssm2602->master_substream = ssm2602->slave_substream; | ||
380 | |||
381 | ssm2602->slave_substream = NULL; | ||
375 | /* deactivate */ | 382 | /* deactivate */ |
376 | if (!codec->active) | 383 | if (!codec->active) |
377 | ssm2602_write(codec, SSM2602_ACTIVE, 0); | 384 | ssm2602_write(codec, SSM2602_ACTIVE, 0); |