[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