ALSA: usb-audio: Avoid superfluous usb_set_interface() calls
This is a preliminary change for the upcoming quirk implementation. Currently USB-audio driver tries to call usb_set_interface() whenever the format change with interface/altset modification happens. In this patch, the check is replaced with the comparison of cur_altsetting and the targeted altsetting pointer, so that the driver may skip the unnecessary function calls. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
		
							parent
							
								
									964af639ad
								
							
						
					
					
						commit
						b099b9693d
					
				| @ -499,7 +499,7 @@ static int set_format(struct snd_usb_substream *subs, struct audioformat *fmt) | ||||
| 	iface = usb_ifnum_to_if(dev, fmt->iface); | ||||
| 	if (WARN_ON(!iface)) | ||||
| 		return -EINVAL; | ||||
| 	alts = &iface->altsetting[fmt->altset_idx]; | ||||
| 	alts = usb_altnum_to_altsetting(iface, fmt->altsetting); | ||||
| 	altsd = get_iface_desc(alts); | ||||
| 	if (WARN_ON(altsd->bAlternateSetting != fmt->altsetting)) | ||||
| 		return -EINVAL; | ||||
| @ -521,9 +521,7 @@ static int set_format(struct snd_usb_substream *subs, struct audioformat *fmt) | ||||
| 	} | ||||
| 
 | ||||
| 	/* set interface */ | ||||
| 	if (subs->interface != fmt->iface || | ||||
| 	    subs->altset_idx != fmt->altset_idx) { | ||||
| 
 | ||||
| 	if (iface->cur_altsetting != alts) { | ||||
| 		err = snd_usb_select_mode_quirk(subs, fmt); | ||||
| 		if (err < 0) | ||||
| 			return -EIO; | ||||
| @ -537,12 +535,11 @@ static int set_format(struct snd_usb_substream *subs, struct audioformat *fmt) | ||||
| 		} | ||||
| 		dev_dbg(&dev->dev, "setting usb interface %d:%d\n", | ||||
| 			fmt->iface, fmt->altsetting); | ||||
| 		subs->interface = fmt->iface; | ||||
| 		subs->altset_idx = fmt->altset_idx; | ||||
| 
 | ||||
| 		snd_usb_set_interface_quirk(dev); | ||||
| 	} | ||||
| 
 | ||||
| 	subs->interface = fmt->iface; | ||||
| 	subs->altset_idx = fmt->altset_idx; | ||||
| 	subs->data_endpoint = snd_usb_add_endpoint(subs->stream->chip, | ||||
| 						   alts, fmt->endpoint, subs->direction, | ||||
| 						   SND_USB_ENDPOINT_TYPE_DATA); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user