Commit 01200730 authored by Nobutaka Okabe's avatar Nobutaka Okabe Committed by Takashi Iwai

ALSA: usb-audio: Eliminate noise at the start of DSD playback.

[Problem]
In some USB DACs, a terrible pop noise comes to be heard
at the start of DSD playback (in the following situations).

- play first DSD track
- change from PCM track to DSD track
- change from DSD64 track to DSD128 track (and etc...)
- seek DSD track
- Fast-Forward/Rewind DSD track

[Cause]
At the start of playback, there is a little silence.
The silence bit pattern "0x69" is required on DSD mode,
but it is not like that.

[Solution]
This patch adds DSD silence pattern to the endpoint settings.
Signed-off-by: default avatarNobutaka Okabe <nob77413@gmail.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 7f38ca04
...@@ -638,7 +638,21 @@ static int data_ep_set_params(struct snd_usb_endpoint *ep, ...@@ -638,7 +638,21 @@ static int data_ep_set_params(struct snd_usb_endpoint *ep,
ep->datainterval = fmt->datainterval; ep->datainterval = fmt->datainterval;
ep->stride = frame_bits >> 3; ep->stride = frame_bits >> 3;
ep->silence_value = pcm_format == SNDRV_PCM_FORMAT_U8 ? 0x80 : 0;
switch (pcm_format) {
case SNDRV_PCM_FORMAT_U8:
ep->silence_value = 0x80;
break;
case SNDRV_PCM_FORMAT_DSD_U8:
case SNDRV_PCM_FORMAT_DSD_U16_LE:
case SNDRV_PCM_FORMAT_DSD_U32_LE:
case SNDRV_PCM_FORMAT_DSD_U16_BE:
case SNDRV_PCM_FORMAT_DSD_U32_BE:
ep->silence_value = 0x69;
break;
default:
ep->silence_value = 0;
}
/* assume max. frequency is 50% higher than nominal */ /* assume max. frequency is 50% higher than nominal */
ep->freqmax = ep->freqn + (ep->freqn >> 1); ep->freqmax = ep->freqn + (ep->freqn >> 1);
......
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