if (ret < 0)
                goto done;
 
+       /* After the probe, update fmt with the values returned from
+        * negotiation with the device.
+        */
+       for (i = 0; i < stream->nformats; ++i) {
+               if (probe->bFormatIndex == stream->format[i].index) {
+                       format = &stream->format[i];
+                       break;
+               }
+       }
+
+       if (i == stream->nformats) {
+               uvc_trace(UVC_TRACE_FORMAT, "Unknown bFormatIndex %u\n",
+                         probe->bFormatIndex);
+               return -EINVAL;
+       }
+
+       for (i = 0; i < format->nframes; ++i) {
+               if (probe->bFrameIndex == format->frame[i].bFrameIndex) {
+                       frame = &format->frame[i];
+                       break;
+               }
+       }
+
+       if (i == format->nframes) {
+               uvc_trace(UVC_TRACE_FORMAT, "Unknown bFrameIndex %u\n",
+                         probe->bFrameIndex);
+               return -EINVAL;
+       }
+
        fmt->fmt.pix.width = frame->wWidth;
        fmt->fmt.pix.height = frame->wHeight;
        fmt->fmt.pix.field = V4L2_FIELD_NONE;
        fmt->fmt.pix.bytesperline = uvc_v4l2_get_bytesperline(format, frame);
        fmt->fmt.pix.sizeimage = probe->dwMaxVideoFrameSize;
+       fmt->fmt.pix.pixelformat = format->fcc;
        fmt->fmt.pix.colorspace = format->colorspace;
        fmt->fmt.pix.priv = 0;