ALSA: usb-audio: assume valid clock
authorDaniel Mack <zonque@gmail.com>
Wed, 18 May 2011 09:28:44 +0000 (11:28 +0200)
committerTakashi Iwai <tiwai@suse.de>
Wed, 18 May 2011 09:44:44 +0000 (11:44 +0200)
If the interface can't report a clock's validity, assume that it's
valid.

Signed-off-by: Daniel Mack <zonque@gmail.com>
Reported-by: Vicente Joel <vicentejoel@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/clock.c

index 7754a10..075195e 100644 (file)
@@ -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;