struct usb_device *dev = chip->dev;
        struct usb_host_interface *host_iface;
        struct usb_interface_descriptor *altsd;
-       void *control_header;
        int i, protocol;
-       int rest_bytes;
 
        /* find audiocontrol interface */
        host_iface = &usb_ifnum_to_if(dev, ctrlif)->altsetting[0];
-       control_header = snd_usb_find_csint_desc(host_iface->extra,
-                                                host_iface->extralen,
-                                                NULL, UAC_HEADER);
        altsd = get_iface_desc(host_iface);
        protocol = altsd->bInterfaceProtocol;
 
-       if (!control_header) {
-               dev_err(&dev->dev, "cannot find UAC_HEADER\n");
-               return -EINVAL;
-       }
-
-       rest_bytes = (void *)(host_iface->extra + host_iface->extralen) -
-               control_header;
-
-       /* just to be sure -- this shouldn't hit at all */
-       if (rest_bytes <= 0) {
-               dev_err(&dev->dev, "invalid control header\n");
-               return -EINVAL;
-       }
-
        switch (protocol) {
        default:
                dev_warn(&dev->dev,
                /* fall through */
 
        case UAC_VERSION_1: {
-               struct uac1_ac_header_descriptor *h1 = control_header;
+               struct uac1_ac_header_descriptor *h1;
+               int rest_bytes;
+
+               h1 = snd_usb_find_csint_desc(host_iface->extra,
+                                                        host_iface->extralen,
+                                                        NULL, UAC_HEADER);
+               if (!h1) {
+                       dev_err(&dev->dev, "cannot find UAC_HEADER\n");
+                       return -EINVAL;
+               }
+
+               rest_bytes = (void *)(host_iface->extra +
+                               host_iface->extralen) - (void *)h1;
+
+               /* just to be sure -- this shouldn't hit at all */
+               if (rest_bytes <= 0) {
+                       dev_err(&dev->dev, "invalid control header\n");
+                       return -EINVAL;
+               }
 
                if (rest_bytes < sizeof(*h1)) {
                        dev_err(&dev->dev, "too short v1 buffer descriptor\n");