diff options
Diffstat (limited to 'sound/usb/clock.c')
| -rw-r--r-- | sound/usb/clock.c | 11 | 
1 files changed, 10 insertions, 1 deletions
diff --git a/sound/usb/clock.c b/sound/usb/clock.c index 7754a103454..075195e8661 100644 --- a/sound/usb/clock.c +++ b/sound/usb/clock.c @@ -104,6 +104,15 @@ static bool uac_clock_source_is_valid(struct snd_usb_audio *chip, int source_id)  	int err;  	unsigned char data;  	struct usb_device *dev = chip->dev; +	struct uac_clock_source_descriptor *cs_desc = +		snd_usb_find_clock_source(chip->ctrl_intf, source_id); + +	if (!cs_desc) +		return 0; + +	/* If a clock source can't tell us whether it's valid, we assume it is */ +	if (!uac2_control_is_readable(cs_desc->bmControls, UAC2_CS_CONTROL_CLOCK_VALID)) +		return 1;  	err = snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), UAC2_CS_CUR,  			      USB_TYPE_CLASS | USB_RECIP_INTERFACE | USB_DIR_IN, @@ -114,7 +123,7 @@ static bool uac_clock_source_is_valid(struct snd_usb_audio *chip, int source_id)  	if (err < 0) {  		snd_printk(KERN_WARNING "%s(): cannot get clock validity for id %d\n",  			   __func__, source_id); -		return err; +		return 0;  	}  	return !!data;  |