OSDN Git Service

Merge "sound: usb: Fix format desc usage for BADD 3.0 devices"
authorLinux Build Service Account <lnxbuild@quicinc.com>
Thu, 11 May 2017 18:48:38 +0000 (11:48 -0700)
committerGerrit - the friendly Code Review server <code-review@localhost>
Thu, 11 May 2017 18:48:37 +0000 (11:48 -0700)
sound/usb/stream.c

index 2bb5035..a7d7c3a 100644 (file)
@@ -652,6 +652,16 @@ int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no)
                case UAC_VERSION_3: {
                        int wMaxPacketSize;
 
+                       /*
+                        * Allocate a dummy instance of fmt and set format type
+                        * to UAC_FORMAT_TYPE_I for BADD support; free fmt
+                        * after its last usage
+                        */
+                       fmt = kzalloc(sizeof(*fmt), GFP_KERNEL);
+                       if (!fmt)
+                               return -ENOMEM;
+
+                       fmt->bFormatType = UAC_FORMAT_TYPE_I;
                        format = UAC_FORMAT_TYPE_I_PCM;
                        clock = BADD_CLOCK_SOURCE;
                        wMaxPacketSize = le16_to_cpu(get_endpoint(alts, 0)
@@ -678,6 +688,7 @@ int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no)
                                dev_err(&dev->dev,
                                        "%u:%d: invalid wMaxPacketSize\n",
                                        iface_no, altno);
+                               kfree(fmt);
                                continue;
                        }
                }
@@ -776,6 +787,8 @@ populate_fp:
                        continue;
                }
 
+               if (protocol == UAC_VERSION_3)
+                       kfree(fmt);
                /* Create chmap */
                if (fp->channels != num_channels)
                        chconfig = 0;