return NULL;
 }
 
+static struct audioformat *
+audio_format_alloc_init(struct snd_usb_audio *chip,
+                      struct usb_host_interface *alts,
+                      int protocol, int iface_no, int altset_idx,
+                      int altno, int num_channels, int clock)
+{
+       struct audioformat *fp;
+
+       fp = kzalloc(sizeof(*fp), GFP_KERNEL);
+       if (!fp)
+               return NULL;
+
+       fp->iface = iface_no;
+       fp->altsetting = altno;
+       fp->altset_idx = altset_idx;
+       fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress;
+       fp->ep_attr = get_endpoint(alts, 0)->bmAttributes;
+       fp->datainterval = snd_usb_parse_datainterval(chip, alts);
+       fp->protocol = protocol;
+       fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
+       fp->channels = num_channels;
+       if (snd_usb_get_speed(chip->dev) == USB_SPEED_HIGH)
+               fp->maxpacksize = (((fp->maxpacksize >> 11) & 3) + 1)
+                               * (fp->maxpacksize & 0x7ff);
+       fp->clock = clock;
+       INIT_LIST_HEAD(&fp->list);
+
+       return fp;
+}
+
+
 int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no)
 {
        struct usb_device *dev;
                                continue;
                }
 
-               fp = kzalloc(sizeof(*fp), GFP_KERNEL);
+               fp = audio_format_alloc_init(chip, alts, protocol, iface_no, i,
+                                            altno, num_channels, clock);
                if (!fp)
                        return -ENOMEM;
 
-               fp->iface = iface_no;
-               fp->altsetting = altno;
-               fp->altset_idx = i;
-               fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress;
-               fp->ep_attr = get_endpoint(alts, 0)->bmAttributes;
-               fp->datainterval = snd_usb_parse_datainterval(chip, alts);
-               fp->protocol = protocol;
-               fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
-               fp->channels = num_channels;
-               if (snd_usb_get_speed(dev) == USB_SPEED_HIGH)
-                       fp->maxpacksize = (((fp->maxpacksize >> 11) & 3) + 1)
-                                       * (fp->maxpacksize & 0x7ff);
-               fp->attributes = parse_uac_endpoint_attributes(chip, alts, protocol, iface_no);
-               fp->clock = clock;
-               INIT_LIST_HEAD(&fp->list);
+               fp->attributes = parse_uac_endpoint_attributes(chip, alts,
+                                                              protocol,
+                                                              iface_no);
 
                /* some quirks for attributes here */
                snd_usb_audioformat_attributes_quirk(chip, fp, stream);