[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