[alsa-devel] [PATCH 1/1] usb-audio: Fix audio output on Roland SC-D70 sound module

Takashi Iwai tiwai at suse.de
Tue Apr 21 07:59:51 CEST 2015


At Tue, 21 Apr 2015 11:23:57 +0900,
Takamichi Horikawa wrote:
> 
> Roland SC-D70 reports its device class as vendor specific class and
> the quirk QUIRK_AUDIO_FIXED_ENDPOINT was used for audio output.
> 
> In the quirks table the sampling rate was hard-coded to 44100 Hz
> and therefore not worked when the sound module was in 48000 Hz mode.
> 
> In this change the quirk is changed to QUIRK_AUDIO_STANDARD_INTERFACE
> but as the sound module reports incorrect bSubframeSize in its
> descriptors, additional change is made in format.c to detect it and
> to override it (which uses the existing code for Edirol SD-90).
> 
> Tested both when the sound module was in 44100 Hz mode and 48000 Hz
> mode and both audio input and output. MIDI related part of the driver
> is not touched.
> 
> Signed-off-by: Takamichi Horikawa <takamichiho at gmail.com>

Applied, thanks.


Takashi

> ---
>  sound/usb/format.c       |  5 ++++-
>  sound/usb/quirks-table.h | 30 ++----------------------------
>  2 files changed, 6 insertions(+), 29 deletions(-)
> 
> diff --git a/sound/usb/format.c b/sound/usb/format.c
> index 8bcc87c..789d19e 100644
> --- a/sound/usb/format.c
> +++ b/sound/usb/format.c
> @@ -79,7 +79,10 @@ static u64 parse_audio_format_i_type(struct snd_usb_audio *chip,
>  		format = 1 << UAC_FORMAT_TYPE_I_PCM;
>  	}
>  	if (format & (1 << UAC_FORMAT_TYPE_I_PCM)) {
> -		if (chip->usb_id == USB_ID(0x0582, 0x0016) /* Edirol SD-90 */ &&
> +		if (((chip->usb_id == USB_ID(0x0582, 0x0016)) ||
> +		     /* Edirol SD-90 */
> +		     (chip->usb_id == USB_ID(0x0582, 0x000c))) &&
> +		     /* Roland SC-D70 */
>  		    sample_width == 24 && sample_bytes == 2)
>  			sample_bytes = 3;
>  		else if (sample_width > sample_bytes * 8) {
> diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
> index 07f984d..2f6d3e9 100644
> --- a/sound/usb/quirks-table.h
> +++ b/sound/usb/quirks-table.h
> @@ -816,37 +816,11 @@ YAMAHA_DEVICE(0x7010, "UB99"),
>  		.data = (const struct snd_usb_audio_quirk[]) {
>  			{
>  				.ifnum = 0,
> -				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
> -				.data = & (const struct audioformat) {
> -					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
> -					.channels = 2,
> -					.iface = 0,
> -					.altsetting = 1,
> -					.altset_idx = 1,
> -					.attributes = 0,
> -					.endpoint = 0x01,
> -					.ep_attr = 0x01,
> -					.rates = SNDRV_PCM_RATE_CONTINUOUS,
> -					.rate_min = 44100,
> -					.rate_max = 44100,
> -				}
> +				.type = QUIRK_AUDIO_STANDARD_INTERFACE
>  			},
>  			{
>  				.ifnum = 1,
> -				.type = QUIRK_AUDIO_FIXED_ENDPOINT,
> -				.data = & (const struct audioformat) {
> -					.formats = SNDRV_PCM_FMTBIT_S24_3LE,
> -					.channels = 2,
> -					.iface = 1,
> -					.altsetting = 1,
> -					.altset_idx = 1,
> -					.attributes = 0,
> -					.endpoint = 0x81,
> -					.ep_attr = 0x01,
> -					.rates = SNDRV_PCM_RATE_CONTINUOUS,
> -					.rate_min = 44100,
> -					.rate_max = 44100,
> -				}
> +				.type = QUIRK_AUDIO_STANDARD_INTERFACE
>  			},
>  			{
>  				.ifnum = 2,
> -- 
> 2.3.5
> 


More information about the Alsa-devel mailing list