[alsa-devel] [PATCH] ALSA: usb-audio: Fake also USB device id when alias is given
Jurgen Kramer
gtmkramer at xs4all.nl
Fri Mar 31 13:06:18 CEST 2017
Hi Takashi,
On Fri, 2017-03-31 at 11:26 +0200, Takashi Iwai wrote:
> Recently snd-usb-audio driver received a new option, quirk_alias, to
> allow user to apply the existing quirk for a different device. This
> works for many quirks as is, but some still need more tune-ups:
> namely, some quirks check the USB vendor/device IDs in various
> places,
> thus it doesn't work as long as the ID is different from the expected
> one.
>
> With this patch, the driver stores the aliased USB ID, so that these
> rest quirks per device ID are applied. The transition to use the
> cached USB ID was already done in the past, so what we needed now is
> only to overwrite chip->usb_id.
>
Sounds interesting. Would this work for
snd_usb_interface_dsd_format_quirks() ?
Regards,
Jurgen
> Signed-off-by: Takashi Iwai <tiwai at suse.de>
> ---
> sound/usb/card.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/sound/usb/card.c b/sound/usb/card.c
> index f36cb068dad3..6640277a725b 100644
> --- a/sound/usb/card.c
> +++ b/sound/usb/card.c
> @@ -332,6 +332,7 @@ static int snd_usb_audio_dev_free(struct
> snd_device *device)
> static int snd_usb_audio_create(struct usb_interface *intf,
> struct usb_device *dev, int idx,
> const struct snd_usb_audio_quirk
> *quirk,
> + unsigned int usb_id,
> struct snd_usb_audio **rchip)
> {
> struct snd_card *card;
> @@ -381,8 +382,7 @@ static int snd_usb_audio_create(struct
> usb_interface *intf,
> atomic_set(&chip->usage_count, 0);
> atomic_set(&chip->shutdown, 0);
>
> - chip->usb_id = USB_ID(le16_to_cpu(dev->descriptor.idVendor),
> - le16_to_cpu(dev-
> >descriptor.idProduct));
> + chip->usb_id = usb_id;
> INIT_LIST_HEAD(&chip->pcm_list);
> INIT_LIST_HEAD(&chip->ep_list);
> INIT_LIST_HEAD(&chip->midi_list);
> @@ -569,7 +569,7 @@ static int usb_audio_probe(struct usb_interface
> *intf,
> (vid[i] == -1 || vid[i] ==
> USB_ID_VENDOR(id)) &&
> (pid[i] == -1 || pid[i] ==
> USB_ID_PRODUCT(id))) {
> err = snd_usb_audio_create(intf,
> dev, i, quirk,
> - &chip);
> + id,
> &chip);
> if (err < 0)
> goto __error;
> chip->pm_intf = intf;
More information about the Alsa-devel
mailing list