Merge tag 'metag-for-v4.1' of git://git.kernel.org/pub/scm/linux/kernel/git/jhogan...
[firefly-linux-kernel-4.4.55.git] / sound / usb / quirks.c
index 9a28365126f9ab170454e46249348a06df8a2f32..7c5a701392785daf7b112443986e5527e63a0324 100644 (file)
@@ -1115,6 +1115,7 @@ bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip)
 {
        /* devices which do not support reading the sample rate. */
        switch (chip->usb_id) {
+       case USB_ID(0x045E, 0x075D): /* MS Lifecam Cinema  */
        case USB_ID(0x045E, 0x076D): /* MS Lifecam HD-5000 */
        case USB_ID(0x04D8, 0xFEEA): /* Benchmark DAC1 Pre */
                return true;
@@ -1125,17 +1126,24 @@ bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip)
 /* Marantz/Denon USB DACs need a vendor cmd to switch
  * between PCM and native DSD mode
  */
+static bool is_marantz_denon_dac(unsigned int id)
+{
+       switch (id) {
+       case USB_ID(0x154e, 0x1003): /* Denon DA-300USB */
+       case USB_ID(0x154e, 0x3005): /* Marantz HD-DAC1 */
+       case USB_ID(0x154e, 0x3006): /* Marantz SA-14S1 */
+               return true;
+       }
+       return false;
+}
+
 int snd_usb_select_mode_quirk(struct snd_usb_substream *subs,
                              struct audioformat *fmt)
 {
        struct usb_device *dev = subs->dev;
        int err;
 
-       switch (subs->stream->chip->usb_id) {
-       case USB_ID(0x154e, 0x1003): /* Denon DA-300USB */
-       case USB_ID(0x154e, 0x3005): /* Marantz HD-DAC1 */
-       case USB_ID(0x154e, 0x3006): /* Marantz SA-14S1 */
-
+       if (is_marantz_denon_dac(subs->stream->chip->usb_id)) {
                /* First switch to alt set 0, otherwise the mode switch cmd
                 * will not be accepted by the DAC
                 */
@@ -1208,17 +1216,10 @@ void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
        /* Marantz/Denon devices with USB DAC functionality need a delay
         * after each class compliant request
         */
-       if ((le16_to_cpu(dev->descriptor.idVendor) == 0x154e) &&
-           (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS) {
-
-               switch (le16_to_cpu(dev->descriptor.idProduct)) {
-               case 0x1003: /* Denon DA300-USB */
-               case 0x3005: /* Marantz HD-DAC1 */
-               case 0x3006: /* Marantz SA-14S1 */
-                       mdelay(20);
-                       break;
-               }
-       }
+       if (is_marantz_denon_dac(USB_ID(le16_to_cpu(dev->descriptor.idVendor),
+                                       le16_to_cpu(dev->descriptor.idProduct)))
+           && (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
+               mdelay(20);
 
        /* Zoom R16/24 needs a tiny delay here, otherwise requests like
         * get/set frequency return as failed despite actually succeeding.
@@ -1273,15 +1274,9 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
        }
 
        /* Denon/Marantz devices with USB DAC functionality */
-       switch (chip->usb_id) {
-       case USB_ID(0x154e, 0x1003): /* Denon DA300-USB */
-       case USB_ID(0x154e, 0x3005): /* Marantz HD-DAC1 */
-       case USB_ID(0x154e, 0x3006): /* Marantz SA-14S1 */
+       if (is_marantz_denon_dac(chip->usb_id)) {
                if (fp->altsetting == 2)
                        return SNDRV_PCM_FMTBIT_DSD_U32_BE;
-               break;
-       default:
-               break;
        }
 
        return 0;