/* loop reading a frame */
 again:
-       while (!gspca_dev->frozen && gspca_dev->dev && gspca_dev->streaming) {
+       while (gspca_dev->dev && gspca_dev->streaming) {
+#ifdef CONFIG_PM
+               if (gspca_dev->frozen)
+                       break;
+#endif
 
                /* request a frame */
                mutex_lock(&gspca_dev->usb_lock);
                mutex_unlock(&gspca_dev->usb_lock);
                if (ret < 0)
                        break;
-               if (gspca_dev->frozen || !gspca_dev->dev ||
-                                        !gspca_dev->streaming)
+#ifdef CONFIG_PM
+               if (gspca_dev->frozen)
+                       break;
+#endif
+               if (!gspca_dev->dev || !gspca_dev->streaming)
                        break;
 
                /* the frame comes in parts */
                                 * error. Just restart. */
                                goto again;
                        }
-                       if (gspca_dev->frozen || !gspca_dev->dev ||
-                                                !gspca_dev->streaming)
+#ifdef CONFIG_PM
+                       if (gspca_dev->frozen)
+                               goto out;
+#endif
+                       if (!gspca_dev->dev || !gspca_dev->streaming)
                                goto out;
                        if (len < FPIX_MAX_TRANSFER ||
                                (data[len - 2] == 0xff &&
 
                goto quit_stream;
        }
 
-       while (!gspca_dev->frozen && gspca_dev->dev && gspca_dev->streaming) {
+       while (gspca_dev->dev && gspca_dev->streaming) {
+#ifdef CONFIG_PM
+               if (gspca_dev->frozen)
+                       break;
+#endif
                /* Check if this is a new frame. If so, start the frame first */
                if (!header_read) {
                        mutex_lock(&gspca_dev->usb_lock);
 
        frame_sz = gspca_dev->cam.cam_mode[gspca_dev->curr_mode].sizeimage
                        + FRAME_HEADER_LEN;
 
-       while (!gspca_dev->frozen && gspca_dev->dev && gspca_dev->streaming) {
+       while (gspca_dev->dev && gspca_dev->streaming) {
+#ifdef CONFIG_PM
+               if (gspca_dev->frozen)
+                       break;
+#endif
                /* request some data and then read it until we have
                 * a complete frame. */
                bytes_left = frame_sz;
 
                goto quit_stream;
        }
 
-       while (!gspca_dev->frozen && gspca_dev->dev && gspca_dev->streaming) {
+       while (gspca_dev->dev && gspca_dev->streaming) {
+#ifdef CONFIG_PM
+               if (gspca_dev->frozen)
+                       break;
+#endif
                /* Request the header, which tells the size to download */
                ret = usb_bulk_msg(gspca_dev->dev,
                                usb_rcvbulkpipe(gspca_dev->dev, 0x81),
 
                goto exit;
        }
 
-       while (!gspca_dev->frozen && gspca_dev->dev && gspca_dev->streaming) {
+       while (gspca_dev->dev && gspca_dev->streaming) {
+#ifdef CONFIG_PM
+               if (gspca_dev->frozen)
+                       break;
+#endif
                ret = vicam_read_frame(gspca_dev, buffer, frame_sz);
                if (ret < 0)
                        break;
 
                msleep(100);
 
                mutex_lock(&gspca_dev->usb_lock);
-               if (gspca_dev->frozen || !gspca_dev->dev ||
-                                        !gspca_dev->streaming)
+#ifdef CONFIG_PM
+               if (gspca_dev->frozen)
+                       goto err;
+#endif
+               if (!gspca_dev->dev || !gspca_dev->streaming)
                        goto err;
 
                /* Bit 0 of register 11 indicates FIFO overflow */