/* Set various parameters */
        pdev->vframes = frames;
-       pdev->vsize = size;
        pdev->valternate = pEntry->alternate;
        pdev->image = pwc_image_sizes[size];
        pdev->frame_size = (pdev->image.x * pdev->image.y * 3) / 2;
 }
 
 
-static int set_video_mode_Timon(struct pwc_device *pdev, int size, int frames, int compression, int snapshot)
+static int set_video_mode_Timon(struct pwc_device *pdev, int size, int frames,
+       int compression)
 {
        unsigned char buf[13];
        const struct Timon_table_entry *pChoose;
                return -ENOENT; /* Not supported. */
 
        memcpy(buf, pChoose->mode, 13);
-       if (snapshot)
-               buf[0] |= 0x80;
        ret = send_video_command(pdev, pdev->vendpoint, buf, 13);
        if (ret < 0)
                return ret;
 
        /* Set various parameters */
        pdev->vframes = frames;
-       pdev->vsize = size;
-       pdev->vsnapshot = snapshot;
        pdev->valternate = pChoose->alternate;
        pdev->image = pwc_image_sizes[size];
        pdev->vbandlength = pChoose->bandlength;
 }
 
 
-static int set_video_mode_Kiara(struct pwc_device *pdev, int size, int frames, int compression, int snapshot)
+static int set_video_mode_Kiara(struct pwc_device *pdev, int size, int frames,
+       int compression)
 {
        const struct Kiara_table_entry *pChoose = NULL;
        int fps, ret;
        unsigned char buf[12];
-       struct Kiara_table_entry RawEntry = {6, 773, 1272, {0xAD, 0xF4, 0x10, 0x27, 0xB6, 0x24, 0x96, 0x02, 0x30, 0x05, 0x03, 0x80}};
 
        if (size >= PSZ_MAX || frames < 5 || frames > 30 || compression < 0 || compression > 3)
                return -EINVAL;
                return -EINVAL;
        fps = (frames / 5) - 1;
 
-       /* special case: VGA @ 5 fps and snapshot is raw bayer mode */
-       if (size == PSZ_VGA && frames == 5 && snapshot && pdev->pixfmt != V4L2_PIX_FMT_YUV420)
-       {
-               /* Only available in case the raw palette is selected or
-                  we have the decompressor available. This mode is
-                  only available in compressed form
-               */
-               PWC_DEBUG_SIZE("Choosing VGA/5 BAYER mode.\n");
-               pChoose = &RawEntry;
-       }
-       else
-       {
-               /* Find a supported framerate with progressively higher compression ratios
-                  if the preferred ratio is not available.
-                  Skip this step when using RAW modes.
-               */
-               snapshot = 0;
-               while (compression <= 3) {
-                       pChoose = &Kiara_table[size][fps][compression];
-                       if (pChoose->alternate != 0)
-                               break;
-                       compression++;
-               }
+       /* Find a supported framerate with progressively higher compression
+          ratios if the preferred ratio is not available.
+          Skip this step when using RAW modes.
+       */
+       while (compression <= 3) {
+               pChoose = &Kiara_table[size][fps][compression];
+               if (pChoose->alternate != 0)
+                       break;
+               compression++;
        }
        if (pChoose == NULL || pChoose->alternate == 0)
                return -ENOENT; /* Not supported. */
 
        /* usb_control_msg won't take staticly allocated arrays as argument?? */
        memcpy(buf, pChoose->mode, 12);
-       if (snapshot)
-               buf[0] |= 0x80;
 
        /* Firmware bug: video endpoint is 5, but commands are sent to endpoint 4 */
        ret = send_video_command(pdev, 4 /* pdev->vendpoint */, buf, 12);
        memcpy(pdev->cmd_buf, buf, 12);
        /* All set and go */
        pdev->vframes = frames;
-       pdev->vsize = size;
-       pdev->vsnapshot = snapshot;
        pdev->valternate = pChoose->alternate;
        pdev->image = pwc_image_sizes[size];
        pdev->vbandlength = pChoose->bandlength;
                pdev->frame_size = (pdev->vbandlength * pdev->image.y) / 4;
        else
                pdev->frame_size = (pdev->image.x * pdev->image.y * 12) / 8;
-       PWC_TRACE("frame_size=%d, vframes=%d, vsize=%d, vsnapshot=%d, vbandlength=%d\n",
-           pdev->frame_size,pdev->vframes,pdev->vsize,pdev->vsnapshot,pdev->vbandlength);
+       PWC_TRACE("frame_size=%d, vframes=%d, vsize=%d, vbandlength=%d\n",
+           pdev->frame_size, pdev->vframes, size, pdev->vbandlength);
        return 0;
 }
 
    @height: viewport height
    @frame: framerate, in fps
    @compression: preferred compression ratio
-   @snapshot: snapshot mode or streaming
  */
-int pwc_set_video_mode(struct pwc_device *pdev, int width, int height, int frames, int compression, int snapshot)
+int pwc_set_video_mode(struct pwc_device *pdev, int width, int height,
+       int frames, int compression)
 {
        int ret, size;
 
                ret = set_video_mode_Nala(pdev, size, frames);
 
        } else if (DEVICE_USE_CODEC3(pdev->type)) {
-               ret = set_video_mode_Kiara(pdev, size, frames, compression, snapshot);
+               ret = set_video_mode_Kiara(pdev, size, frames, compression);
 
        } else {
-               ret = set_video_mode_Timon(pdev, size, frames, compression, snapshot);
+               ret = set_video_mode_Timon(pdev, size, frames, compression);
        }
        if (ret < 0) {
                PWC_ERROR("Failed to set video mode %s@%d fps; return code = %d\n", size2name[size], frames, ret);
                if (ARGR(qual) < 0 || ARGR(qual) > 3)
                        ret = -EINVAL;
                else
-                       ret = pwc_set_video_mode(pdev, pdev->view.x, pdev->view.y, pdev->vframes, ARGR(qual), pdev->vsnapshot);
+                       ret = pwc_set_video_mode(pdev,
+                                                pdev->view.x, pdev->view.y,
+                                                pdev->vframes, ARGR(qual));
 leave:
                mutex_unlock(&pdev->udevlock);
                break;
 
 # define USE_LOOKUP_TABLE_TO_CLAMP 1
 #endif
 
-/*
- * ENABLE_BAYER_DECODER
- *   0: bayer decoder is not build (save some space)
- *   1: bayer decoder is build and can be used
- */
-#define ENABLE_BAYER_DECODER 0
-
 static void build_subblock_pattern(struct pwc_dec23_private *pdec)
 {
        static const unsigned int initial_values[12] = {
 #endif
 }
 
-#if ENABLE_BAYER_DECODER
-/*
- * Format: 8x2 pixels
- *   . G . G . G . G . G . G . G
- *   . . . . . . . . . . . . . .
- *   . G . G . G . G . G . G . G
- *   . . . . . . . . . . . . . .
- *   or
- *   . . . . . . . . . . . . . .
- *   G . G . G . G . G . G . G .
- *   . . . . . . . . . . . . . .
- *   G . G . G . G . G . G . G .
-*/
-static void copy_image_block_Green(const int *src, unsigned char *dst, unsigned int bytes_per_line, unsigned int scalebits)
-{
-#if UNROLL_LOOP_FOR_COPY
-       /* Unroll all loops */
-       const unsigned char *cm = pwc_crop_table+MAX_OUTER_CROP_VALUE;
-       unsigned char *d = dst;
-       const int *c = src;
-
-       d[0] = cm[c[0] >> scalebits];
-       d[2] = cm[c[1] >> scalebits];
-       d[4] = cm[c[2] >> scalebits];
-       d[6] = cm[c[3] >> scalebits];
-       d[8] = cm[c[4] >> scalebits];
-       d[10] = cm[c[5] >> scalebits];
-       d[12] = cm[c[6] >> scalebits];
-       d[14] = cm[c[7] >> scalebits];
-
-       d = dst + bytes_per_line;
-       d[0] = cm[c[8] >> scalebits];
-       d[2] = cm[c[9] >> scalebits];
-       d[4] = cm[c[10] >> scalebits];
-       d[6] = cm[c[11] >> scalebits];
-       d[8] = cm[c[12] >> scalebits];
-       d[10] = cm[c[13] >> scalebits];
-       d[12] = cm[c[14] >> scalebits];
-       d[14] = cm[c[15] >> scalebits];
-#else
-       int i;
-       unsigned char *d;
-       const int *c = src;
-
-       d = dst;
-       for (i = 0; i < 8; i++, c++)
-               d[i*2] = CLAMP((*c) >> scalebits);
-
-       d = dst + bytes_per_line;
-       for (i = 0; i < 8; i++, c++)
-               d[i*2] = CLAMP((*c) >> scalebits);
-#endif
-}
-#endif
-
-#if ENABLE_BAYER_DECODER
-/*
- * Format: 4x4 pixels
- *   R . R . R . R
- *   . B . B . B .
- *   R . R . R . R
- *   . B . B . B .
- */
-static void copy_image_block_RedBlue(const int *src, unsigned char *dst, unsigned int bytes_per_line, unsigned int scalebits)
-{
-#if UNROLL_LOOP_FOR_COPY
-       /* Unroll all loops */
-       const unsigned char *cm = pwc_crop_table+MAX_OUTER_CROP_VALUE;
-       unsigned char *d = dst;
-       const int *c = src;
-
-       d[0] = cm[c[0] >> scalebits];
-       d[2] = cm[c[1] >> scalebits];
-       d[4] = cm[c[2] >> scalebits];
-       d[6] = cm[c[3] >> scalebits];
-
-       d = dst + bytes_per_line;
-       d[1] = cm[c[4] >> scalebits];
-       d[3] = cm[c[5] >> scalebits];
-       d[5] = cm[c[6] >> scalebits];
-       d[7] = cm[c[7] >> scalebits];
-
-       d = dst + bytes_per_line*2;
-       d[0] = cm[c[8] >> scalebits];
-       d[2] = cm[c[9] >> scalebits];
-       d[4] = cm[c[10] >> scalebits];
-       d[6] = cm[c[11] >> scalebits];
-
-       d = dst + bytes_per_line*3;
-       d[1] = cm[c[12] >> scalebits];
-       d[3] = cm[c[13] >> scalebits];
-       d[5] = cm[c[14] >> scalebits];
-       d[7] = cm[c[15] >> scalebits];
-#else
-       int i;
-       unsigned char *d;
-       const int *c = src;
-
-       d = dst;
-       for (i = 0; i < 4; i++, c++)
-               d[i*2] = CLAMP((*c) >> scalebits);
-
-       d = dst + bytes_per_line;
-       for (i = 0; i < 4; i++, c++)
-               d[i*2+1] = CLAMP((*c) >> scalebits);
-
-       d = dst + bytes_per_line*2;
-       for (i = 0; i < 4; i++, c++)
-               d[i*2] = CLAMP((*c) >> scalebits);
-
-       d = dst + bytes_per_line*3;
-       for (i = 0; i < 4; i++, c++)
-               d[i*2+1] = CLAMP((*c) >> scalebits);
-#endif
-}
-#endif
-
 /*
  * To manage the stream, we keep bits in a 32 bits register.
  * fill_nbits(n): fill the reservoir with at least n bits
 
 }
 
-#if ENABLE_BAYER_DECODER
-/*
- * Size need to be a multiple of 8 in width
- *
- * Return a block of four line encoded like this:
- *
- *   G R G R G R G R G R G R G R G R
- *   B G B G B G B G B G B G B G B G
- *   G R G R G R G R G R G R G R G R
- *   B G B G B G B G B G B G B G B G
- *
- */
-static void DecompressBandBayer(struct pwc_dec23_private *pdec,
-                               const unsigned char *rawyuv,
-                               unsigned char *rgbbayer,
-                               unsigned int   compressed_image_width,
-                               unsigned int   real_image_width)
-{
-       int compression_index, nblocks;
-       const unsigned char *ptable0004;
-       const unsigned char *ptable8004;
-       unsigned char *dest;
-
-       pdec->reservoir = 0;
-       pdec->nbits_in_reservoir = 0;
-       pdec->stream = rawyuv + 1;      /* The first byte of the stream is skipped */
-
-       get_nbits(pdec, 4, compression_index);
-
-       /* pass 1: uncompress RB component */
-       nblocks = compressed_image_width / 4;
-
-       ptable0004 = pdec->table_0004_pass1[compression_index];
-       ptable8004 = pdec->table_8004_pass1[compression_index];
-       dest = rgbbayer;
-
-       /* Each block decode a square of 4x4 */
-       while (nblocks) {
-               decode_block(pdec, ptable0004, ptable8004);
-               copy_image_block_RedBlue(pdec->temp_colors, rgbbayer, real_image_width, pdec->scalebits);
-               dest += 8;
-               nblocks--;
-       }
-
-       /* pass 2: uncompress G component */
-       nblocks = compressed_image_width / 8;
-
-       ptable0004 = pdec->table_0004_pass2[compression_index];
-       ptable8004 = pdec->table_8004_pass2[compression_index];
-
-       /* Each block decode a square of 4x4 */
-       while (nblocks) {
-               decode_block(pdec, ptable0004, ptable8004);
-               copy_image_block_Green(pdec->temp_colors, rgbbayer+1, real_image_width, pdec->scalebits);
-
-               decode_block(pdec, ptable0004, ptable8004);
-               copy_image_block_Green(pdec->temp_colors, rgbbayer+real_image_width, real_image_width, pdec->scalebits);
-
-               rgbbayer += 16;
-               nblocks -= 2;
-       }
-}
-#endif
-
-
 /**
  *
  * Uncompress a pwc23 buffer.
  *
  * src: raw data
  * dst: image output
- * flags: PWCX_FLAG_PLANAR or PWCX_FLAG_BAYER
  */
 void pwc_dec23_decompress(const struct pwc_device *pwc,
                          const void *src,
-                         void *dst,
-                         int flags)
+                         void *dst)
 {
        int bandlines_left, stride, bytes_per_block;
        struct pwc_dec23_private *pdec = pwc->decompress_data;
 
+       /* YUV420P image format */
+       unsigned char *pout_planar_y;
+       unsigned char *pout_planar_u;
+       unsigned char *pout_planar_v;
+       unsigned int   plane_size;
+
        mutex_lock(&pdec->lock);
 
        bandlines_left = pwc->image.y / 4;
        bytes_per_block = pwc->view.x * 4;
-
-       if (flags & PWCX_FLAG_BAYER) {
-#if ENABLE_BAYER_DECODER
-               /* RGB Bayer format */
-               unsigned char *rgbout;
-
-               stride = pwc->view.x * pwc->offset.y;
-               rgbout = dst + stride + pwc->offset.x;
-
-
-               while (bandlines_left--) {
-
-                       DecompressBandBayer(pwc->decompress_data,
-                                           src,
-                                           rgbout,
-                                           pwc->image.x, pwc->view.x);
-
-                       src += pwc->vbandlength;
-                       rgbout += bytes_per_block;
-
-               }
-#else
-               memset(dst, 0, pwc->view.x * pwc->view.y);
-#endif
-
-       } else {
-               /* YUV420P image format */
-               unsigned char *pout_planar_y;
-               unsigned char *pout_planar_u;
-               unsigned char *pout_planar_v;
-               unsigned int   plane_size;
-
-               plane_size = pwc->view.x * pwc->view.y;
-
-               /* offset in Y plane */
-               stride = pwc->view.x * pwc->offset.y;
-               pout_planar_y = dst + stride + pwc->offset.x;
-
-               /* offsets in U/V planes */
-               stride = (pwc->view.x * pwc->offset.y) / 4 + pwc->offset.x / 2;
-               pout_planar_u = dst + plane_size + stride;
-               pout_planar_v = dst + plane_size + plane_size / 4 + stride;
-
-               while (bandlines_left--) {
-
-                       DecompressBand23(pwc->decompress_data,
-                                        src,
-                                        pout_planar_y, pout_planar_u, pout_planar_v,
-                                        pwc->image.x, pwc->view.x);
-                       src += pwc->vbandlength;
-                       pout_planar_y += bytes_per_block;
-                       pout_planar_u += pwc->view.x;
-                       pout_planar_v += pwc->view.x;
-
-               }
+       plane_size = pwc->view.x * pwc->view.y;
+
+       /* offset in Y plane */
+       stride = pwc->view.x * pwc->offset.y;
+       pout_planar_y = dst + stride + pwc->offset.x;
+
+       /* offsets in U/V planes */
+       stride = (pwc->view.x * pwc->offset.y) / 4 + pwc->offset.x / 2;
+       pout_planar_u = dst + plane_size + stride;
+       pout_planar_v = dst + plane_size + plane_size / 4 + stride;
+
+       while (bandlines_left--) {
+               DecompressBand23(pwc->decompress_data,
+                                src,
+                                pout_planar_y, pout_planar_u, pout_planar_v,
+                                pwc->image.x, pwc->view.x);
+               src += pwc->vbandlength;
+               pout_planar_y += bytes_per_block;
+               pout_planar_u += pwc->view.x;
+               pout_planar_v += pwc->view.x;
        }
-
        mutex_unlock(&pdec->lock);
 }